FFmpeg
|
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "cbs.h"
#include "cbs_internal.h"
#include "libavutil/refstruct.h"
Go to the source code of this file.
Functions | |
enum AVCodecID | CBS_FUNC (all_codec_ids)[] |
av_cold int CBS_FUNC() | 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 CBS_FUNC() | flush (CodedBitstreamContext *ctx) |
Reset all internal state in a context. More... | |
av_cold void CBS_FUNC() | close (CodedBitstreamContext **ctx_ptr) |
Close a context and free all internal state. More... | |
static void | cbs_unit_uninit (CodedBitstreamUnit *unit) |
void CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | read_extradata_from_codec (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVCodecContext *avctx) |
int CBS_FUNC() | 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 CBS_FUNC() | read_packet_side_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVPacket *pkt) |
int CBS_FUNC() | 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 CBS_FUNC() | write_fragment_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag) |
Write the content of the fragment to its own internal buffer. More... | |
int CBS_FUNC() | write_extradata (CodedBitstreamContext *ctx, AVCodecParameters *par, CodedBitstreamFragment *frag) |
Write the bitstream of a fragment to the extradata in codec parameters. More... | |
int CBS_FUNC() | write_packet (CodedBitstreamContext *ctx, AVPacket *pkt, CodedBitstreamFragment *frag) |
Write the bitstream of a fragment to a packet. More... | |
void CBS_FUNC() | trace_header (CodedBitstreamContext *ctx, const char *name) |
void CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | read_simple_unsigned (CodedBitstreamContext *ctx, GetBitContext *gbc, int width, const char *name, uint32_t *write_to) |
int CBS_FUNC() | 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 CBS_FUNC() | write_simple_unsigned (CodedBitstreamContext *ctx, PutBitContext *pbc, int width, const char *name, uint32_t value) |
int CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | 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 CBS_FUNC() | 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 (AVRefStructOpaque opaque, void *content) |
static const CodedBitstreamUnitTypeDescriptor * | cbs_find_unit_type_desc (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
static void * | cbs_alloc_content (const CodedBitstreamUnitTypeDescriptor *desc) |
int CBS_FUNC() | 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 CBS_FUNC() | make_unit_refcounted (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
Make the content of a unit refcounted. More... | |
int CBS_FUNC() | make_unit_writable (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit) |
Make the content of a unit writable so that internal fields can be modified. More... | |
void CBS_FUNC() | 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 CBS_FUNC | ( | all_codec_ids | ) |
Referenced by discard_units(), fragment_free(), trace_write_log(), write_extradata(), write_packet(), and write_simple_unsigned().
av_cold int CBS_FUNC() init | ( | CodedBitstreamContext ** | ctx_ptr, |
enum AVCodecID | codec_id, | ||
void * | log_ctx | ||
) |
av_cold void CBS_FUNC() flush | ( | CodedBitstreamContext * | ctx | ) |
Reset all internal state in a context.
Definition at line 134 of file cbs.c.
Referenced by trace_write_log().
av_cold void CBS_FUNC() close | ( | CodedBitstreamContext ** | ctx_ptr | ) |
Close a context and free all internal state.
Definition at line 140 of file cbs.c.
Referenced by av_file_map(), avformat_open_input(), bench_uninit(), cache_close(), check(), drm_device_create(), drm_device_free(), fbdev_read_close(), fbdev_read_header(), fbdev_write_header(), fbdev_write_trailer(), ff_ass_split_override_codes(), ff_fbdev_get_device_list(), ff_get_cpu_flags_ppc(), ff_oss_audio_close(), ff_oss_audio_open(), file_close(), kmsgrab_free_desc(), main(), mov_text_style_cb(), srt_stack_push_pop(), srt_style_cb(), v4l2_configure_contexts(), v4l2_m2m_destroy_context(), v4l2_probe_driver(), vaapi_device_create(), vaapi_device_derive(), vaapi_device_free(), webvtt_stack_push_pop(), webvtt_style_cb(), write_trailer(), and xvid_encode_close().
|
static |
Definition at line 159 of file cbs.c.
Referenced by delete_unit(), and fragment_reset().
void CBS_FUNC() 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 170 of file cbs.c.
Referenced by fragment_free().
av_cold void CBS_FUNC() fragment_free | ( | CodedBitstreamFragment * | frag | ) |
Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
Definition at line 184 of file cbs.c.
Referenced by discard_units().
|
static |
Definition at line 193 of file cbs.c.
Referenced by cbs_read_data().
|
static |
Definition at line 236 of file cbs.c.
Referenced by cbs_read_data().
|
static |
Definition at line 256 of file cbs.c.
Referenced by read(), read_extradata(), read_extradata_from_codec(), read_packet(), and read_packet_side_data().
int CBS_FUNC() 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.
int CBS_FUNC() read_extradata_from_codec | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVCodecContext * | avctx | ||
) |
int CBS_FUNC() 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.
int CBS_FUNC() read_packet_side_data | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
const AVPacket * | pkt | ||
) |
int CBS_FUNC() 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.
|
static |
Allocate a new internal data buffer of the given size in the unit.
The data buffer will have input padding.
Definition at line 339 of file cbs.c.
Referenced by cbs_write_unit_data().
|
static |
Definition at line 356 of file cbs.c.
Referenced by write_fragment_data().
int CBS_FUNC() 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 410 of file cbs.c.
Referenced by write_extradata(), and write_packet().
int CBS_FUNC() write_extradata | ( | CodedBitstreamContext * | ctx, |
AVCodecParameters * | par, | ||
CodedBitstreamFragment * | frag | ||
) |
int CBS_FUNC() 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.
void CBS_FUNC() trace_header | ( | CodedBitstreamContext * | ctx, |
const char * | name | ||
) |
void CBS_FUNC() 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 512 of file cbs.c.
Referenced by trace_write_log().
void CBS_FUNC() 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.
|
static |
Definition at line 605 of file cbs.c.
Referenced by read_simple_unsigned(), and read_unsigned().
int CBS_FUNC() 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 CBS_FUNC() read_simple_unsigned | ( | CodedBitstreamContext * | ctx, |
GetBitContext * | gbc, | ||
int | width, | ||
const char * | name, | ||
uint32_t * | write_to | ||
) |
Definition at line 649 of file cbs.c.
Referenced by cbs_av1_read_subexp().
int CBS_FUNC() 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 658 of file cbs.c.
Referenced by write_simple_unsigned().
int CBS_FUNC() write_simple_unsigned | ( | CodedBitstreamContext * | ctx, |
PutBitContext * | pbc, | ||
int | width, | ||
const char * | name, | ||
uint32_t | value | ||
) |
Definition at line 687 of file cbs.c.
Referenced by cbs_av1_write_subexp().
int CBS_FUNC() 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 CBS_FUNC() 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 761 of file cbs.c.
Referenced by cbs_insert_unit_data(), and insert_unit_content().
int CBS_FUNC() 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.
|
static |
Definition at line 829 of file cbs.c.
Referenced by append_unit_data().
int CBS_FUNC() 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 866 of file cbs.c.
Referenced by cbs_av1_split_fragment().
void CBS_FUNC() 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 876 of file cbs.c.
Referenced by discard_units().
|
static |
Definition at line 892 of file cbs.c.
Referenced by cbs_alloc_content().
|
static |
Definition at line 903 of file cbs.c.
Referenced by alloc_unit_content(), and cbs_clone_unit_content().
|
static |
Definition at line 930 of file cbs.c.
Referenced by alloc_unit_content(), and cbs_clone_noncomplex_unit_content().
int CBS_FUNC() 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 939 of file cbs.c.
Referenced by cbs_av1_read_unit().
|
static |
Definition at line 958 of file cbs.c.
Referenced by cbs_clone_unit_content().
|
static |
Definition at line 1017 of file cbs.c.
Referenced by make_unit_refcounted(), and make_unit_writable().
int CBS_FUNC() 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 1051 of file cbs.c.
Referenced by cbs_av1_write_obu().
int CBS_FUNC() 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.
void CBS_FUNC() discard_units | ( | CodedBitstreamContext * | ctx, |
CodedBitstreamFragment * | frag, | ||
enum AVDiscard | skip, | ||
int | flags | ||
) |
|
static |