FFmpeg
|
#include <string.h>
#include "config.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "cbs.h"
#include "cbs_internal.h"
#include "refstruct.h"
Go to the source code of this file.
Functions | |
av_cold int | ff_cbs_init (CodedBitstreamContext **ctx_ptr, enum AVCodecID codec_id, void *log_ctx) |
Create and initialise a new context for the given codec. More... | |
av_cold void | ff_cbs_flush (CodedBitstreamContext *ctx) |
Reset all internal state in a context. More... | |
av_cold void | ff_cbs_close (CodedBitstreamContext **ctx_ptr) |
Close a context and free all internal state. More... | |
static void | cbs_unit_uninit (CodedBitstreamUnit *unit) |
void | ff_cbs_fragment_reset (CodedBitstreamFragment *frag) |
Free the units contained in a fragment as well as the fragment's own data buffer, but not the units array itself. More... | |
av_cold void | ff_cbs_fragment_free (CodedBitstreamFragment *frag) |
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does. More... | |
static int | cbs_read_fragment_content (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag) |
static int | cbs_fill_fragment_data (CodedBitstreamFragment *frag, const uint8_t *data, size_t size) |
static int | cbs_read_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, AVBufferRef *buf, const uint8_t *data, size_t size, int header) |
int | ff_cbs_read_extradata (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVCodecParameters *par) |
Read the extradata bitstream found in codec parameters into a fragment, then split into units and decompose. More... | |
int | ff_cbs_read_extradata_from_codec (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVCodecContext *avctx) |
int | ff_cbs_read_packet (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVPacket *pkt) |
Read the data bitstream from a packet into a fragment, then split into units and decompose. More... | |
int | ff_cbs_read_packet_side_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVPacket *pkt) |
int | ff_cbs_read (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const uint8_t *data, size_t size) |
Read a bitstream from a memory region into a fragment, then split into units and decompose. More... | |
static int | cbs_alloc_unit_data (CodedBitstreamUnit *unit, size_t size) |
Allocate a new internal data buffer of the given size in the unit. More... | |
static int | cbs_write_unit_data (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
int | ff_cbs_write_fragment_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag) |
Write the content of the fragment to its own internal buffer. More... | |
int | ff_cbs_write_extradata (CodedBitstreamContext *ctx, AVCodecParameters *par, CodedBitstreamFragment *frag) |
Write the bitstream of a fragment to the extradata in codec parameters. More... | |
int | ff_cbs_write_packet (CodedBitstreamContext *ctx, AVPacket *pkt, CodedBitstreamFragment *frag) |
Write the bitstream of a fragment to a packet. More... | |
void | ff_cbs_trace_header (CodedBitstreamContext *ctx, const char *name) |
void | ff_cbs_trace_read_log (void *trace_context, GetBitContext *gbc, int length, const char *str, const int *subscripts, int64_t value) |
Helper function for read tracing which formats the syntax element and logs the result. More... | |
void | ff_cbs_trace_write_log (void *trace_context, PutBitContext *pbc, int length, const char *str, const int *subscripts, int64_t value) |
Helper function for write tracing which formats the syntax element and logs the result. More... | |
static av_always_inline int | cbs_read_unsigned (CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, const int *subscripts, uint32_t *write_to, uint32_t range_min, uint32_t range_max) |
int | ff_cbs_read_unsigned (CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, const int *subscripts, uint32_t *write_to, uint32_t range_min, uint32_t range_max) |
int | ff_cbs_read_simple_unsigned (CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, uint32_t *write_to) |
int | ff_cbs_write_unsigned (CodedBitstreamContext *ctx, PutBitContext *pbc, int width, const char *name, const int *subscripts, uint32_t value, uint32_t range_min, uint32_t range_max) |
int | ff_cbs_write_simple_unsigned (CodedBitstreamContext *ctx, PutBitContext *pbc, int width, const char *name, uint32_t value) |
int | ff_cbs_read_signed (CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, const int *subscripts, int32_t *write_to, int32_t range_min, int32_t range_max) |
int | ff_cbs_write_signed (CodedBitstreamContext *ctx, PutBitContext *pbc, int width, const char *name, const int *subscripts, int32_t value, int32_t range_min, int32_t range_max) |
static int | cbs_insert_unit (CodedBitstreamFragment *frag, int position) |
int | ff_cbs_insert_unit_content (CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, void *content_ref) |
Insert a new unit into a fragment with the given content. More... | |
static int | cbs_insert_unit_data (CodedBitstreamFragment *frag, CodedBitstreamUnitType type, uint8_t *data, size_t data_size, AVBufferRef *data_buf, int position) |
int | ff_cbs_append_unit_data (CodedBitstreamFragment *frag, CodedBitstreamUnitType type, uint8_t *data, size_t data_size, AVBufferRef *data_buf) |
Add a new unit to a fragment with the given data bitstream. More... | |
void | ff_cbs_delete_unit (CodedBitstreamFragment *frag, int position) |
Delete a unit from a fragment and free all memory it uses. More... | |
static void | cbs_default_free_unit_content (FFRefStructOpaque opaque, void *content) |
static const CodedBitstreamUnitTypeDescriptor * | cbs_find_unit_type_desc (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
static void * | cbs_alloc_content (const CodedBitstreamUnitTypeDescriptor *desc) |
int | ff_cbs_alloc_unit_content (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
Allocate a new internal content buffer matching the type of the unit. More... | |
static int | cbs_clone_noncomplex_unit_content (void **clonep, const CodedBitstreamUnit *unit, const CodedBitstreamUnitTypeDescriptor *desc) |
static int | cbs_clone_unit_content (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
int | ff_cbs_make_unit_refcounted (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
Make the content of a unit refcounted. More... | |
int | ff_cbs_make_unit_writable (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
Make the content of a unit writable so that internal fields can be modified. More... | |
void | ff_cbs_discard_units (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, enum AVDiscard skip, int flags) |
Discard units accroding to 'skip'. More... | |
Variables | |
static const CodedBitstreamType *const | cbs_type_table [] |
enum AVCodecID | ff_cbs_all_codec_ids [] |
Table of all supported codec IDs. More... | |
av_cold int ff_cbs_init | ( | CodedBitstreamContext ** | ctx_ptr, |
enum AVCodecID | codec_id, | ||
void * | log_ctx | ||
) |
Create and initialise a new context for the given codec.
Definition at line 83 of file cbs.c.
Referenced by av1_decode_init(), av1_frame_merge_init(), av1_frame_split_init(), av1_parser_init(), dts2pts_init(), ff_cbs_bsf_generic_init(), filter_units_init(), trace_headers_init(), vaapi_encode_av1_configure(), vaapi_encode_h264_configure(), vaapi_encode_h265_configure(), vaapi_encode_mjpeg_configure(), vaapi_encode_mpeg2_configure(), and vvc_parser_init().
av_cold void ff_cbs_flush | ( | CodedBitstreamContext * | ctx | ) |
Reset all internal state in a context.
Definition at line 129 of file cbs.c.
Referenced by av1_decode_flush(), and dts2pts_flush().
av_cold void ff_cbs_close | ( | CodedBitstreamContext ** | ctx_ptr | ) |
Close a context and free all internal state.
Definition at line 135 of file cbs.c.
Referenced by av1_decode_free(), av1_frame_merge_close(), av1_frame_split_close(), av1_parser_close(), dts2pts_close(), ff_cbs_bsf_generic_close(), filter_units_close(), trace_headers_close(), vaapi_encode_av1_close(), vaapi_encode_h264_close(), vaapi_encode_h265_close(), vaapi_encode_mjpeg_close(), vaapi_encode_mpeg2_close(), and vvc_parser_close().
|
static |
Definition at line 154 of file cbs.c.
Referenced by ff_cbs_delete_unit(), and ff_cbs_fragment_reset().
void ff_cbs_fragment_reset | ( | CodedBitstreamFragment * | frag | ) |
Free the units contained in a fragment as well as the fragment's own data buffer, but not the units array itself.
Definition at line 165 of file cbs.c.
Referenced by av1_decode_flush(), av1_decode_init(), av1_frame_merge_filter(), av1_frame_merge_flush(), av1_frame_split_filter(), av1_frame_split_flush(), av1_frame_split_init(), av1_parser_parse(), av1_receive_frame(), av1_receive_frame_internal(), cbs_bsf_update_side_data(), dts2pts_flush(), dts2pts_init(), ff_cbs_bsf_generic_filter(), ff_cbs_bsf_generic_init(), ff_cbs_fragment_free(), filter_units_filter(), filter_units_init(), h264_filter(), parse_nal_units(), trace_headers(), trace_headers_init(), vaapi_encode_av1_init_picture_params(), vaapi_encode_av1_init_sequence_params(), vaapi_encode_av1_write_picture_header(), vaapi_encode_h264_write_extra_header(), vaapi_encode_h264_write_sequence_header(), vaapi_encode_h264_write_slice_header(), vaapi_encode_h265_write_extra_header(), vaapi_encode_h265_write_sequence_header(), vaapi_encode_h265_write_slice_header(), vaapi_encode_mjpeg_write_image_header(), vaapi_encode_mpeg2_write_picture_header(), vaapi_encode_mpeg2_write_sequence_header(), and vvc_parser_parse().
av_cold void ff_cbs_fragment_free | ( | CodedBitstreamFragment * | frag | ) |
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
Definition at line 179 of file cbs.c.
Referenced by av1_decode_free(), av1_frame_merge_close(), av1_frame_split_close(), av1_parser_close(), dts2pts_close(), ff_cbs_bsf_generic_close(), ff_cbs_discard_units(), filter_units_close(), trace_headers_close(), vaapi_encode_av1_close(), vaapi_encode_h264_close(), vaapi_encode_h265_close(), vaapi_encode_mjpeg_close(), vaapi_encode_mpeg2_close(), and vvc_parser_close().
|
static |
Definition at line 187 of file cbs.c.
Referenced by cbs_read_data().
|
static |
Definition at line 230 of file cbs.c.
Referenced by cbs_read_data().
|
static |
Definition at line 250 of file cbs.c.
Referenced by ff_cbs_read(), ff_cbs_read_extradata(), ff_cbs_read_extradata_from_codec(), ff_cbs_read_packet(), and ff_cbs_read_packet_side_data().
int ff_cbs_read_extradata | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVCodecParameters * | par | ||
) |
Read the extradata bitstream found in codec parameters into a fragment, then split into units and decompose.
This also updates the internal state, so will need to be called for codecs with extradata to read parameter sets necessary for further parsing even if the fragment itself is not desired.
The fragment must have been zeroed or reset via ff_cbs_fragment_reset before use.
Definition at line 279 of file cbs.c.
Referenced by av1_frame_split_init(), dts2pts_init(), ff_cbs_bsf_generic_init(), filter_units_init(), and trace_headers_init().
int ff_cbs_read_extradata_from_codec | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVCodecContext * | avctx | ||
) |
Definition at line 288 of file cbs.c.
Referenced by av1_decode_init(), av1_parser_parse(), and vvc_parser_parse().
int ff_cbs_read_packet | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVPacket * | pkt | ||
) |
Read the data bitstream from a packet into a fragment, then split into units and decompose.
This also updates the internal state of the coded bitstream context with any persistent data from the fragment which may be required to read following fragments (e.g. parameter sets).
The fragment must have been zeroed or reset via ff_cbs_fragment_reset before use.
Definition at line 297 of file cbs.c.
Referenced by av1_frame_merge_filter(), av1_frame_split_filter(), av1_receive_frame(), ff_cbs_bsf_generic_filter(), filter_units_filter(), h264_filter(), and trace_headers().
int ff_cbs_read_packet_side_data | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVPacket * | pkt | ||
) |
Definition at line 305 of file cbs.c.
Referenced by cbs_bsf_update_side_data(), and trace_headers().
int ff_cbs_read | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const uint8_t * | data, | ||
size_t | size | ||
) |
Read a bitstream from a memory region into a fragment, then split into units and decompose.
This also updates the internal state of the coded bitstream context with any persistent data from the fragment which may be required to read following fragments (e.g. parameter sets).
The fragment must have been zeroed or reset via ff_cbs_fragment_reset before use.
Definition at line 318 of file cbs.c.
Referenced by av1_parser_parse(), and parse_nal_units().
|
static |
Allocate a new internal data buffer of the given size in the unit.
The data buffer will have input padding.
Definition at line 331 of file cbs.c.
Referenced by cbs_write_unit_data().
|
static |
Definition at line 348 of file cbs.c.
Referenced by ff_cbs_write_fragment_data().
int ff_cbs_write_fragment_data | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag | ||
) |
Write the content of the fragment to its own internal buffer.
Writes the content of all units and then assembles them into a new data buffer. When modifying the content of decomposed units, this can be used to regenerate the bitstream form of units or the whole fragment so that it can be extracted for other use.
This also updates the internal state of the coded bitstream context with any persistent data from the fragment which may be required to write following fragments (e.g. parameter sets).
Definition at line 402 of file cbs.c.
Referenced by cbs_bsf_update_side_data(), ff_cbs_write_extradata(), ff_cbs_write_packet(), vaapi_encode_av1_write_obu(), vaapi_encode_h264_write_access_unit(), vaapi_encode_h265_write_access_unit(), vaapi_encode_mjpeg_write_image_header(), and vaapi_encode_mpeg2_write_fragment().
int ff_cbs_write_extradata | ( | CodedBitstreamContext * | ctx, |
AVCodecParameters * | par, | ||
CodedBitstreamFragment * | frag | ||
) |
Write the bitstream of a fragment to the extradata in codec parameters.
Modifies context and fragment as ff_cbs_write_fragment_data does and replaces any existing extradata in the structure.
Definition at line 438 of file cbs.c.
Referenced by ff_cbs_bsf_generic_init(), and filter_units_init().
int ff_cbs_write_packet | ( | CodedBitstreamContext * | ctx, |
AVPacket * | pkt, | ||
CodedBitstreamFragment * | frag | ||
) |
Write the bitstream of a fragment to a packet.
Modifies context and fragment as ff_cbs_write_fragment_data does.
On success, the packet's buf is unreferenced and its buf, data and size fields are set to the corresponding values from the newly updated fragment; other fields are not touched. On failure, the packet is not touched at all.
Definition at line 467 of file cbs.c.
Referenced by av1_frame_merge_filter(), ff_cbs_bsf_generic_filter(), and filter_units_filter().
void ff_cbs_trace_header | ( | CodedBitstreamContext * | ctx, |
const char * | name | ||
) |
void ff_cbs_trace_read_log | ( | void * | trace_context, |
struct GetBitContext * | gbc, | ||
int | length, | ||
const char * | str, | ||
const int * | subscripts, | ||
int64_t | value | ||
) |
Helper function for read tracing which formats the syntax element and logs the result.
Trace context should be set to the CodedBitstreamContext.
Definition at line 501 of file cbs.c.
Referenced by ff_cbs_trace_write_log(), and trace_headers_init().
void ff_cbs_trace_write_log | ( | void * | trace_context, |
struct PutBitContext * | pbc, | ||
int | length, | ||
const char * | str, | ||
const int * | subscripts, | ||
int64_t | value | ||
) |
Helper function for write tracing which formats the syntax element and logs the result.
Trace context should be set to the CodedBitstreamContext.
Definition at line 559 of file cbs.c.
Referenced by ff_cbs_bsf_generic_init().
|
static |
Definition at line 589 of file cbs.c.
Referenced by ff_cbs_read_simple_unsigned(), and ff_cbs_read_unsigned().
int ff_cbs_read_unsigned | ( | CodedBitstreamContext * | ctx, |
GetBitContext * | gbc, | ||
int | width, | ||
const char * | name, | ||
const int * | subscripts, | ||
uint32_t * | write_to, | ||
uint32_t | range_min, | ||
uint32_t | range_max | ||
) |
int ff_cbs_read_simple_unsigned | ( | CodedBitstreamContext * | ctx, |
GetBitContext * | gbc, | ||
int | width, | ||
const char * | name, | ||
uint32_t * | write_to | ||
) |
Definition at line 633 of file cbs.c.
Referenced by cbs_av1_read_subexp().
int ff_cbs_write_unsigned | ( | CodedBitstreamContext * | ctx, |
PutBitContext * | pbc, | ||
int | width, | ||
const char * | name, | ||
const int * | subscripts, | ||
uint32_t | value, | ||
uint32_t | range_min, | ||
uint32_t | range_max | ||
) |
Definition at line 640 of file cbs.c.
Referenced by ff_cbs_write_simple_unsigned().
int ff_cbs_write_simple_unsigned | ( | CodedBitstreamContext * | ctx, |
PutBitContext * | pbc, | ||
int | width, | ||
const char * | name, | ||
uint32_t | value | ||
) |
Definition at line 669 of file cbs.c.
Referenced by cbs_av1_write_subexp().
int ff_cbs_read_signed | ( | CodedBitstreamContext * | ctx, |
GetBitContext * | gbc, | ||
int | width, | ||
const char * | name, | ||
const int * | subscripts, | ||
int32_t * | write_to, | ||
int32_t | range_min, | ||
int32_t | range_max | ||
) |
int ff_cbs_write_signed | ( | CodedBitstreamContext * | ctx, |
PutBitContext * | pbc, | ||
int | width, | ||
const char * | name, | ||
const int * | subscripts, | ||
int32_t | value, | ||
int32_t | range_min, | ||
int32_t | range_max | ||
) |
|
static |
Definition at line 738 of file cbs.c.
Referenced by cbs_insert_unit_data(), and ff_cbs_insert_unit_content().
int ff_cbs_insert_unit_content | ( | CodedBitstreamFragment * | frag, |
int | position, | ||
CodedBitstreamUnitType | type, | ||
void * | content, | ||
void * | content_ref | ||
) |
Insert a new unit into a fragment with the given content.
If content_ref is supplied, it has to be a RefStruct reference backing content; the user keeps ownership of the supplied reference. The content structure continues to be owned by the caller if content_ref is not supplied.
Definition at line 776 of file cbs.c.
Referenced by av1_frame_merge_filter(), av1_metadata_update_fragment(), cbs_sei_get_unit(), h264_metadata_insert_aud(), h265_metadata_update_fragment(), h266_metadata_update_fragment(), mpeg2_metadata_update_fragment(), vaapi_encode_av1_add_obu(), vaapi_encode_h264_add_nal(), vaapi_encode_h265_add_nal(), vaapi_encode_mjpeg_write_image_header(), and vaapi_encode_mpeg2_add_header().
|
static |
Definition at line 806 of file cbs.c.
Referenced by ff_cbs_append_unit_data().
int ff_cbs_append_unit_data | ( | CodedBitstreamFragment * | frag, |
CodedBitstreamUnitType | type, | ||
uint8_t * | data, | ||
size_t | data_size, | ||
AVBufferRef * | data_buf | ||
) |
Add a new unit to a fragment with the given data bitstream.
If data_buf is not supplied then data must have been allocated with av_malloc() and will on success become owned by the unit after this call or freed on error.
Definition at line 843 of file cbs.c.
Referenced by cbs_av1_split_fragment(), cbs_h2645_fragment_add_nals(), cbs_jpeg_split_fragment(), cbs_mpeg2_split_fragment(), and cbs_vp9_split_fragment().
void ff_cbs_delete_unit | ( | CodedBitstreamFragment * | frag, |
int | position | ||
) |
Delete a unit from a fragment and free all memory it uses.
Requires position to be >= 0 and < frag->nb_units.
Definition at line 853 of file cbs.c.
Referenced by av1_metadata_update_fragment(), ff_cbs_discard_units(), filter_units_filter(), h264_metadata_update_fragment(), h265_metadata_update_fragment(), and h266_metadata_update_fragment().
|
static |
Definition at line 869 of file cbs.c.
Referenced by cbs_alloc_content().
|
static |
Definition at line 880 of file cbs.c.
Referenced by cbs_clone_unit_content(), and ff_cbs_alloc_unit_content().
|
static |
Definition at line 907 of file cbs.c.
Referenced by cbs_clone_noncomplex_unit_content(), and ff_cbs_alloc_unit_content().
int ff_cbs_alloc_unit_content | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamUnit * | unit | ||
) |
Allocate a new internal content buffer matching the type of the unit.
The content will be zeroed.
Definition at line 916 of file cbs.c.
Referenced by cbs_av1_read_unit(), cbs_h264_read_nal_unit(), cbs_h265_read_nal_unit(), cbs_h266_read_nal_unit(), cbs_jpeg_read_unit(), cbs_mpeg2_read_unit(), cbs_sei_get_unit(), and cbs_vp9_read_unit().
|
static |
Definition at line 935 of file cbs.c.
Referenced by cbs_clone_unit_content().
|
static |
Definition at line 994 of file cbs.c.
Referenced by ff_cbs_make_unit_refcounted(), and ff_cbs_make_unit_writable().
int ff_cbs_make_unit_refcounted | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamUnit * | unit | ||
) |
Make the content of a unit refcounted.
If the unit is not refcounted, this will do a deep copy of the unit content to new refcounted buffers.
It is not valid to call this function on a unit which does not have decomposed content.
Definition at line 1028 of file cbs.c.
Referenced by cbs_av1_write_obu(), and cbs_h2645_replace_ps().
int ff_cbs_make_unit_writable | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamUnit * | unit | ||
) |
Make the content of a unit writable so that internal fields can be modified.
If it is known that there are no other references to the content of the unit, does nothing and returns success. Otherwise (including the case where the unit content is not refcounted), it does a full clone of the content (including any internal buffers) to make a new copy, and replaces the existing references inside the unit with that.
It is not valid to call this function on a unit which does not have decomposed content.
Definition at line 1037 of file cbs.c.
Referenced by h264_redundant_pps_fixup_pps().
void ff_cbs_discard_units | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
enum AVDiscard | skip, | ||
int | flags | ||
) |
Discard units accroding to 'skip'.
Definition at line 1054 of file cbs.c.
Referenced by filter_units_filter().
|
static |