2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
4 * This file is part of Libav.
6 * Libav 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.
11 * Libav 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.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with Libav; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 #include "libavutil/log.h"
27 #include "libavutil/mem.h"
28 #include "libavutil/opt.h"
35 typedef struct DumpExtradataContext
{
38 } DumpExtradataContext
;
40 static int dump_extradata(AVBSFContext
*ctx
, AVPacket
*out
)
42 DumpExtradataContext
*s
= ctx
->priv_data
;
46 ret
= ff_bsf_get_packet(ctx
, &in
);
50 if (ctx
->par_in
->extradata
&&
51 (s
->freq
== DUMP_FREQ_ALL
||
52 (s
->freq
== DUMP_FREQ_KEYFRAME
&& in
->flags
& AV_PKT_FLAG_KEY
))) {
53 if (in
->size
>= INT_MAX
- ctx
->par_in
->extradata_size
) {
54 ret
= AVERROR(ERANGE
);
58 ret
= av_new_packet(out
, in
->size
+ ctx
->par_in
->extradata_size
);
62 ret
= av_packet_copy_props(out
, in
);
68 memcpy(out
->data
, ctx
->par_in
->extradata
, ctx
->par_in
->extradata_size
);
69 memcpy(out
->data
+ ctx
->par_in
->extradata_size
, in
->data
, in
->size
);
71 av_packet_move_ref(out
, in
);
80 #define OFFSET(x) offsetof(DumpExtradataContext, x)
81 static const AVOption options
[] = {
82 { "freq", "When do dump extradata", OFFSET(freq
), AV_OPT_TYPE_INT
,
83 { .i64
= DUMP_FREQ_KEYFRAME
}, DUMP_FREQ_KEYFRAME
, DUMP_FREQ_ALL
, 0, "freq" },
84 { "keyframe", NULL
, 0, AV_OPT_TYPE_CONST
, { .i64
= DUMP_FREQ_KEYFRAME
}, .unit
= "freq" },
85 { "all", NULL
, 0, AV_OPT_TYPE_CONST
, { .i64
= DUMP_FREQ_ALL
}, .unit
= "freq" },
89 static const AVClass dump_extradata_class
= {
90 .class_name
= "dump_extradata bsf",
91 .item_name
= av_default_item_name
,
93 .version
= LIBAVUTIL_VERSION_MAJOR
,
96 const AVBitStreamFilter ff_dump_extradata_bsf
= {
98 .priv_data_size
= sizeof(DumpExtradataContext
),
99 .priv_class
= &dump_extradata_class
,
100 .filter
= dump_extradata
,