FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
cbs_internal.h File Reference
#include <stdint.h>
#include "libavutil/buffer.h"
#include "libavutil/log.h"
#include "cbs.h"
#include "codec_id.h"
#include "get_bits.h"
#include "put_bits.h"

Go to the source code of this file.

Data Structures

struct  CodedBitstreamUnitTypeDescriptor
 
struct  CodedBitstreamType
 

Macros

#define MAX_UINT_BITS(length)   ((UINT64_C(1) << (length)) - 1)
 
#define MAX_INT_BITS(length)   ((INT64_C(1) << ((length) - 1)) - 1)
 
#define MIN_INT_BITS(length)   (-(INT64_C(1) << ((length) - 1)))
 
#define TYPE_LIST(...)   { __VA_ARGS__ }
 
#define CBS_UNIT_TYPE_POD(type_, structure)
 
#define CBS_UNIT_RANGE_POD(range_start, range_end, structure)
 
#define CBS_UNIT_TYPES_INTERNAL_REF(types, structure, ref_field)
 
#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field)   CBS_UNIT_TYPES_INTERNAL_REF((type), structure, ref_field)
 
#define CBS_UNIT_RANGE_INTERNAL_REF(range_start, range_end, structure, ref_field)
 
#define CBS_UNIT_TYPES_COMPLEX(types, structure, free_func)
 
#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func)   CBS_UNIT_TYPES_COMPLEX((type), structure, free_func)
 
#define CBS_UNIT_TYPE_END_OF_LIST   { .nb_unit_types = 0 }
 

Enumerations

enum  CBSContentType { CBS_CONTENT_TYPE_INTERNAL_REFS, CBS_CONTENT_TYPE_COMPLEX }
 
enum  { CBS_MAX_LIST_UNIT_TYPES = 3, CBS_MAX_REF_OFFSETS = 2, CBS_UNIT_TYPE_RANGE = -1 }
 

Functions

void ff_cbs_trace_header (CodedBitstreamContext *ctx, const char *name)
 
void ff_cbs_trace_syntax_element (CodedBitstreamContext *ctx, int position, const char *name, const int *subscripts, const char *bitstring, 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_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)
 

Variables

const CodedBitstreamType ff_cbs_type_av1
 
const CodedBitstreamType ff_cbs_type_h264
 
const CodedBitstreamType ff_cbs_type_h265
 
const CodedBitstreamType ff_cbs_type_jpeg
 
const CodedBitstreamType ff_cbs_type_mpeg2
 
const CodedBitstreamType ff_cbs_type_vp9
 

Macro Definition Documentation

◆ MAX_UINT_BITS

#define MAX_UINT_BITS (   length)    ((UINT64_C(1) << (length)) - 1)

Definition at line 184 of file cbs_internal.h.

◆ MAX_INT_BITS

#define MAX_INT_BITS (   length)    ((INT64_C(1) << ((length) - 1)) - 1)

Definition at line 188 of file cbs_internal.h.

◆ MIN_INT_BITS

#define MIN_INT_BITS (   length)    (-(INT64_C(1) << ((length) - 1)))

Definition at line 192 of file cbs_internal.h.

◆ TYPE_LIST

#define TYPE_LIST (   ...)    { __VA_ARGS__ }

Definition at line 194 of file cbs_internal.h.

◆ CBS_UNIT_TYPE_POD

#define CBS_UNIT_TYPE_POD (   type_,
  structure 
)
Value:
{ \
.nb_unit_types = 1, \
.unit_type.list = { type_ }, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.type.ref = { .nb_offsets = 0 }, \
}

Definition at line 195 of file cbs_internal.h.

◆ CBS_UNIT_RANGE_POD

#define CBS_UNIT_RANGE_POD (   range_start,
  range_end,
  structure 
)
Value:
{ \
.nb_unit_types = CBS_UNIT_TYPE_RANGE, \
.unit_type.range.start = range_start, \
.unit_type.range.end = range_end, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.type.ref = { .nb_offsets = 0 }, \
}

Definition at line 202 of file cbs_internal.h.

◆ CBS_UNIT_TYPES_INTERNAL_REF

#define CBS_UNIT_TYPES_INTERNAL_REF (   types,
  structure,
  ref_field 
)
Value:
{ \
.nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \
.unit_type.list = TYPE_LIST types, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.type.ref = { .nb_offsets = 1, \
.offsets = { offsetof(structure, ref_field) } }, \
}

Definition at line 211 of file cbs_internal.h.

◆ CBS_UNIT_TYPE_INTERNAL_REF

#define CBS_UNIT_TYPE_INTERNAL_REF (   type,
  structure,
  ref_field 
)    CBS_UNIT_TYPES_INTERNAL_REF((type), structure, ref_field)

