FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions | Variables
cbs.c File Reference
#include <string.h>
#include "config.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
#include "libavutil/common.h"
#include "cbs.h"
#include "cbs_internal.h"

Go to the source code of this file.

Functions

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...
 
void ff_cbs_close (CodedBitstreamContext **ctx_ptr)
 Close a context and free all internal state. More...
 
static void cbs_unit_uninit (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 
void ff_cbs_fragment_uninit (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
 Free all allocated memory in a fragment. More...
 
static int cbs_read_fragment_content (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
 
static int cbs_fill_fragment_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, const uint8_t *data, size_t size)
 
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_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 (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...
 
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_syntax_element (CodedBitstreamContext *ctx, int position, const char *str, const int *subscripts, const char *bits, int64_t value)
 
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_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_alloc_unit_content (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, size_t size, void(*free)(void *opaque, uint8_t *data))
 
int ff_cbs_alloc_unit_data (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, size_t size)
 Allocate a new internal data buffer of the given size in the unit. More...
 
static int cbs_insert_unit (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int position)
 
int ff_cbs_insert_unit_content (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, void *content, AVBufferRef *content_buf)
 Insert a new unit into a fragment with the given content. More...
 
int ff_cbs_insert_unit_data (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int position, CodedBitstreamUnitType type, uint8_t *data, size_t data_size, AVBufferRef *data_buf)
 Insert a new unit into a fragment with the given data bitstream. More...
 
int ff_cbs_delete_unit (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int position)
 Delete a unit from a fragment and free all memory it uses. More...
 

Variables

static const CodedBitstreamTypecbs_type_table []
 
enum AVCodecID ff_cbs_all_codec_ids []
 Table of all supported codec IDs. More...
 

Function Documentation

int ff_cbs_init ( CodedBitstreamContext **  ctx_ptr,
enum AVCodecID  codec_id,
void log_ctx 
)
void ff_cbs_close ( CodedBitstreamContext **  ctx_ptr)
static void cbs_unit_uninit ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit 
)
static

Definition at line 115 of file cbs.c.

Referenced by ff_cbs_delete_unit(), and ff_cbs_fragment_uninit().

void ff_cbs_fragment_uninit ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag 
)
static int cbs_read_fragment_content ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag 
)
static

Definition at line 143 of file cbs.c.

Referenced by ff_cbs_read(), ff_cbs_read_extradata(), and ff_cbs_read_packet().

static int cbs_fill_fragment_data ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
const uint8_t data,
size_t  size 
)
static

Definition at line 180 of file cbs.c.

Referenced by ff_cbs_read(), ff_cbs_read_extradata(), and ff_cbs_read_packet().

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.

Definition at line 201 of file cbs.c.

Referenced by filter_units_init(), h264_metadata_init(), h264_redundant_pps_init(), h265_metadata_init(), mpeg2_metadata_init(), and trace_headers_init().

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

Definition at line 221 of file cbs.c.

Referenced by filter_units_filter(), h264_metadata_filter(), h264_redundant_pps_filter(), h265_metadata_filter(), mpeg2_metadata_filter(), trace_headers(), and vp9_metadata_filter().

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

Definition at line 250 of file cbs.c.

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

Referenced by ff_cbs_write_extradata(), ff_cbs_write_packet(), vaapi_encode_h264_write_access_unit(), vaapi_encode_h265_write_access_unit(), 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.

This replaces any existing extradata in the structure.

Definition at line 306 of file cbs.c.

Referenced by filter_units_init(), h264_metadata_init(), h264_redundant_pps_init(), h265_metadata_init(), and mpeg2_metadata_init().

int ff_cbs_write_packet ( CodedBitstreamContext ctx,
AVPacket pkt,
CodedBitstreamFragment frag 
)

Write the bitstream of a fragment to a packet.

Definition at line 331 of file cbs.c.

Referenced by filter_units_filter(), h264_metadata_filter(), h264_redundant_pps_filter(), h265_metadata_filter(), mpeg2_metadata_filter(), and vp9_metadata_filter().

void ff_cbs_trace_header ( CodedBitstreamContext ctx,
const char *  name 
)

Definition at line 355 of file cbs.c.

void ff_cbs_trace_syntax_element ( CodedBitstreamContext ctx,
int  position,
const char *  str,
const int subscripts,
const char *  bits,
int64_t  value 
)
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 
)

Definition at line 414 of file cbs.c.

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

int ff_cbs_alloc_unit_content ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit,
size_t  size,
void(*)(void *opaque, uint8_t *data free 
)
int ff_cbs_alloc_unit_data ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit,
size_t  size 
)

Allocate a new internal data buffer of the given size in the unit.

The data buffer will have input padding.

Definition at line 515 of file cbs.c.

Referenced by cbs_h2645_write_nal_unit(), cbs_mpeg2_write_unit(), and cbs_vp9_write_unit().

static int cbs_insert_unit ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
int  position 
)
static

Definition at line 533 of file cbs.c.

Referenced by ff_cbs_insert_unit_content(), and ff_cbs_insert_unit_data().

int ff_cbs_insert_unit_content ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
int  position,
CodedBitstreamUnitType  type,
void content,
AVBufferRef content_buf 
)

Insert a new unit into a fragment with the given content.

The content structure continues to be owned by the caller if content_buf is not supplied.

Definition at line 558 of file cbs.c.

Referenced by ff_cbs_h264_add_sei_message(), h264_metadata_filter(), h265_metadata_filter(), mpeg2_metadata_update_fragment(), vaapi_encode_h264_add_nal(), vaapi_encode_h265_add_nal(), and vaapi_encode_mpeg2_add_header().

int ff_cbs_insert_unit_data ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
int  position,
CodedBitstreamUnitType  type,
uint8_t data,
size_t  data_size,
AVBufferRef data_buf 
)

Insert a new unit into a fragment with the given data bitstream.

If data_buf is not supplied then data must have been allocated with av_malloc() and will become owned by the unit after this call.

Definition at line 595 of file cbs.c.

Referenced by cbs_h2645_fragment_add_nals(), cbs_mpeg2_split_fragment(), and cbs_vp9_split_fragment().

int ff_cbs_delete_unit ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
int  position 
)

Delete a unit from a fragment and free all memory it uses.

Definition at line 632 of file cbs.c.

Referenced by ff_cbs_h264_delete_sei_message(), filter_units_filter(), h264_metadata_filter(), h264_redundant_pps_filter(), and h265_metadata_filter().

Variable Documentation

const CodedBitstreamType* cbs_type_table[]
static
Initial value:
= {
}

Definition at line 31 of file cbs.c.

enum AVCodecID ff_cbs_all_codec_ids[]
Initial value:

Table of all supported codec IDs.

Terminated by AV_CODEC_ID_NONE.

Definition at line 46 of file cbs.c.