FFmpeg: libavcodec/bsf.c Source File
Go to the documentation of this file. 1 /*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #include <string.h>
20
21 #include "config_components.h"
22
29
35
37 {
39 }
40
46
48 {
50 }
51
53 {
56
57 if (!pctx || !*pctx)
58 return;
61
65 if (
ctx->filter->priv_class)
68 }
70
73
75 }
76
78 {
80 if (!prev &&
ctx->filter->priv_class)
83 }
84
86 {
88 }
89
97 };
98
100 {
102 }
103
105 {
109
111 if (!bsfi)
114
117
120 if (!
ctx->par_in || !
ctx->par_out) {
123 }
124 /* allocate priv data and init private options */
130 }
134 }
135 }
140 }
141
143 return 0;
147 }
148
150 {
152
153 /* check that the codec is supported */
154 if (
ctx->filter->codec_ids) {
156 if (
ctx->par_in->codec_id ==
ctx->filter->codec_ids[
i])
157 break;
161 "bitstream filter '%s'. Supported codecs are: ",
162 desc ?
desc->name :
"unknown",
ctx->par_in->codec_id,
ctx->filter->name);
167 }
170 }
171 }
172
173 /* initialize output parameters to be the same as input
174 * init below might overwrite that */
178
179 ctx->time_base_out =
ctx->time_base_in;
180
185 }
186
187 return 0;
188 }
189
191 {
193
195
197
200 }
201
203 {
206
211 return 0;
212 }
213
217 }
218
221
226
227 return 0;
228 }
229
231 {
233 }
234
236 {
239
242
245
247 if (!tmp_pkt)
249
252
253 return 0;
254 }
255
257 {
259
262
265
267
268 return 0;
269 }
270
273
276
277 unsigned idx;
// index of currently processed BSF
278
281
282
284 {
289
294
296
300
303 }
304
307
310 }
311
313 {
316
319
320 while (1) {
321 /* get a packet from the previous filter up the chain */
324 else
330 continue;
332 eof = 1;
335
336 /* send it to the next filter down the chain */
343 }
345 eof = 0;
346 } else if (eof) {
348 } else {
349 return 0;
350 }
351 }
352 }
353
355 {
357
361 }
362
364 {
367
372 }
373
375 {
376 static const char *null_filter_name = "null";
379
381 return null_filter_name;
382
385 AVBPrint bp;
387
392
394 }
395
397 }
398
403 };
404
406 .
p.
name =
"bsf_list",
413 };
414
418 };
419
421 {
423 }
424
426 {
428
429 if (!*lst)
430 return;
431
432 for (
i = 0;
i < (*lst)->nb_bsfs; ++
i)
436 }
437
439 {
441 }
442
444 {
448
452
456
459 const char * shorthand[2] = {
NULL};
460
461 if (opt)
462 shorthand[0] = opt->
name;
463
466 goto end;
467 }
468
469 if (options_dict) {
472 goto end;
473 }
474
476
477 end:
480
482 }
483
485 {
487 }
488
490 {
493
494 if ((*lst)->nb_bsfs == 1) {
495 *bsf = (*lst)->bsfs[0];
497 (*lst)->nb_bsfs = 0;
498 goto end;
499 }
500
504
506
507 ctx->bsfs = (*lst)->bsfs;
508 ctx->nb_bsfs = (*lst)->nb_bsfs;
509
510 end:
513 }
514
516 {
517 char *bsf_name, *bsf_options_str;
518
519 bsf_name =
av_strtok(str,
"=", &bsf_options_str);
520 if (!bsf_name)
522
524 }
525
527 {
530
531 if (!str)
533
535 if (!lst)
537
538 do {
543 goto end;
544 } while (*str && *++str);
545
547 end:
551 }
552
554 {
555 #if CONFIG_NULL_BSF
558 #else
560 #endif
561 }
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
AVCodecParameters * par_in
Parameters of the input stream.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Filter the word "frame" indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
This struct describes the properties of an encoded stream.
#define AVERROR_EOF
End of file.
static int bsf_list_append_internal(AVBSFList *lst, const char *bsf_name, const char *options, AVDictionary **options_dict)
int av_opt_set_from_string(void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep)
Parse the key-value pairs list in opts.
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt)
Called by the bitstream filters to get the next packet for filtering.
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
The bitstream filter state.
static av_always_inline FFBSFContext * ffbsfcontext(AVBSFContext *ctx)
void av_opt_free(void *obj)
Free all allocated objects in obj.
static void * bsf_child_next(void *obj, void *prev)
AVCodecParameters * par_out
Parameters of the output stream.
static int bsf_list_filter(AVBSFContext *bsf, AVPacket *out)
static void bsf_list_flush(AVBSFContext *bsf)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
This struct describes the properties of a single codec described by an AVCodecID.
void av_bsf_flush(AVBSFContext *ctx)
Reset the internal bitstream filter state.
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok().
void av_bsf_list_free(AVBSFList **lst)
Free list of bitstream filters.
AVRational time_base_in
The timebase used for the timestamps of the input packets.
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
#define LIBAVUTIL_VERSION_INT
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Describe the class of an AVClass context structure.
const AVClass * av_bsf_get_class(void)
Get the AVClass for AVBSFContext.
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
int(* init)(AVBSFContext *ctx)
Rational number (pair of numerator and denominator).
#define AVERROR_BSF_NOT_FOUND
Bitstream filter not found.
void(* flush)(AVBSFContext *ctx)
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
#define AVPACKET_IS_EMPTY(pkt)
AVCodecID
Identify the syntax and semantics of the bitstream.
const AVClass * ff_bsf_child_class_iterate(void **opaque)
AVBitStreamFilter p
The public AVBitStreamFilter.
const OptionDef options[]
static const AVClass bsf_class
int(* init)(AVBSFContext *ctx)
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
AVClassCategory category
Category used for visualization (like color) This is only set if the category is equal for all object...
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
void(* flush)(AVBSFContext *ctx)
static const char * bsf_list_item_name(void *ctx)
int av_bsf_list_append2(AVBSFList *lst, const char *bsf_name, AVDictionary **options)
Construct new bitstream filter context given it's name and options and append it to the list of bitst...
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
static const AVClass bsf_list_class
static int bsf_parse_single(char *str, AVBSFList *bsf_lst)
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
static int bsf_list_init(AVBSFContext *bsf)
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
int(* filter)(AVBSFContext *ctx, AVPacket *pkt)
#define i(width, name, range_min, range_max)
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
AVRational time_base_out
The timebase used for the timestamps of the output packets.
AVBSFList * av_bsf_list_alloc(void)
Allocate empty list of bitstream filters.
static const FFBitStreamFilter list_bsf
void * priv_data
Opaque filter-specific private data.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int av_bsf_get_null_filter(AVBSFContext **bsf)
Get null/pass-through bitstream filter.
const FFBitStreamFilter ff_null_bsf
const AVClass * av_class
A class for logging and AVOptions.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
Structure for chain/list of bitstream filters.
char * av_get_token(const char **buf, const char *term)
Unescape the given string until a non escaped terminating char, and return the token corresponding to...
void(* close)(AVBSFContext *ctx)
static void bsf_list_close(AVBSFContext *bsf)
static const av_always_inline FFBitStreamFilter * ff_bsf(const AVBitStreamFilter *bsf)
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
Parse string describing list of bitstream filters and create single AVBSFContext describing the whole...
@ AV_CLASS_CATEGORY_BITSTREAM_FILTER
This structure stores compressed data.
int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf)
Finalize list of bitstream filters.
int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt)
Called by bitstream filters to get packet for filtering.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
static const char * bsf_to_name(void *bsf)
void * priv_data
Format private data.
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf)
Append bitstream filter to the list of bitstream filters.
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
Generated on Thu Sep 26 2024 23:14:50 for FFmpeg by
doxygen
1.8.17