FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dump_extradata_bsf.c
Go to the documentation of this file.
1 /*
2  * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include <string.h>
22 
23 #include "avcodec.h"
24 #include "libavutil/mem.h"
25 
26 
27 static int dump_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
28  uint8_t **poutbuf, int *poutbuf_size,
29  const uint8_t *buf, int buf_size, int keyframe){
30  int cmd= args ? *args : 0;
31  /* cast to avoid warning about discarding qualifiers */
32  if(avctx->extradata){
33  if( (keyframe && (avctx->flags2 & AV_CODEC_FLAG2_LOCAL_HEADER) && cmd == 'a')
34  ||(keyframe && (cmd=='k' || !cmd))
35  ||(cmd=='e')
36  /*||(? && (s->flags & PARSER_FLAG_DUMP_EXTRADATA_AT_BEGIN)*/){
37  int size= buf_size + avctx->extradata_size;
38  *poutbuf_size= size;
39  *poutbuf= av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
40  if (!*poutbuf)
41  return AVERROR(ENOMEM);
42 
43  memcpy(*poutbuf, avctx->extradata, avctx->extradata_size);
44  memcpy((*poutbuf) + avctx->extradata_size, buf, buf_size + AV_INPUT_BUFFER_PADDING_SIZE);
45  return 1;
46  }
47  }
48  return 0;
49 }
50 
52  .name = "dump_extra",
53  .filter = dump_extradata,
54 };
memory handling functions
uint8_t
#define av_malloc(s)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1617
const char * name
Definition: avcodec.h:5374
ptrdiff_t size
Definition: opengl_enc.c:101
#define AVERROR(e)
Definition: error.h:43
Libavcodec external API header.
main external API structure.
Definition: avcodec.h:1502
#define AV_CODEC_FLAG2_LOCAL_HEADER
Place global headers at every keyframe instead of in extradata.
Definition: avcodec.h:811
static int dump_extradata(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
void * buf
Definition: avisynth_c.h:553
int extradata_size
Definition: avcodec.h:1618
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:636
AVBitStreamFilter ff_dump_extradata_bsf
int flags2
AV_CODEC_FLAG2_*.
Definition: avcodec.h:1604