FFmpeg
Loading...
Searching...
No Matches
cbs.h File Reference
#include <stddef.h>
#include <stdint.h>
#include "libavutil/buffer.h"
#include "codec_id.h"
#include "codec_par.h"
#include "defs.h"
#include "packet.h"

Go to the source code of this file.

Data Structures

struct  CodedBitstreamUnit
 Coded bitstream unit structure. More...
 
struct  CodedBitstreamFragment
 Coded bitstream fragment structure, combining one or more units. More...
 
struct  CodedBitstreamContext
 Context structure for coded bitstream operations. More...
 

Macros

#define CBS_PREFIX   cbs
 
#define CBS_FUNC_PREFIX_NAME(prefix, name)
 
#define CBS_FUNC_NAME(prefix, name)
 
#define CBS_FUNC(name)
 

Typedefs

typedef uint32_t CodedBitstreamUnitType
 The codec-specific type of a bitstream unit.
 
typedef void(* CBSTraceReadCallback) (void *trace_context, struct GetBitContext *gbc, int start_position, const char *name, const int *subscripts, int64_t value)
 Callback type for read tracing.
 
typedef void(* CBSTraceWriteCallback) (void *trace_context, struct PutBitContext *pbc, int start_position, const char *name, const int *subscripts, int64_t value)
 Callback type for write tracing.
 

Enumerations

enum  CbsDiscardFlags { DISCARD_FLAG_NONE = 0 , DISCARD_FLAG_KEEP_NON_VCL = 0x01 }
 

Functions

int CBS_FUNC init (CodedBitstreamContext **ctx, enum AVCodecID codec_id, void *log_ctx)
 Create and initialise a new context for the given codec.
 
void CBS_FUNC flush (CodedBitstreamContext *ctx)
 Reset all internal state in a context.
 
void CBS_FUNC close (CodedBitstreamContext **ctx)
 Close a context and free all internal state.
 
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.
 
int CBS_FUNC read_extradata_from_codec (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const struct AVCodecContext *avctx)
 Read the extradata bitstream found in a codec context into a fragment, then split into units and decompose.
 
int CBS_FUNC read_packet_side_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVPacket *pkt)
 
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.
 
int CBS_FUNC read (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const AVBufferRef *buf, const uint8_t *data, size_t size)
 Read a bitstream from a memory region into a fragment, then split into units and decompose.
 
int CBS_FUNC write_fragment_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
 Write the content of the fragment to its own internal buffer.
 
int CBS_FUNC write_extradata (CodedBitstreamContext *ctx, AVCodecParameters *par, CodedBitstreamFragment *frag)
 Write the bitstream of a fragment to the extradata in codec parameters.
 
int CBS_FUNC write_packet (CodedBitstreamContext *ctx, AVPacket *pkt, CodedBitstreamFragment *frag)
 Write the bitstream of a fragment to a packet.
 
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.
 
void CBS_FUNC fragment_free (CodedBitstreamFragment *frag)
 Free the units array of a fragment in addition to what ff_cbs_fragment_reset does.
 
