| @@ -23,35 +23,43 @@ | |||
| #include "avcodec.h" | |||
| #include "libavutil/mem.h" | |||
| static AVBitStreamFilter *first_bitstream_filter= NULL; | |||
| static AVBitStreamFilter *first_bitstream_filter = NULL; | |||
| AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f){ | |||
| if(f) return f->next; | |||
| else return first_bitstream_filter; | |||
| AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f) | |||
| { | |||
| if (f) | |||
| return f->next; | |||
| else | |||
| return first_bitstream_filter; | |||
| } | |||
| void av_register_bitstream_filter(AVBitStreamFilter *bsf){ | |||
| bsf->next = first_bitstream_filter; | |||
| first_bitstream_filter= bsf; | |||
| void av_register_bitstream_filter(AVBitStreamFilter *bsf) | |||
| { | |||
| bsf->next = first_bitstream_filter; | |||
| first_bitstream_filter = bsf; | |||
| } | |||
| AVBitStreamFilterContext *av_bitstream_filter_init(const char *name){ | |||
| AVBitStreamFilter *bsf= first_bitstream_filter; | |||
| AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) | |||
| { | |||
| AVBitStreamFilter *bsf = first_bitstream_filter; | |||
| while(bsf){ | |||
| if(!strcmp(name, bsf->name)){ | |||
| AVBitStreamFilterContext *bsfc= av_mallocz(sizeof(AVBitStreamFilterContext)); | |||
| bsfc->filter= bsf; | |||
| bsfc->priv_data = bsf->priv_data_size ? av_mallocz(bsf->priv_data_size) : NULL; | |||
| while (bsf) { | |||
| if (!strcmp(name, bsf->name)) { | |||
| AVBitStreamFilterContext *bsfc = | |||
| av_mallocz(sizeof(AVBitStreamFilterContext)); | |||
| bsfc->filter = bsf; | |||
| bsfc->priv_data = | |||
| bsf->priv_data_size ? av_mallocz(bsf->priv_data_size) : NULL; | |||
| return bsfc; | |||
| } | |||
| bsf= bsf->next; | |||
| bsf = bsf->next; | |||
| } | |||
| return NULL; | |||
| } | |||
| void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc){ | |||
| if(bsfc->filter->close) | |||
| void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) | |||
| { | |||
| if (bsfc->filter->close) | |||
| bsfc->filter->close(bsfc); | |||
| av_freep(&bsfc->priv_data); | |||
| av_parser_close(bsfc->parser); | |||
| @@ -60,9 +68,11 @@ void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc){ | |||
| int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, | |||
| AVCodecContext *avctx, const char *args, | |||
| uint8_t **poutbuf, int *poutbuf_size, | |||
| const uint8_t *buf, int buf_size, int keyframe){ | |||
| *poutbuf= (uint8_t *) buf; | |||
| *poutbuf_size= buf_size; | |||
| return bsfc->filter->filter(bsfc, avctx, args, poutbuf, poutbuf_size, buf, buf_size, keyframe); | |||
| uint8_t **poutbuf, int *poutbuf_size, | |||
| const uint8_t *buf, int buf_size, int keyframe) | |||
| { | |||
| *poutbuf = (uint8_t *)buf; | |||
| *poutbuf_size = buf_size; | |||
| return bsfc->filter->filter(bsfc, avctx, args, poutbuf, poutbuf_size, | |||
| buf, buf_size, keyframe); | |||
| } | |||