00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <string.h>
00022
00023 #include "avcodec.h"
00024 #include "libavutil/mem.h"
00025
00026
00027 static int dump_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
00028 uint8_t **poutbuf, int *poutbuf_size,
00029 const uint8_t *buf, int buf_size, int keyframe){
00030 int cmd= args ? *args : 0;
00031
00032 if(avctx->extradata){
00033 if( (keyframe && (avctx->flags2 & CODEC_FLAG2_LOCAL_HEADER) && cmd=='a')
00034 ||(keyframe && (cmd=='k' || !cmd))
00035 ||(cmd=='e')
00036 ){
00037 int size= buf_size + avctx->extradata_size;
00038 *poutbuf_size= size;
00039 *poutbuf= av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
00040
00041 memcpy(*poutbuf, avctx->extradata, avctx->extradata_size);
00042 memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
00043 return 1;
00044 }
00045 }
00046 return 0;
00047 }
00048
00049 AVBitStreamFilter ff_dump_extradata_bsf={
00050 "dump_extra",
00051 0,
00052 dump_extradata,
00053 };