Originally committed as revision 10579 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -21,8 +21,8 @@ | |||
| #ifndef AVFORMAT_H | |||
| #define AVFORMAT_H | |||
| #define LIBAVFORMAT_VERSION_INT ((51<<16)+(13<<8)+4) | |||
| #define LIBAVFORMAT_VERSION 51.13.4 | |||
| #define LIBAVFORMAT_VERSION_INT ((51<<16)+(14<<8)+0) | |||
| #define LIBAVFORMAT_VERSION 51.14.0 | |||
| #define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT | |||
| #define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) | |||
| @@ -345,6 +345,16 @@ typedef struct AVStream { | |||
| int64_t pts_buffer[MAX_REORDER_DELAY+1]; | |||
| } AVStream; | |||
| #define AV_PROGRAM_RUNNING 1 | |||
| typedef struct AVProgram { | |||
| int id; | |||
| char *provider_name; ///< Network name for DVB streams | |||
| char *name; ///< Service name for DVB streams | |||
| int flags; | |||
| enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller | |||
| } AVProgram; | |||
| #define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present | |||
| (streams are added dynamically) */ | |||
| @@ -430,6 +440,9 @@ typedef struct AVFormatContext { | |||
| const uint8_t *key; | |||
| int keylen; | |||
| unsigned int nb_programs; | |||
| AVProgram **programs; | |||
| } AVFormatContext; | |||
| typedef struct AVPacketList { | |||
| @@ -647,6 +660,7 @@ void av_close_input_file(AVFormatContext *s); | |||
| * @param id file format dependent stream id | |||
| */ | |||
| AVStream *av_new_stream(AVFormatContext *s, int id); | |||
| AVProgram *av_new_program(AVFormatContext *s, int id); | |||
| /** | |||
| * Set the pts for a given stream. | |||
| @@ -2067,6 +2067,11 @@ void av_close_input_file(AVFormatContext *s) | |||
| av_free(st->codec); | |||
| av_free(st); | |||
| } | |||
| for(i=s->nb_programs-1; i>=0; i--) { | |||
| av_freep(&s->programs[i]->provider_name); | |||
| av_freep(&s->programs[i]->name); | |||
| av_freep(&s->programs[i]); | |||
| } | |||
| flush_packet_queue(s); | |||
| must_open_file = 1; | |||
| if (s->iformat->flags & AVFMT_NOFILE) { | |||
| @@ -2113,6 +2118,43 @@ AVStream *av_new_stream(AVFormatContext *s, int id) | |||
| return st; | |||
| } | |||
| AVProgram *av_new_program(AVFormatContext *ac, int id) | |||
| { | |||
| AVProgram *program=NULL; | |||
| int i; | |||
| #ifdef DEBUG_SI | |||
| av_log(ac, AV_LOG_DEBUG, "new_program: id=0x%04x\n", id); | |||
| #endif | |||
| for(i=0; i<ac->nb_programs; i++) | |||
| if(ac->programs[i]->id == id) | |||
| program = ac->programs[i]; | |||
| if(!program){ | |||
| program = av_mallocz(sizeof(AVProgram)); | |||
| if (!program) | |||
| return NULL; | |||
| dynarray_add(&ac->programs, &ac->nb_programs, program); | |||
| program->discard = AVDISCARD_NONE; | |||
| } | |||
| program->id = id; | |||
| return program; | |||
| } | |||
| void av_set_program_name(AVProgram *program, char *provider_name, char *name) | |||
| { | |||
| assert(!provider_name == !name); | |||
| if(name){ | |||
| av_free(program->provider_name); | |||
| av_free(program-> name); | |||
| program->provider_name = av_strdup(provider_name); | |||
| program-> name = av_strdup( name); | |||
| } | |||
| } | |||
| /************************************************************/ | |||
| /* output media file */ | |||