add support for chapters definition in lavf
patch by Anton Khirnov wyskas _at_ gmail _dot_ com Originally committed as revision 13240 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d311f8f3e3
commit
79d7836a5e
@ -22,7 +22,7 @@
|
||||
#define FFMPEG_AVFORMAT_H
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 52
|
||||
#define LIBAVFORMAT_VERSION_MINOR 13
|
||||
#define LIBAVFORMAT_VERSION_MINOR 14
|
||||
#define LIBAVFORMAT_VERSION_MICRO 0
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
@ -389,6 +389,11 @@ typedef struct AVProgram {
|
||||
#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present
|
||||
(streams are added dynamically) */
|
||||
|
||||
typedef struct AVChapter {
|
||||
int64_t start, end; /**< chapter start/end time in AV_TIME_BASE units */
|
||||
char *title; /**< chapter title */
|
||||
} AVChapter;
|
||||
|
||||
#define MAX_STREAMS 20
|
||||
|
||||
/**
|
||||
@ -514,6 +519,9 @@ typedef struct AVFormatContext {
|
||||
* obtained from real-time capture devices.
|
||||
*/
|
||||
unsigned int max_picture_buffer;
|
||||
|
||||
int num_chapters;
|
||||
AVChapter **chapters;
|
||||
} AVFormatContext;
|
||||
|
||||
typedef struct AVPacketList {
|
||||
@ -744,6 +752,18 @@ void av_close_input_file(AVFormatContext *s);
|
||||
AVStream *av_new_stream(AVFormatContext *s, int id);
|
||||
AVProgram *av_new_program(AVFormatContext *s, int id);
|
||||
|
||||
/**
|
||||
* Add a new chapter.
|
||||
* This function is NOT part of the public API
|
||||
* and should be ONLY used by demuxers.
|
||||
*
|
||||
* @param s media file handle
|
||||
* @param start chapter start time in AV_TIME_BASE units
|
||||
* @param end chapter end time in AV_TIME_BASE units
|
||||
* @param title chapter title
|
||||
*/
|
||||
int ff_new_chapter(AVFormatContext *s, int64_t start, int64_t end, const char *title);
|
||||
|
||||
/**
|
||||
* Set the pts for a given stream.
|
||||
*
|
||||
|
@ -2148,6 +2148,11 @@ void av_close_input_stream(AVFormatContext *s)
|
||||
av_freep(&s->programs);
|
||||
flush_packet_queue(s);
|
||||
av_freep(&s->priv_data);
|
||||
while(s->num_chapters--) {
|
||||
av_free(s->chapters[s->num_chapters]->title);
|
||||
av_free(s->chapters[s->num_chapters]);
|
||||
}
|
||||
av_freep(&s->chapters);
|
||||
av_free(s);
|
||||
}
|
||||
|
||||
@ -2229,6 +2234,19 @@ void av_set_program_name(AVProgram *program, char *provider_name, char *name)
|
||||
}
|
||||
}
|
||||
|
||||
int ff_new_chapter(AVFormatContext *s, int64_t start, int64_t end, const char *title)
|
||||
{
|
||||
AVChapter *chapter = av_mallocz(sizeof(AVChapter));
|
||||
if(!chapter)
|
||||
return AVERROR(ENOMEM);
|
||||
chapter->title = av_strdup(title);
|
||||
chapter->start = start;
|
||||
chapter->end = end;
|
||||
|
||||
dynarray_add(&s->chapters, &s->num_chapters, chapter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/************************************************************/
|
||||
/* output media file */
|
||||
|
Loading…
Reference in New Issue
Block a user