Commit 96c7a5c0 authored by aurel's avatar aurel

add support for chapters definition in lavf

patch by Anton Khirnov  wyskas _at_ gmail _dot_ com


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@13240 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent d8a9c12b
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#define FFMPEG_AVFORMAT_H #define FFMPEG_AVFORMAT_H
#define LIBAVFORMAT_VERSION_MAJOR 52 #define LIBAVFORMAT_VERSION_MAJOR 52
#define LIBAVFORMAT_VERSION_MINOR 13 #define LIBAVFORMAT_VERSION_MINOR 14
#define LIBAVFORMAT_VERSION_MICRO 0 #define LIBAVFORMAT_VERSION_MICRO 0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
...@@ -389,6 +389,11 @@ typedef struct AVProgram { ...@@ -389,6 +389,11 @@ typedef struct AVProgram {
#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present #define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present
(streams are added dynamically) */ (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 #define MAX_STREAMS 20
/** /**
...@@ -514,6 +519,9 @@ typedef struct AVFormatContext { ...@@ -514,6 +519,9 @@ typedef struct AVFormatContext {
* obtained from real-time capture devices. * obtained from real-time capture devices.
*/ */
unsigned int max_picture_buffer; unsigned int max_picture_buffer;
int num_chapters;
AVChapter **chapters;
} AVFormatContext; } AVFormatContext;
typedef struct AVPacketList { typedef struct AVPacketList {
...@@ -744,6 +752,18 @@ void av_close_input_file(AVFormatContext *s); ...@@ -744,6 +752,18 @@ void av_close_input_file(AVFormatContext *s);
AVStream *av_new_stream(AVFormatContext *s, int id); AVStream *av_new_stream(AVFormatContext *s, int id);
AVProgram *av_new_program(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. * Set the pts for a given stream.
* *
......
...@@ -2148,6 +2148,11 @@ void av_close_input_stream(AVFormatContext *s) ...@@ -2148,6 +2148,11 @@ void av_close_input_stream(AVFormatContext *s)
av_freep(&s->programs); av_freep(&s->programs);
flush_packet_queue(s); flush_packet_queue(s);
av_freep(&s->priv_data); 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); av_free(s);
} }
...@@ -2229,6 +2234,19 @@ void av_set_program_name(AVProgram *program, char *provider_name, char *name) ...@@ -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 */ /* output media file */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment