|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|