4 AVBitStreamFilter *first_bitstream_filter= NULL;
6 void av_register_bitstream_filter(AVBitStreamFilter *bsf){
7 bsf->next = first_bitstream_filter;
8 first_bitstream_filter= bsf;
11 AVBitStreamFilterContext *av_bitstream_filter_init(const char *name){
12 AVBitStreamFilter *bsf= first_bitstream_filter;
15 if(!strcmp(name, bsf->name)){
16 AVBitStreamFilterContext *bsfc= av_mallocz(sizeof(AVBitStreamFilterContext));
18 bsfc->priv_data= av_mallocz(bsf->priv_data_size);
26 void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc){
27 av_freep(&bsfc->priv_data);
28 av_parser_close(bsfc->parser);
32 int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
33 AVCodecContext *avctx, const char *args,
34 uint8_t **poutbuf, int *poutbuf_size,
35 const uint8_t *buf, int buf_size, int keyframe){
36 *poutbuf= (uint8_t *) buf;
37 *poutbuf_size= buf_size;
38 return bsfc->filter->filter(bsfc, avctx, args, poutbuf, poutbuf_size, buf, buf_size, keyframe);
41 static int dump_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
42 uint8_t **poutbuf, int *poutbuf_size,
43 const uint8_t *buf, int buf_size, int keyframe){
44 int cmd= args ? *args : 0;
45 /* cast to avoid warning about discarding qualifiers */
47 if( (keyframe && (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER) && cmd=='a')
48 ||(keyframe && (cmd=='k' || !cmd))
50 /*||(? && (s->flags & PARSER_FLAG_DUMP_EXTRADATA_AT_BEGIN)*/){
51 int size= buf_size + avctx->extradata_size;
53 *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
55 memcpy(*poutbuf, avctx->extradata, avctx->extradata_size);
56 memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
63 static int remove_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
64 uint8_t **poutbuf, int *poutbuf_size,
65 const uint8_t *buf, int buf_size, int keyframe){
66 int cmd= args ? *args : 0;
67 AVCodecParserContext *s;
70 bsfc->parser= av_parser_init(avctx->codec_id);
74 if(s && s->parser->split){
75 if( (((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) || (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)) && cmd=='a')
76 ||(!keyframe && cmd=='k')
79 int i= s->parser->split(avctx, buf, buf_size);
84 *poutbuf= (uint8_t *) buf;
85 *poutbuf_size= buf_size;
90 static int noise(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
91 uint8_t **poutbuf, int *poutbuf_size,
92 const uint8_t *buf, int buf_size, int keyframe){
93 int amount= args ? atoi(args) : 10000;
94 unsigned int *state= bsfc->priv_data;
97 *poutbuf= av_malloc(buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
99 memcpy(*poutbuf, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
100 for(i=0; i<buf_size; i++){
101 (*state) += (*poutbuf)[i] + 1;
102 if(*state % amount == 0)
103 (*poutbuf)[i] = *state;
108 AVBitStreamFilter dump_extradata_bsf={
114 AVBitStreamFilter remove_extradata_bsf={
120 AVBitStreamFilter noise_bsf={