00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "avcodec.h"
00022
00023
00024 static int remove_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
00025 uint8_t **poutbuf, int *poutbuf_size,
00026 const uint8_t *buf, int buf_size, int keyframe){
00027 int cmd= args ? *args : 0;
00028 AVCodecParserContext *s;
00029
00030 if(!bsfc->parser){
00031 bsfc->parser= av_parser_init(avctx->codec_id);
00032 }
00033 s= bsfc->parser;
00034
00035 if(s && s->parser->split){
00036 if( (((avctx->flags & CODEC_FLAG_GLOBAL_HEADER) || (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER)) && cmd=='a')
00037 ||(!keyframe && cmd=='k')
00038 ||(cmd=='e' || !cmd)
00039 ){
00040 int i= s->parser->split(avctx, buf, buf_size);
00041 buf += i;
00042 buf_size -= i;
00043 }
00044 }
00045 *poutbuf= (uint8_t *) buf;
00046 *poutbuf_size= buf_size;
00047
00048 return 0;
00049 }
00050
00051 AVBitStreamFilter ff_remove_extradata_bsf={
00052 "remove_extra",
00053 0,
00054 remove_extradata,
00055 };