int CBS_FUNC alloc_unit_content (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 Allocate a new internal content buffer matching the type of the unit.
 
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.
 
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.
 
void CBS_FUNC delete_unit (CodedBitstreamFragment *frag, int position)
 Delete a unit from a fragment and free all memory it uses.
 
int CBS_FUNC make_unit_refcounted (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 Make the content of a unit refcounted.
 
int CBS_FUNC make_unit_writable (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 Make the content of a unit writable so that internal fields can be modified.
 
void CBS_FUNC discard_units (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, enum AVDiscard skip, int flags)
 Discard units according to 'skip'.
 
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.
 
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.
 

Macro Definition Documentation

◆ CBS_PREFIX

#define CBS_PREFIX   cbs

Definition at line 33 of file cbs.h.

◆ CBS_FUNC_PREFIX_NAME

#define CBS_FUNC_PREFIX_NAME ( prefix,
name )
Value:
ff_ ## prefix ## _ ## name
#define _
const char * name
Definition qsvenc.c:142
char prefix[8]

Definition at line 36 of file cbs.h.

◆ CBS_FUNC_NAME

#define CBS_FUNC_NAME ( prefix,
name )
Value:
#define CBS_FUNC_PREFIX_NAME(prefix, name)
Definition cbs.h:36

Definition at line 37 of file cbs.h.

◆ CBS_FUNC

#define CBS_FUNC ( name)
Value:
#define CBS_PREFIX
Definition cbs.h:33
#define CBS_FUNC_NAME(prefix, name)
Definition cbs.h:37

Definition at line 38 of file cbs.h.

Referenced by cbs_apv_read_unit(), cbs_apv_split_fragment(), cbs_av1_read_unit(), cbs_av1_split_fragment(), cbs_av1_write_obu(), discard_units(), fragment_free(), and trace_write_log().

Typedef Documentation

◆ CodedBitstreamUnitType

typedef uint32_t CodedBitstreamUnitType

The codec-specific type of a bitstream unit.

AV1: obu_type H.264 / AVC: nal_unit_type H.265 / HEVC: nal_unit_type JPEG: marker value (without 0xff prefix) MPEG-2: start code value (without prefix) VP9: unused, set to zero (every unit is a frame)

Definition at line 66 of file cbs.h.

◆ CBSTraceReadCallback

typedef void(* CBSTraceReadCallback) (void *trace_context, struct GetBitContext *gbc, int start_position, const char *name, const int *subscripts, int64_t value)

Callback type for read tracing.

Parameters
ctxUser-set trace context.
gbcA GetBitContext set at the start of the syntax element. This is a copy, the callee does not need to preserve it.
lengthLength in bits of the syntax element.
nameString name of the syntax elements.
subscriptsIf the syntax element is an array, a pointer to an array of subscripts into the array.
valueParsed value of the syntax element.

Definition at line 196 of file cbs.h.

◆ CBSTraceWriteCallback

typedef void(* CBSTraceWriteCallback) (void *trace_context, struct PutBitContext *pbc, int start_position, const char *name, const int *subscripts, int64_t value)

Callback type for write tracing.

Parameters
ctxUser-set trace context.
pbcA PutBitContext set at the end of the syntax element. The user must not modify this, but may inspect it to determine state.
lengthLength in bits of the syntax element.
nameString name of the syntax elements.
subscriptsIf the syntax element is an array, a pointer to an array of subscripts into the array.
valueWritten value of the syntax element.

Definition at line 216 of file cbs.h.

Enumeration Type Documentation

◆ CbsDiscardFlags

Enumerator
DISCARD_FLAG_NONE 
DISCARD_FLAG_KEEP_NON_VCL 

keep non-vcl units even if the picture has been dropped.

Definition at line 501 of file cbs.h.

Function Documentation

◆ init()

int CBS_FUNC init ( CodedBitstreamContext ** ctx,
enum AVCodecID codec_id,
void * log_ctx )

Create and initialise a new context for the given codec.

Definition at line 66 of file cbs.c.

◆ flush()

void CBS_FUNC flush ( CodedBitstreamContext * ctx)

Reset all internal state in a context.

Definition at line 112 of file cbs.c.

◆ close()

void CBS_FUNC close ( CodedBitstreamContext ** ctx)

Close a context and free all internal state.

Definition at line 118 of file cbs.c.

◆ read_extradata()

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.

Referenced by read_extradata().

◆ read_extradata_from_codec()

int CBS_FUNC read_extradata_from_codec ( CodedBitstreamContext * ctx,
CodedBitstreamFragment * frag,
const struct AVCodecContext * avctx )

Read the extradata bitstream found in a codec context into a fragment, then split into units and decompose.

This acts identical to ff_cbs_read_extradata() for the case where you already have a codec context.

Referenced by read_extradata_from_codec().

◆ read_packet_side_data()

int CBS_FUNC read_packet_side_data ( CodedBitstreamContext * ctx,
CodedBitstreamFragment * frag,
const AVPacket * pkt )

Referenced by read_packet_side_data().

◆ read_packet()

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.

◆ read()

int CBS_FUNC read ( CodedBitstreamContext * ctx,
CodedBitstreamFragment * frag,
const AVBufferRef * buf,
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.

◆ 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).

Referenced by write_fragment_data().

◆ write_extradata()

int CBS_FUNC 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.

Referenced by write_extradata().

◆ write_packet()

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.

◆ 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 148 of file cbs.c.

Referenced by fragment_free(), fragment_reset(), and write_packet().

◆ fragment_free()

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 162 of file cbs.c.

Referenced by discard_units(), fragment_free(), and write_packet().

◆ alloc_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 911 of file cbs.c.

Referenced by alloc_unit_content(), cbs_apv_read_unit(), cbs_av1_read_unit(), and write_packet().

◆ 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.

Definition at line 771 of file cbs.c.

Referenced by insert_unit_content(), and write_packet().

◆ 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 838 of file cbs.c.

Referenced by append_unit_data(), cbs_apv_split_fragment(), cbs_av1_split_fragment(), and write_packet().

◆ delete_unit()

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 848 of file cbs.c.

Referenced by delete_unit(), discard_units(), and write_packet().

◆ make_unit_refcounted()

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 1023 of file cbs.c.

Referenced by cbs_av1_write_obu(), make_unit_refcounted(), and write_packet().

◆ make_unit_writable()

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.

Definition at line 1032 of file cbs.c.

Referenced by make_unit_writable(), and write_packet().

◆ discard_units()

void CBS_FUNC discard_units ( CodedBitstreamContext * ctx,
CodedBitstreamFragment * frag,
enum AVDiscard skip,
int flags )

Discard units according to 'skip'.

Definition at line 1049 of file cbs.c.

Referenced by discard_units().

◆ trace_read_log()

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 492 of file cbs.c.

Referenced by trace_read_log(), and trace_write_log().

◆ 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.

Definition at line 552 of file cbs.c.

Referenced by trace_write_log().