Definition at line 219 of file cbs_internal.h.

◆ CBS_UNIT_RANGE_INTERNAL_REF

#define CBS_UNIT_RANGE_INTERNAL_REF (   range_start,
  range_end,
  structure,
  ref_field 
)
Value:
{ \
.nb_unit_types = CBS_UNIT_TYPE_RANGE, \
.unit_type.range.start = range_start, \
.unit_type.range.end = range_end, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.type.ref = { .nb_offsets = 1, \
.offsets = { offsetof(structure, ref_field) } }, \
}

Definition at line 222 of file cbs_internal.h.

◆ CBS_UNIT_TYPES_COMPLEX

#define CBS_UNIT_TYPES_COMPLEX (   types,
  structure,
  free_func 
)
Value:
{ \
.nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \
.unit_type.list = TYPE_LIST types, \
.content_type = CBS_CONTENT_TYPE_COMPLEX, \
.content_size = sizeof(structure), \
.type.complex = { .content_free = free_func }, \
}

Definition at line 232 of file cbs_internal.h.

◆ CBS_UNIT_TYPE_COMPLEX

#define CBS_UNIT_TYPE_COMPLEX (   type,
  structure,
  free_func 
)    CBS_UNIT_TYPES_COMPLEX((type), structure, free_func)

Definition at line 239 of file cbs_internal.h.

◆ CBS_UNIT_TYPE_END_OF_LIST

#define CBS_UNIT_TYPE_END_OF_LIST   { .nb_unit_types = 0 }

Definition at line 242 of file cbs_internal.h.

Enumeration Type Documentation

◆ CBSContentType

Enumerator
CBS_CONTENT_TYPE_INTERNAL_REFS 
CBS_CONTENT_TYPE_COMPLEX 

Definition at line 33 of file cbs_internal.h.

◆ anonymous enum

anonymous enum
Enumerator
CBS_MAX_LIST_UNIT_TYPES 
CBS_MAX_REF_OFFSETS 
CBS_UNIT_TYPE_RANGE 

Definition at line 43 of file cbs_internal.h.

Function Documentation

◆ ff_cbs_trace_header()

void ff_cbs_trace_header ( CodedBitstreamContext ctx,
const char *  name 
)

Definition at line 484 of file cbs.c.

◆ ff_cbs_trace_syntax_element()

void ff_cbs_trace_syntax_element ( CodedBitstreamContext ctx,
int  position,
const char *  name,
const int subscripts,
const char *  bitstring,
int64_t  value 
)

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

Definition at line 543 of file cbs.c.

Referenced by cbs_av1_read_leb128(), and cbs_av1_read_subexp().

◆ ff_cbs_write_unsigned()

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

Referenced by cbs_av1_write_leb128(), and cbs_av1_write_subexp().

◆ ff_cbs_read_signed()

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 
)

Definition at line 622 of file cbs.c.

◆ ff_cbs_write_signed()

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 
)

Definition at line 665 of file cbs.c.

Variable Documentation

◆ ff_cbs_type_av1

const CodedBitstreamType ff_cbs_type_av1

Definition at line 1351 of file cbs_av1.c.

◆ ff_cbs_type_h264

const CodedBitstreamType ff_cbs_type_h264

Definition at line 1434 of file cbs_h2645.c.

◆ ff_cbs_type_h265

const CodedBitstreamType ff_cbs_type_h265

Definition at line 1450 of file cbs_h2645.c.

◆ ff_cbs_type_jpeg

const CodedBitstreamType ff_cbs_type_jpeg

Definition at line 435 of file cbs_jpeg.c.

◆ ff_cbs_type_mpeg2

const CodedBitstreamType ff_cbs_type_mpeg2

Definition at line 416 of file cbs_mpeg2.c.

◆ ff_cbs_type_vp9

const CodedBitstreamType ff_cbs_type_vp9

Definition at line 648 of file cbs_vp9.c.

CBS_CONTENT_TYPE_INTERNAL_REFS
@ CBS_CONTENT_TYPE_INTERNAL_REFS
Definition: cbs_internal.h:37
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
CBS_UNIT_TYPE_RANGE
@ CBS_UNIT_TYPE_RANGE
Definition: cbs_internal.h:52
CBS_CONTENT_TYPE_COMPLEX
@ CBS_CONTENT_TYPE_COMPLEX
Definition: cbs_internal.h:40
TYPE_LIST
#define TYPE_LIST(...)
Definition: cbs_internal.h:194
CodedBitstreamUnitType
uint32_t CodedBitstreamUnitType
The codec-specific type of a bitstream unit.
Definition: cbs.h:46