Mercurial > libavformat.hg
diff utils.c @ 2573:2842354cb9a4 libavformat
Added definition and utility functions to handle AVProgram(s) in AVFormatContext
author | nicodvb |
---|---|
date | Tue, 25 Sep 2007 20:45:46 +0000 |
parents | c57d3d6c8f44 |
children | d71f084d9835 |
line wrap: on
line diff
--- a/utils.c Tue Sep 25 19:30:03 2007 +0000 +++ b/utils.c Tue Sep 25 20:45:46 2007 +0000 @@ -2067,6 +2067,11 @@ 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 @@ 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 */