FFmpeg
Loading...
Searching...
No Matches
cbs_h266.c File Reference
#include "libavutil/intmath.h"
#include "libavutil/mem.h"
#include "libavutil/refstruct.h"
#include "bytestream.h"
#include "cbs.h"
#include "cbs_internal.h"
#include "cbs_h2645.h"
#include "cbs_h266.h"
#include "cbs_sei.h"
#include "get_bits.h"
#include "cbs_h266_syntax_template.c"

Go to the source code of this file.

Macros

#define HEADER(name)
 
#define CHECK(call)
 
#define FUNC_NAME2(rw, codec, name)
 
#define FUNC_NAME1(rw, codec, name)
 
#define FUNC_H266(name)
 
#define FUNC_NAME2_EXPORT(rw, codec, name)
 
#define FUNC_NAME1_EXPORT(rw, codec, name)
 
#define FUNC_SEI(name)
 
#define SEI_FUNC(name, args)
 
#define SUBSCRIPTS(subs, ...)
 
#define u(width, name, range_min, range_max)
 
#define flag(name)
 
#define ue(name, range_min, range_max)
 
#define i(width, name, range_min, range_max)
 
#define ib(width, name)
 
#define se(name, range_min, range_max)
 
#define us(width, name, range_min, range_max, subs, ...)
 
#define ubs(width, name, subs, ...)
 
#define flags(name, subs, ...)
 
#define ues(name, range_min, range_max, subs, ...)
 
#define is(width, name, range_min, range_max, subs, ...)
 
#define ibs(width, name, subs, ...)
 
#define ses(name, range_min, range_max, subs, ...)
 
#define fixed(width, name, value)
 
#define READ
 
#define READWRITE   read
 
#define RWContext   GetBitContext
 
#define ub(width, name)
 
#define xu(width, name, var, range_min, range_max, subs, ...)
 
#define xue(name, var, range_min, range_max, subs, ...)
 
#define xi(width, name, var, range_min, range_max, subs, ...)
 
#define xse(name, var, range_min, range_max, subs, ...)
 
#define infer(name, value)
 
#define more_rbsp_data(var)
 
#define bit_position(rw)
 
#define byte_alignment(rw)
 
#define allocate(name, size)
 
#define FUNC(name)
 
#define WRITE
 
#define READWRITE   write
 
#define RWContext   PutBitContext
 
#define ub(width, name)
 
#define xu(width, name, var, range_min, range_max, subs, ...)
 
#define xue(name, var, range_min, range_max, subs, ...)
 
#define xi(width, name, var, range_min, range_max, subs, ...)
 
#define xse(name, var, range_min, range_max, subs, ...)
 
#define infer(name, value)
 
#define more_rbsp_data(var)
 
#define bit_position(rw)
 
#define byte_alignment(rw)
 
#define allocate(name, size)
 
#define FUNC(name)
 
#define cbs_h266_replace_ps(ps_name, ps_var, id_element)
 

Functions

static int cbs_h266_split_fragment (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header)
 
 cbs_h266_replace_ps (VPS, vps, vps_video_parameter_set_id)
 
static int cbs_h266_replace_ph (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, H266RawPictureHeader *ph)
 
static int cbs_h266_read_nal_unit (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 
static int cbs_h266_write_nal_unit (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
 
static av_cold void cbs_h266_flush (CodedBitstreamContext *ctx)
 
static av_cold void cbs_h266_close (CodedBitstreamContext *ctx)
 
static void cbs_h266_free_slice (AVRefStructOpaque unused, void *content)
 
static void cbs_h266_free_sei (AVRefStructOpaque unused, void *content)
 

Variables

static CodedBitstreamUnitTypeDescriptor cbs_h266_unit_types []
 
const CodedBitstreamType ff_cbs_type_h266
 

Macro Definition Documentation

◆ HEADER

#define HEADER ( name)
Value:
do { \
ff_cbs_trace_header(ctx, name); \
} while (0)
static AVFormatContext * ctx
const char * name
Definition qsvenc.c:142

Definition at line 30 of file cbs_h266.c.

◆ CHECK

#define CHECK ( call)
Value:
do { \
err = (call); \
if (err < 0) \
return err; \
} while (0)

Definition at line 34 of file cbs_h266.c.

◆ FUNC_NAME2

#define FUNC_NAME2 ( rw,
codec,
name )
Value:
cbs_ ## codec ## _ ## rw ## _ ## name
#define _

Definition at line 40 of file cbs_h266.c.

◆ FUNC_NAME1

#define FUNC_NAME1 ( rw,
codec,
name )
Value:
FUNC_NAME2(rw, codec, name)
#define FUNC_NAME2(rw, codec, name)
Definition cbs_h264.c:39

Definition at line 41 of file cbs_h266.c.

◆ FUNC_H266

#define FUNC_H266 ( name)
Value:
#define FUNC_NAME1(rw, codec, name)
Definition cbs_h264.c:40
#define READWRITE
Definition cbs_h264.c:92

Definition at line 42 of file cbs_h266.c.

◆ FUNC_NAME2_EXPORT

#define FUNC_NAME2_EXPORT ( rw,
codec,
name )
Value:
ff_cbs_ ## codec ## _ ## rw ## _ ## name

Definition at line 43 of file cbs_h266.c.

◆ FUNC_NAME1_EXPORT

#define FUNC_NAME1_EXPORT ( rw,
codec,
name )
Value:
#define FUNC_NAME2_EXPORT(rw, codec, name)
Definition cbs_h264.c:42

Definition at line 44 of file cbs_h266.c.

◆ FUNC_SEI

#define FUNC_SEI ( name)
Value:
#define FUNC_NAME1_EXPORT(rw, codec, name)
Definition cbs_h264.c:43
static int FUNC sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)

Definition at line 45 of file cbs_h266.c.

◆ SEI_FUNC

#define SEI_FUNC ( name,
args )
Value:
static int FUNC_H266(name) args; \
static int FUNC_H266(name ## _internal)(CodedBitstreamContext *ctx, \
RWContext *rw, void *cur, \
{ \
return FUNC_H266(name)(ctx, rw, cur, state); \
} \
static int FUNC_H266(name) args
#define RWContext
Definition cbs_h264.c:93
#define FUNC_H266(name)
Definition cbs_h266.c:42
static struct @346255127015250356166251341105367306144006377143 state
Context structure for coded bitstream operations.
Definition cbs.h:226

Definition at line 47 of file cbs_h266.c.

◆ SUBSCRIPTS

#define SUBSCRIPTS ( subs,
... )
Value:
(subs > 0 ? ((int[subs + 1]){ subs, __VA_ARGS__ }) : NULL)
#define NULL
Definition coverity.c:32

Definition at line 57 of file cbs_h266.c.

◆ u

#define u ( width,
name,
range_min,
range_max )
Value:
xu(width, name, current->name, range_min, range_max, 0, )
#define xu(width, name, var, range_min, range_max, subs,...)
Definition cbs_h264.c:101
static struct @111144215057303131116103221376075045141373005341 current
#define width
Definition dsp.h:89

Definition at line 59 of file cbs_h266.c.

◆ flag

#define flag ( name)
Value:
ub(1, name)
#define ub(width, name)
Definition cbs_h264.c:95

Definition at line 61 of file cbs_h266.c.

◆ ue

#define ue ( name,
range_min,
range_max )
Value:
xue(name, current->name, range_min, range_max, 0, )
#define xue(name, var, range_min, range_max, subs,...)
Definition cbs_h264.c:108

Definition at line 62 of file cbs_h266.c.

◆ i

#define i ( width,
name,
range_min,
range_max )
Value:
xi(width, name, current->name, range_min, range_max, 0, )
#define xi(width, name, var, range_min, range_max, subs,...)
Definition cbs_h264.c:115

Definition at line 64 of file cbs_h266.c.

◆ ib

#define ib ( width,
name )
Value:
#define MAX_INT_BITS(length)
#define MIN_INT_BITS(length)

Definition at line 66 of file cbs_h266.c.

◆ se

#define se ( name,
range_min,
range_max )
Value:
xse(name, current->name, range_min, range_max, 0, )
#define xse(name, var, range_min, range_max, subs,...)
Definition cbs_h264.c:122

Definition at line 68 of file cbs_h266.c.

◆ us

#define us ( width,
name,
range_min,
range_max,
subs,
... )
Value:
xu(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)

Definition at line 71 of file cbs_h266.c.

◆ ubs

#define ubs ( width,
name,
subs,
... )
Value:
xu(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)
#define MAX_UINT_BITS(length)

Definition at line 73 of file cbs_h266.c.

◆ flags

#define flags ( name,
subs,
... )
Value:
xu(1, name, current->name, 0, 1, subs, __VA_ARGS__)

Definition at line 75 of file cbs_h266.c.

◆ ues

#define ues ( name,
range_min,
range_max,
subs,
... )
Value:
xue(name, current->name, range_min, range_max, subs, __VA_ARGS__)

Definition at line 77 of file cbs_h266.c.

◆ is

#define is ( width,
name,
range_min,
range_max,
subs,
... )
Value:
xi(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)

Definition at line 79 of file cbs_h266.c.

◆ ibs

#define ibs ( width,
name,
subs,
... )
Value:
xi(width, name, current->name, MIN_INT_BITS(width), MAX_INT_BITS(width), subs, __VA_ARGS__)

Definition at line 81 of file cbs_h266.c.

◆ ses

#define ses ( name,
range_min,
range_max,
subs,
... )
Value:
xse(name, current->name, range_min, range_max, subs, __VA_ARGS__)

Definition at line 83 of file cbs_h266.c.

◆ fixed

#define fixed ( width,
name,
value )
Value:
do { \
av_unused uint32_t fixed_value = value; \
xu(width, name, fixed_value, value, value, 0, ); \
} while (0)
double value
Definition eval.c:102
#define av_unused
Definition attributes.h:164

Definition at line 86 of file cbs_h266.c.

◆ READ

#define READ

Definition at line 92 of file cbs_h266.c.

◆ READWRITE [1/2]

#define READWRITE   read

Definition at line 93 of file cbs_h266.c.

◆ RWContext [1/2]

#define RWContext   GetBitContext

Definition at line 94 of file cbs_h266.c.

◆ ub [1/2]

#define ub ( width,
name )
Value:
do { \
uint32_t value; \
CHECK(ff_cbs_read_simple_unsigned(ctx, rw, width, #name, \
&value)); \
current->name = value; \
} while (0)

Definition at line 96 of file cbs_h266.c.

◆ xu [1/2]

#define xu ( width,
name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
uint32_t value; \
CHECK(ff_cbs_read_unsigned(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), \
&value, range_min, range_max)); \
var = value; \
} while (0)
#define SUBSCRIPTS(subs,...)
Definition cbs_apv.c:65

Definition at line 102 of file cbs_h266.c.

◆ xue [1/2]

#define xue ( name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
uint32_t value; \
SUBSCRIPTS(subs, __VA_ARGS__), \
&value, range_min, range_max)); \
var = value; \
} while (0)
int ff_cbs_read_ue_golomb(CodedBitstreamContext *ctx, GetBitContext *gbc, const char *name, const int *subscripts, uint32_t *write_to, uint32_t range_min, uint32_t range_max)
Definition cbs_h2645.c:41

Definition at line 109 of file cbs_h266.c.

◆ xi [1/2]

#define xi ( width,
name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
CHECK(ff_cbs_read_signed(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), \
&value, range_min, range_max)); \
var = value; \
} while (0)
int32_t

Definition at line 116 of file cbs_h266.c.

◆ xse [1/2]

#define xse ( name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
SUBSCRIPTS(subs, __VA_ARGS__), \
&value, range_min, range_max)); \
var = value; \
} while (0)
int ff_cbs_read_se_golomb(CodedBitstreamContext *ctx, GetBitContext *gbc, const char *name, const int *subscripts, int32_t *write_to, int32_t range_min, int32_t range_max)
Definition cbs_h2645.c:90

Definition at line 123 of file cbs_h266.c.

◆ infer [1/2]

#define infer ( name,
value )
Value:
do { \
current->name = value; \
} while (0)

Definition at line 132 of file cbs_h266.c.

◆ more_rbsp_data [1/2]

#define more_rbsp_data ( var)
Value:
int ff_cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
Definition cbs_h2645.c:217

Definition at line 136 of file cbs_h266.c.

◆ bit_position [1/2]

#define bit_position ( rw)
Value:
static int get_bits_count(const GetBitContext *s)
Definition get_bits.h:254

Definition at line 138 of file cbs_h266.c.

◆ byte_alignment [1/2]

#define byte_alignment ( rw)
Value:
(get_bits_count(rw) % 8)

Definition at line 139 of file cbs_h266.c.

◆ allocate [1/2]

#define allocate ( name,
size )
Value:
do { \
name ## _ref = av_buffer_allocz(size + \
if (!name ## _ref) \
return AVERROR(ENOMEM); \
name = name ## _ref->data; \
} while (0)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
Definition defs.h:40
AVBufferRef * av_buffer_allocz(size_t size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
Definition buffer.c:93
#define AVERROR(e)
Definition error.h:45
int size

Definition at line 141 of file cbs_h266.c.

◆ FUNC [1/2]

#define FUNC ( name)
Value:

Definition at line 149 of file cbs_h266.c.

◆ WRITE

#define WRITE

Definition at line 170 of file cbs_h266.c.

◆ READWRITE [2/2]

#define READWRITE   write

Definition at line 93 of file cbs_h266.c.

◆ RWContext [2/2]

#define RWContext   PutBitContext

Definition at line 94 of file cbs_h266.c.

◆ ub [2/2]

#define ub ( width,
name )
Value:
do { \
uint32_t value = current->name; \
CHECK(ff_cbs_write_simple_unsigned(ctx, rw, width, #name, \
value)); \
} while (0)

Definition at line 96 of file cbs_h266.c.

◆ xu [2/2]

#define xu ( width,
name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
uint32_t value = var; \
CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), \
value, range_min, range_max)); \
} while (0)

Definition at line 102 of file cbs_h266.c.

◆ xue [2/2]

#define xue ( name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
uint32_t value = var; \
SUBSCRIPTS(subs, __VA_ARGS__), \
value, range_min, range_max)); \
} while (0)
int ff_cbs_write_ue_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc, const char *name, const int *subscripts, uint32_t value, uint32_t range_min, uint32_t range_max)
Definition cbs_h2645.c:145

Definition at line 109 of file cbs_h266.c.

◆ xi [2/2]

#define xi ( width,
name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
int32_t value = var; \
CHECK(ff_cbs_write_signed(ctx, rw, width, #name, \
SUBSCRIPTS(subs, __VA_ARGS__), \
value, range_min, range_max)); \
} while (0)

Definition at line 116 of file cbs_h266.c.

◆ xse [2/2]

#define xse ( name,
var,
range_min,
range_max,
subs,
... )
Value:
do { \
int32_t value = var; \
SUBSCRIPTS(subs, __VA_ARGS__), \
value, range_min, range_max)); \
} while (0)
int ff_cbs_write_se_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc, const char *name, const int *subscripts, int32_t value, int32_t range_min, int32_t range_max)
Definition cbs_h2645.c:177

Definition at line 123 of file cbs_h266.c.

◆ infer [2/2]

#define infer ( name,
value )
Value:
do { \
if (current->name != (value)) { \
av_log(ctx->log_ctx, AV_LOG_ERROR, \
"%s does not match inferred value: " \
"%"PRId64", but should be %"PRId64".\n", \
#name, (int64_t)current->name, (int64_t)(value)); \
} \
} while (0)
long long int64_t
Definition coverity.c:34
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210

Definition at line 132 of file cbs_h266.c.

◆ more_rbsp_data [2/2]

#define more_rbsp_data ( var)
Value:
(var)

Definition at line 136 of file cbs_h266.c.

◆ bit_position [2/2]

#define bit_position ( rw)
Value:
static int put_bits_count(PutBitContext *s)
Definition put_bits.h:90

Definition at line 138 of file cbs_h266.c.

◆ byte_alignment [2/2]

#define byte_alignment ( rw)
Value:
(put_bits_count(rw) % 8)

Definition at line 139 of file cbs_h266.c.

◆ allocate [2/2]

#define allocate ( name,
size )
Value:
do { \
if (!name) { \
av_log(ctx->log_ctx, AV_LOG_ERROR, "%s must be set " \
"for writing.\n", #name); \
} \
} while (0)

Definition at line 141 of file cbs_h266.c.

◆ FUNC [2/2]

#define FUNC ( name)
Value:

Definition at line 149 of file cbs_h266.c.

◆ cbs_h266_replace_ps

#define cbs_h266_replace_ps ( ps_name,
ps_var,
id_element )
Value:
static int cbs_h266_replace_ ## ps_var(CodedBitstreamContext *ctx, \
{ \
CodedBitstreamH266Context *priv = ctx->priv_data; \
H266Raw ## ps_name *ps_var = unit->content; \
unsigned int id = ps_var->id_element; \
int err = ff_cbs_make_unit_refcounted(ctx, unit); \
if (err < 0) \
return err; \
av_assert0(unit->content_ref); \
av_refstruct_replace(&priv->ps_var[id], unit->content_ref); \
return 0; \
}
Coded bitstream unit structure.
Definition cbs.h:77

Definition at line 356 of file cbs_h266.c.

Function Documentation

◆ cbs_h266_split_fragment()

static int cbs_h266_split_fragment ( CodedBitstreamContext * ctx,
CodedBitstreamFragment * frag,
int header )
static

Definition at line 252 of file cbs_h266.c.

◆ cbs_h266_replace_ps()

cbs_h266_replace_ps ( VPS ,
vps ,
vps_video_parameter_set_id  )

Definition at line 371 of file cbs_h266.c.

◆ cbs_h266_replace_ph()

static int cbs_h266_replace_ph ( CodedBitstreamContext * ctx,
CodedBitstreamUnit * unit,
H266RawPictureHeader * ph )
static

Definition at line 394 of file cbs_h266.c.

Referenced by cbs_h266_read_nal_unit(), and cbs_h266_write_nal_unit().

◆ cbs_h266_read_nal_unit()

static int cbs_h266_read_nal_unit ( CodedBitstreamContext * ctx,
CodedBitstreamUnit * unit )
static

Definition at line 410 of file cbs_h266.c.

◆ cbs_h266_write_nal_unit()

static int cbs_h266_write_nal_unit ( CodedBitstreamContext * ctx,
CodedBitstreamUnit * unit,
PutBitContext * pbc )
static

Definition at line 574 of file cbs_h266.c.

◆ cbs_h266_flush()

static av_cold void cbs_h266_flush ( CodedBitstreamContext * ctx)
static

Definition at line 723 of file cbs_h266.c.

Referenced by cbs_h266_close().

◆ cbs_h266_close()

static av_cold void cbs_h266_close ( CodedBitstreamContext * ctx)
static

Definition at line 736 of file cbs_h266.c.

◆ cbs_h266_free_slice()

static void cbs_h266_free_slice ( AVRefStructOpaque unused,
void * content )
static

Definition at line 744 of file cbs_h266.c.

◆ cbs_h266_free_sei()

static void cbs_h266_free_sei ( AVRefStructOpaque unused,
void * content )
static

Definition at line 754 of file cbs_h266.c.

Variable Documentation

◆ cbs_h266_unit_types

CodedBitstreamUnitTypeDescriptor cbs_h266_unit_types[]
static

Definition at line 760 of file cbs_h266.c.

◆ ff_cbs_type_h266

const CodedBitstreamType ff_cbs_type_h266
Initial value:
= {
.codec_id = AV_CODEC_ID_VVC,
.priv_data_size = sizeof(CodedBitstreamH266Context),
.unit_types = cbs_h266_unit_types,
.split_fragment = &cbs_h266_split_fragment,
.read_unit = &cbs_h266_read_nal_unit,
.write_unit = &cbs_h266_write_nal_unit,
.assemble_fragment = &ff_cbs_h2645_assemble_fragment,
}
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
int ff_cbs_h2645_assemble_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Definition cbs_h2645.c:323
static CodedBitstreamUnitTypeDescriptor cbs_h266_unit_types[]
Definition cbs_h266.c:760
static av_cold void cbs_h266_flush(CodedBitstreamContext *ctx)
Definition cbs_h266.c:723
static int cbs_h266_split_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header)
Definition cbs_h266.c:252
static int cbs_h266_read_nal_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
Definition cbs_h266.c:410
static int cbs_h266_write_nal_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
Definition cbs_h266.c:574
static av_cold void cbs_h266_close(CodedBitstreamContext *ctx)
Definition cbs_h266.c:736
void(* flush)(AVBSFContext *ctx)
Definition dts2pts.c:610
@ AV_CODEC_ID_VVC
Definition codec_id.h:247

Definition at line 795 of file cbs_h266.c.