FFmpeg
Loading...
Searching...
No Matches
options.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2001 Fabrice Bellard
3 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * Options definition for AVCodecContext.
25 */
26
27#include "config_components.h"
28
29#include "avcodec.h"
30#include "avcodec_internal.h"
31#include "codec_internal.h"
32#include "libavutil/avassert.h"
33#include "libavutil/internal.h"
34#include "libavutil/mem.h"
35#include "libavutil/opt.h"
36#include <string.h>
37
39#include "options_table.h"
41
42static const char* context_to_name(void* ptr) {
43 AVCodecContext *avc= ptr;
44
45 if (avc && avc->codec)
46 return avc->codec->name;
47 else
48 return "NULL";
49}
50
51static void *codec_child_next(void *obj, void *prev)
52{
53 AVCodecContext *s = obj;
54 if (!prev && s->codec && s->codec->priv_class && s->priv_data)
55 return s->priv_data;
56 return NULL;
57}
58
59static const AVClass *codec_child_class_iterate(void **iter)
60{
61 const AVCodec *c;
62 /* find next codec with priv options */
63 while (c = av_codec_iterate(iter))
64 if (c->priv_class)
65 return c->priv_class;
66 return NULL;
67}
68
70{
71 AVCodecContext* avctx = ptr;
72 if (avctx->codec && ff_codec_is_decoder(avctx->codec))
74 else
76}
77
79 .class_name = "AVCodecContext",
80 .item_name = context_to_name,
81 .option = avcodec_options,
82 .version = LIBAVUTIL_VERSION_INT,
83 .log_level_offset_offset = offsetof(AVCodecContext, log_level_offset),
84 .child_next = codec_child_next,
85 .child_class_iterate = codec_child_class_iterate,
86 .category = AV_CLASS_CATEGORY_ENCODER,
87 .get_category = get_category,
88};
89
91{
92 const FFCodec *const codec2 = ffcodec(codec);
93 int flags=0;
94 memset(s, 0, sizeof(AVCodecContext));
95
96 s->av_class = &av_codec_context_class;
97
98 s->codec_type = codec ? codec->type : AVMEDIA_TYPE_UNKNOWN;
99 if (codec) {
100 s->codec = codec;
101 s->codec_id = codec->id;
102 }
103
104 if(s->codec_type == AVMEDIA_TYPE_AUDIO)
106 else if(s->codec_type == AVMEDIA_TYPE_VIDEO)
108 else if(s->codec_type == AVMEDIA_TYPE_SUBTITLE)
111
112 av_channel_layout_uninit(&s->ch_layout);
113
114 s->time_base = (AVRational){0,1};
115 s->framerate = (AVRational){ 0, 1 };
116 s->pkt_timebase = (AVRational){ 0, 1 };
117 s->get_buffer2 = avcodec_default_get_buffer2;
118 s->get_format = avcodec_default_get_format;
119 s->get_encode_buffer = avcodec_default_get_encode_buffer;
120 s->execute = avcodec_default_execute;
121 s->execute2 = avcodec_default_execute2;
122 s->sample_aspect_ratio = (AVRational){0,1};
123 s->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
124 s->pix_fmt = AV_PIX_FMT_NONE;
125 s->sw_pix_fmt = AV_PIX_FMT_NONE;
126 s->sample_fmt = AV_SAMPLE_FMT_NONE;
127
128 if(codec && codec2->priv_data_size){
129 s->priv_data = av_mallocz(codec2->priv_data_size);
130 if (!s->priv_data)
131 return AVERROR(ENOMEM);
132 if(codec->priv_class){
133 *(const AVClass**)s->priv_data = codec->priv_class;
134 av_opt_set_defaults(s->priv_data);
135 }
136 }
137 if (codec && codec2->defaults) {
138 int ret;
139 const FFCodecDefault *d = codec2->defaults;
140 while (d->key) {
141 ret = av_opt_set(s, d->key, d->value, 0);
142 av_assert0(ret >= 0);
143 d++;
144 }
145 }
146 return 0;
147}
148
150{
151 AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));
152
153 if (!avctx)
154 return NULL;
155
156 if (init_context_defaults(avctx, codec) < 0) {
157 av_free(avctx);
158 return NULL;
159 }
160
161 return avctx;
162}
163
165{
166 AVCodecContext *avctx = *pavctx;
167
168 if (!avctx)
169 return;
170
171 ff_codec_close(avctx);
172
173 av_freep(&avctx->extradata);
174 av_freep(&avctx->subtitle_header);
175 av_freep(&avctx->intra_matrix);
177 av_freep(&avctx->inter_matrix);
178 av_freep(&avctx->rc_override);
180
181 av_freep(pavctx);
182}
183
185{
187}
188
189#define SROFFSET(x) offsetof(AVSubtitleRect,x)
190
192{"x", "", SROFFSET(x), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
193{"y", "", SROFFSET(y), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
194{"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
195{"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
196{"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
197{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, .unit = "flags"},
198{"forced", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0},
199{NULL},
200};
201
203 .class_name = "AVSubtitleRect",
204 .item_name = NULL,
205 .option = subtitle_rect_options,
206 .version = LIBAVUTIL_VERSION_INT,
207};
208
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
av_cold void ff_codec_close(AVCodecContext *avctx)
Definition avcodec.c:443
Libavcodec external API header.
#define flags(name, subs,...)
Definition cbs_h264.c:74
#define s(width, name)
Definition cbs_vp9.c:198
static av_always_inline const FFCodec * ffcodec(const AVCodec *codec)
static int ff_codec_is_decoder(const AVCodec *avcodec)
Internal version of av_codec_is_decoder().
#define NULL
Definition coverity.c:32
#define AV_OPT_FLAG_AUDIO_PARAM
Definition opt.h:356
#define AV_OPT_FLAG_VIDEO_PARAM
Definition opt.h:357
#define AV_OPT_FLAG_SUBTITLE_PARAM
Definition opt.h:358
@ AV_OPT_TYPE_FLAGS
Underlying C type is unsigned int.
Definition opt.h:254
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
Definition options.c:184
const AVClass * avcodec_get_subtitle_rect_class(void)
Get the AVClass for AVSubtitleRect.
Definition options.c:209
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition options.c:149
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
Definition allcodecs.c:943
void avcodec_free_context(AVCodecContext **pavctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Definition options.c:164
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags)
The default callback for AVCodecContext.get_buffer2().
Definition get_buffer.c:253
int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags)
The default callback for AVCodecContext.get_encode_buffer().
Definition encode.c:84
enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat *fmt)
Definition decode.c:1006
int avcodec_default_execute2(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
Definition avcodec.c:87
int avcodec_default_execute(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
Definition avcodec.c:73
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
#define AVERROR(e)
Definition error.h:45
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition avutil.h:199
@ AV_SAMPLE_FMT_NONE
Definition samplefmt.h:56
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition opt.c:1756
void av_opt_set_defaults2(void *s, int mask, int flags)
Set the values of all AVOption fields to their default values.
Definition opt.c:1761
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
Definition opt.c:889
cl_device_type type
#define SROFFSET(x)
Definition options.c:189
FF_DISABLE_DEPRECATION_WARNINGS static FF_ENABLE_DEPRECATION_WARNINGS const char * context_to_name(void *ptr)
Definition options.c:42
static const AVClass av_subtitle_rect_class
Definition options.c:202
static int init_context_defaults(AVCodecContext *s, const AVCodec *codec)
Definition options.c:90
static const AVClass * codec_child_class_iterate(void **iter)
Definition options.c:59
static const AVClass av_codec_context_class
Definition options.c:78
static AVClassCategory get_category(void *ptr)
Definition options.c:69
static const AVOption subtitle_rect_options[]
Definition options.c:191
static void * codec_child_next(void *obj, void *prev)
Definition options.c:51
static const AVOption avcodec_options[]
common internal API header
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition internal.h:66
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition internal.h:67
uint8_t w
Definition llvidencdsp.c:39
AVClassCategory
Definition log.h:28
@ AV_CLASS_CATEGORY_ENCODER
Definition log.h:34
@ AV_CLASS_CATEGORY_DECODER
Definition log.h:35
Memory handling functions.
#define av_malloc(s)
Definition ops_static.c:52
AVOptions.
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
Describe the class of an AVClass context structure.
Definition log.h:76
main external API structure.
Definition avcodec.h:443
uint16_t * chroma_intra_matrix
custom intra quantization matrix
Definition avcodec.h:976
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
uint16_t * inter_matrix
custom inter quantization matrix Must be allocated with the av_malloc() family of functions,...
Definition avcodec.h:969
const struct AVCodec * codec
Definition avcodec.h:452
uint16_t * intra_matrix
custom intra quantization matrix Must be allocated with the av_malloc() family of functions,...
Definition avcodec.h:960
uint8_t * subtitle_header
Definition avcodec.h:1744
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
RcOverride * rc_override
Definition avcodec.h:1281
AVCodec.
Definition codec.h:175
enum AVCodecID id
Definition codec.h:189
const AVClass * priv_class
AVClass for the private context.
Definition codec.h:197
enum AVMediaType type
Definition codec.h:188
const char * name
Name of the codec implementation.
Definition codec.h:182
AVOption.
Definition opt.h:428
Rational number (pair of numerator and denominator).
Definition rational.h:58
const char * key
const char * value
int priv_data_size
const FFCodecDefault * defaults
Private codec-specific defaults.
#define av_free(p)
#define av_mallocz(s)
#define av_freep(p)
static double c[64]