Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ jobs:
if: matrix.os == 'windows-latest'
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
msystem: UCRT64
install: >-
mingw-w64-x86_64-autotools
mingw-w64-x86_64-ffmpeg
mingw-w64-x86_64-toolchain
mingw-w64-ucrt-x86_64-autotools
mingw-w64-ucrt-x86_64-ffmpeg
mingw-w64-ucrt-x86_64-toolchain
- name: configure
run: ./autogen.sh --enable-static --disable-shared
- name: make
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ AM_INIT_AUTOMAKE([1.11 subdir-objects])
AM_SILENT_RULES([yes])
AM_MAINTAINER_MODE([disable])

VERSION_INFO="5:1:2"
VERSION_INFO="5:1:3"

AC_MSG_CHECKING([if debug build is enabled])

Expand Down
12 changes: 12 additions & 0 deletions doc/ffms2-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,18 @@ const char *FFMS_GetTrackMetadataI(FFMS_Indexer *Indexer, int Track, const char
Returns the value of the metadata entry associated with `Key` for the given track number in the media file represented by the given `FFMS_Indexer` object.
For the list of commonly used metadata keys, see the `metadata_api Public Metadata API` comment in [avformat.h](https://code.ffmpeg.org/FFmpeg/FFmpeg/src/branch/master/libavformat/avformat.h).

### FFMS_GetContainerFirstTimeI - gets the container first time

[GetContainerFirstTimeI]: #ffms_getcontainerfirsttimei---gets-the-container-first-time
```c++
int FFMS_GetContainerFirstTimeI(FFMS_Indexer *Indexer, int64_t *pts, int *timebase);
```
Retrieves the container start time of the media file represented by the given `FFMS_Indexer` object.
On success, *pts* is set to the container start timestamp (which corresponds to `AVFormatContext::start_time` in FFmpeg) and *timebase* is set to the timebase it is expressed in.
Note that the *timebase* might be different than `FFMS_GetTimeBase`.
Returns 0 on success.
Returns non-0 on failure (e.g. if the container has no start time, or if *pts* or *timebase* is NULL).

### FFMS_GetFormatNameI - gets the name of the container format used in the given indexer

[GetFormatNameI]: #ffms_getformatnamei---gets-the-name-of-the-container-format-used-in-the-given-indexer
Expand Down
1 change: 1 addition & 0 deletions doc/ffms2-changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- Added layered decoding support, for e.g. spatial MV-HEVC.
- Added LastEndPTS to FFMS_VideoProperties. This field is the equivalent of LastEndTime, but it is expressed in the video timebase.
- Added FFMS_GetTrackMetadataI.
- Added FFMS_GetContainerFirstTimeI.

- 5.0
- Fixed all issues with FFmpeg 6.1 which is now the minimum requirement
Expand Down
5 changes: 3 additions & 2 deletions include/ffms.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#define FFMS_H

// Version format: major - minor - micro - bump
#define FFMS_VERSION ((5 << 24) | (1 << 16) | (2 << 8) | 0)
#define FFMS_VERSION ((5 << 24) | (1 << 16) | (3 << 8) | 0)

#include <stdint.h>
#include <stddef.h>
Expand Down Expand Up @@ -462,7 +462,8 @@ FFMS_API(int) FFMS_GetTrackType(FFMS_Track *T);
FFMS_API(int) FFMS_GetTrackTypeI(FFMS_Indexer *Indexer, int Track);
FFMS_API(FFMS_IndexErrorHandling) FFMS_GetErrorHandling(FFMS_Index *Index);
FFMS_API(const char *) FFMS_GetCodecNameI(FFMS_Indexer *Indexer, int Track);
FFMS_API(const char *) FFMS_GetTrackMetadataI(FFMS_Indexer *Indexer, int Track, const char *Key);
FFMS_API(const char *) FFMS_GetTrackMetadataI(FFMS_Indexer *Indexer, int Track, const char *Key); /* Introduced in FFMS_VERSION ((5 << 24) | (1 << 16) | (2 << 8) | 0) */
FFMS_API(int) FFMS_GetContainerFirstTimeI(FFMS_Indexer *Indexer, int64_t *pts, int *timebase); /* Introduced in FFMS_VERSION ((5 << 24) | (1 << 16) | (3 << 8) | 0) */
FFMS_API(const char *) FFMS_GetFormatNameI(FFMS_Indexer *Indexer);
FFMS_API(int) FFMS_GetNumFrames(FFMS_Track *T);
FFMS_API(const FFMS_FrameInfo *) FFMS_GetFrameInfo(FFMS_Track *T, int Frame);
Expand Down
4 changes: 4 additions & 0 deletions src/core/ffms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,10 @@ FFMS_API(const char *) FFMS_GetTrackMetadataI(FFMS_Indexer *Indexer, int Track,
return Indexer->GetTrackMetadata(Track, Key);
}

FFMS_API(int) FFMS_GetContainerFirstTimeI(FFMS_Indexer *Indexer, int64_t *pts, int *timebase) {
return Indexer->GetFirstTime(pts, timebase);
}

FFMS_API(int) FFMS_GetNumFrames(FFMS_Track *T) {
return T->VisibleFrameCount();
}
Expand Down
10 changes: 10 additions & 0 deletions src/core/indexing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,16 @@ const char *FFMS_Indexer::GetTrackMetadata(int Track, const char *Key) {
return Entry ? Entry->value : nullptr;
}

int FFMS_Indexer::GetFirstTime(int64_t *pts, int *timebase) {
if (FormatContext->start_time == AV_NOPTS_VALUE || !pts || !timebase)
return 1;

*pts = FormatContext->start_time;
*timebase = AV_TIME_BASE;

return 0;
}

FFMS_Index *FFMS_Indexer::DoIndexing() {
std::vector<SharedAVContext> AVContexts(FormatContext->nb_streams);

Expand Down
1 change: 1 addition & 0 deletions src/core/indexing.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ struct FFMS_Indexer {
FFMS_TrackType GetTrackType(int Track);
const char *GetTrackCodec(int Track);
const char *GetTrackMetadata(int Track, const char *Key);
int GetFirstTime(int64_t *pts, int *timebase);
const char *GetFormatName();
};

Expand Down
Loading