mirror of https://git.ffmpeg.org/ffmpeg.git
avformat: Make AVChapter.id an int64_t on next major bump
64 bits are needed in order to retain the uid values of Matroska chapters; the type is kept signed because the semantics of NUT chapters depend upon whether the id is > 0 or < 0. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
e1e6a5c8a5
commit
e318438f2f
|
@ -15,6 +15,10 @@ libavutil: 2017-10-21
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2021-03-19 - xxxxxxxxxx - lavf 58.75.100 - avformat.h
|
||||||
|
AVChapter.id will be changed from int to int64_t
|
||||||
|
on the next major version bump.
|
||||||
|
|
||||||
2021-03-xx - xxxxxxxxxx - lavc 58.133.100 - codec.h
|
2021-03-xx - xxxxxxxxxx - lavc 58.133.100 - codec.h
|
||||||
Deprecated av_init_packet(). Once removed, sizeof(AVPacket) will
|
Deprecated av_init_packet(). Once removed, sizeof(AVPacket) will
|
||||||
no longer be a part of the public ABI.
|
no longer be a part of the public ABI.
|
||||||
|
|
|
@ -222,7 +222,7 @@ static int aa_read_header(AVFormatContext *s)
|
||||||
c->content_end = start + largest_size;
|
c->content_end = start + largest_size;
|
||||||
|
|
||||||
while ((chapter_pos = avio_tell(pb)) >= 0 && chapter_pos < c->content_end) {
|
while ((chapter_pos = avio_tell(pb)) >= 0 && chapter_pos < c->content_end) {
|
||||||
int chapter_idx = s->nb_chapters;
|
unsigned chapter_idx = s->nb_chapters;
|
||||||
uint32_t chapter_size = avio_rb32(pb);
|
uint32_t chapter_size = avio_rb32(pb);
|
||||||
if (chapter_size == 0 || avio_feof(pb))
|
if (chapter_size == 0 || avio_feof(pb))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1188,7 +1188,11 @@ typedef struct AVProgram {
|
||||||
change dynamically at runtime. */
|
change dynamically at runtime. */
|
||||||
|
|
||||||
typedef struct AVChapter {
|
typedef struct AVChapter {
|
||||||
|
#if FF_API_CHAPTER_ID_INT
|
||||||
int id; ///< unique ID to identify the chapter
|
int id; ///< unique ID to identify the chapter
|
||||||
|
#else
|
||||||
|
int64_t id; ///< unique ID to identify the chapter
|
||||||
|
#endif
|
||||||
AVRational time_base; ///< time base in which the start/end timestamps are specified
|
AVRational time_base; ///< time base in which the start/end timestamps are specified
|
||||||
int64_t start, end; ///< chapter start/end time in time_base units
|
int64_t start, end; ///< chapter start/end time in time_base units
|
||||||
AVDictionary *metadata;
|
AVDictionary *metadata;
|
||||||
|
|
|
@ -560,7 +560,11 @@ void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
|
||||||
*
|
*
|
||||||
* @return AVChapter or NULL on error
|
* @return AVChapter or NULL on error
|
||||||
*/
|
*/
|
||||||
|
#if FF_API_CHAPTER_ID_INT
|
||||||
AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
|
AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
|
||||||
|
#else
|
||||||
|
AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base,
|
||||||
|
#endif
|
||||||
int64_t start, int64_t end, const char *title);
|
int64_t start, int64_t end, const char *title);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1669,7 +1669,11 @@ static int mkv_write_chapters(AVFormatContext *s)
|
||||||
int64_t chapterstart = av_rescale_q(c->start, c->time_base, scale);
|
int64_t chapterstart = av_rescale_q(c->start, c->time_base, scale);
|
||||||
int64_t chapterend = av_rescale_q(c->end, c->time_base, scale);
|
int64_t chapterend = av_rescale_q(c->end, c->time_base, scale);
|
||||||
const AVDictionaryEntry *t;
|
const AVDictionaryEntry *t;
|
||||||
|
#if FF_API_CHAPTER_ID_INT
|
||||||
uint64_t uid = create_new_ids ? i + 1ULL : (uint32_t)c->id;
|
uint64_t uid = create_new_ids ? i + 1ULL : (uint32_t)c->id;
|
||||||
|
#else
|
||||||
|
uint64_t uid = create_new_ids ? i + 1ULL : c->id;
|
||||||
|
#endif
|
||||||
if (chapterstart < 0 || chapterstart > chapterend || chapterend < 0) {
|
if (chapterstart < 0 || chapterstart > chapterend || chapterend < 0) {
|
||||||
av_log(s, AV_LOG_ERROR,
|
av_log(s, AV_LOG_ERROR,
|
||||||
"Invalid chapter start (%"PRId64") or end (%"PRId64").\n",
|
"Invalid chapter start (%"PRId64") or end (%"PRId64").\n",
|
||||||
|
|
|
@ -489,8 +489,8 @@ static int decode_info_header(NUTContext *nut)
|
||||||
AVIOContext *bc = s->pb;
|
AVIOContext *bc = s->pb;
|
||||||
uint64_t tmp, chapter_start, chapter_len;
|
uint64_t tmp, chapter_start, chapter_len;
|
||||||
unsigned int stream_id_plus1, count;
|
unsigned int stream_id_plus1, count;
|
||||||
int chapter_id, i, ret = 0;
|
int i, ret = 0;
|
||||||
int64_t value, end;
|
int64_t chapter_id, value, end;
|
||||||
char name[256], str_value[1024], type_str[256];
|
char name[256], str_value[1024], type_str[256];
|
||||||
const char *type;
|
const char *type;
|
||||||
int *event_flags = NULL;
|
int *event_flags = NULL;
|
||||||
|
|
|
@ -4626,7 +4626,11 @@ AVProgram *av_new_program(AVFormatContext *ac, int id)
|
||||||
return program;
|
return program;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FF_API_CHAPTER_ID_INT
|
||||||
AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
|
AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
|
||||||
|
#else
|
||||||
|
AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base,
|
||||||
|
#endif
|
||||||
int64_t start, int64_t end, const char *title)
|
int64_t start, int64_t end, const char *title)
|
||||||
{
|
{
|
||||||
AVChapter *chapter = NULL;
|
AVChapter *chapter = NULL;
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
||||||
// Also please add any ticket numbers that you believe might be affected here
|
// Also please add any ticket numbers that you believe might be affected here
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 58
|
#define LIBAVFORMAT_VERSION_MAJOR 58
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 74
|
#define LIBAVFORMAT_VERSION_MINOR 75
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
|
@ -109,6 +109,9 @@
|
||||||
#ifndef FF_API_DEMUXER_OPEN
|
#ifndef FF_API_DEMUXER_OPEN
|
||||||
#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59)
|
#define FF_API_DEMUXER_OPEN (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef FF_API_CHAPTER_ID_INT
|
||||||
|
#define FF_API_CHAPTER_ID_INT (LIBAVFORMAT_VERSION_MAJOR < 59)
|
||||||
|
#endif
|
||||||
#ifndef FF_API_LAVF_PRIV_OPT
|
#ifndef FF_API_LAVF_PRIV_OPT
|
||||||
#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60)
|
#define FF_API_LAVF_PRIV_OPT (LIBAVFORMAT_VERSION_MAJOR < 60)
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue