FFmpeg
Macros | Functions | Variables
cbs_mpeg2.c File Reference
#include "libavutil/avassert.h"
#include "cbs.h"
#include "cbs_internal.h"
#include "cbs_mpeg2.h"
#include "startcode.h"
#include "cbs_mpeg2_syntax_template.c"

Go to the source code of this file.

Macros

#define HEADER(name)
 
#define CHECK(call)
 
#define FUNC_NAME(rw, codec, name)   cbs_ ## codec ## _ ## rw ## _ ## name
 
#define FUNC_MPEG2(rw, name)   FUNC_NAME(rw, mpeg2, name)
 
#define FUNC(name)   FUNC_MPEG2(READWRITE, name)
 
#define SUBSCRIPTS(subs, ...)   (subs > 0 ? ((int[subs + 1]){ subs, __VA_ARGS__ }) : NULL)
 
#define ui(width, name)   xui(width, name, current->name, 0, MAX_UINT_BITS(width), 0, )
 
#define uir(width, name)   xui(width, name, current->name, 1, MAX_UINT_BITS(width), 0, )
 
#define uis(width, name, subs, ...)   xui(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)
 
#define uirs(width, name, subs, ...)   xui(width, name, current->name, 1, MAX_UINT_BITS(width), subs, __VA_ARGS__)
 
#define xui(width, name, var, range_min, range_max, subs, ...)   xuia(width, #name, var, range_min, range_max, subs, __VA_ARGS__)
 
#define sis(width, name, subs, ...)   xsi(width, name, current->name, subs, __VA_ARGS__)
 
#define marker_bit()   bit("marker_bit", 1)
 
#define bit(string, value)
 
#define READ
 
#define READWRITE   read
 
#define RWContext   GetBitContext
 
#define xuia(width, string, var, range_min, range_max, subs, ...)
 
#define xsi(width, name, var, subs, ...)
 
#define nextbits(width, compare, var)
 
#define infer(name, value)
 
#define WRITE
 
#define READWRITE   write
 
#define RWContext   PutBitContext
 
#define xuia(width, string, var, range_min, range_max, subs, ...)
 
#define xsi(width, name, var, subs, ...)
 
#define nextbits(width, compare, var)   (var)
 
#define infer(name, value)
 
#define START(start_code, type, read_func, free_func)
 
#define START(start_code, type, func)
 

Functions

static int cbs_mpeg2_split_fragment (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header)
 
static int cbs_mpeg2_read_unit (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
 
static int cbs_mpeg2_write_header (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
 
static int cbs_mpeg2_write_slice (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
 
static int cbs_mpeg2_write_unit (CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
 
static int cbs_mpeg2_assemble_fragment (CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
 

Variables

static const CodedBitstreamUnitTypeDescriptor cbs_mpeg2_unit_types []
 
const CodedBitstreamType ff_cbs_type_mpeg2
 

Macro Definition Documentation

◆ HEADER

#define HEADER (   name)
Value:
do { \
ff_cbs_trace_header(ctx, name); \
} while (0)

Definition at line 27 of file cbs_mpeg2.c.

◆ CHECK

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

Definition at line 31 of file cbs_mpeg2.c.

◆ FUNC_NAME

#define FUNC_NAME (   rw,
  codec,
  name 
)    cbs_ ## codec ## _ ## rw ## _ ## name

Definition at line 37 of file cbs_mpeg2.c.

◆ FUNC_MPEG2

#define FUNC_MPEG2 (   rw,
  name 
)    FUNC_NAME(rw, mpeg2, name)

Definition at line 38 of file cbs_mpeg2.c.

◆ FUNC

#define FUNC (   name)    FUNC_MPEG2(READWRITE, name)

Definition at line 39 of file cbs_mpeg2.c.

◆ SUBSCRIPTS

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

Definition at line 41 of file cbs_mpeg2.c.

◆ ui

#define ui (   width,
  name 
)    xui(width, name, current->name, 0, MAX_UINT_BITS(width), 0, )

Definition at line 43 of file cbs_mpeg2.c.

◆ uir

#define uir (   width,
  name 
)    xui(width, name, current->name, 1, MAX_UINT_BITS(width), 0, )

Definition at line 45 of file cbs_mpeg2.c.

◆ uis

#define uis (   width,
  name,
  subs,
  ... 
)    xui(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)

Definition at line 47 of file cbs_mpeg2.c.

◆ uirs

#define uirs (   width,
  name,
  subs,
  ... 
)    xui(width, name, current->name, 1, MAX_UINT_BITS(width), subs, __VA_ARGS__)

Definition at line 49 of file cbs_mpeg2.c.

◆ xui

#define xui (   width,
  name,
  var,
  range_min,
  range_max,
  subs,
  ... 
)    xuia(width, #name, var, range_min, range_max, subs, __VA_ARGS__)

Definition at line 51 of file cbs_mpeg2.c.

◆ sis

#define sis (   width,
  name,
  subs,
  ... 
)    xsi(width, name, current->name, subs, __VA_ARGS__)

Definition at line 53 of file cbs_mpeg2.c.

◆ marker_bit

#define marker_bit ( )    bit("marker_bit", 1)

Definition at line 56 of file cbs_mpeg2.c.

◆ bit

#define bit (   string,
  value 
)
Value:
do { \
av_unused uint32_t bit = value; \
xuia(1, string, bit, value, value, 0, ); \
} while (0)

Definition at line 58 of file cbs_mpeg2.c.

◆ READ

#define READ

Definition at line 64 of file cbs_mpeg2.c.

◆ READWRITE [1/2]

#define READWRITE   read

Definition at line 105 of file cbs_mpeg2.c.

◆ RWContext [1/2]

#define RWContext   GetBitContext

Definition at line 106 of file cbs_mpeg2.c.

◆ xuia [1/2]

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

Definition at line 108 of file cbs_mpeg2.c.

◆ xsi [1/2]

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

Definition at line 114 of file cbs_mpeg2.c.

◆ nextbits [1/2]

#define nextbits (   width,
  compare,
  var 
)
Value:
(get_bits_left(rw) >= width && \
(var = show_bits(rw, width)) == (compare))

Definition at line 121 of file cbs_mpeg2.c.

◆ infer [1/2]

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

Definition at line 123 of file cbs_mpeg2.c.

◆ WRITE

#define WRITE

Definition at line 104 of file cbs_mpeg2.c.

◆ READWRITE [2/2]

#define READWRITE   write

Definition at line 105 of file cbs_mpeg2.c.

◆ RWContext [2/2]

#define RWContext   PutBitContext

Definition at line 106 of file cbs_mpeg2.c.

◆ xuia [2/2]

#define xuia (   width,
  string,
  var,
  range_min,
  range_max,
  subs,
  ... 
)
Value:
do { \
CHECK(ff_cbs_write_unsigned(ctx, rw, width, string, \
SUBSCRIPTS(subs, __VA_ARGS__), \
var, range_min, range_max)); \
} while (0)

Definition at line 108 of file cbs_mpeg2.c.

◆ xsi [2/2]

#define xsi (   width,
  name,
  var,
  subs,
  ... 
)
Value:
do { \
SUBSCRIPTS(subs, __VA_ARGS__), var, \
} while (0)

Definition at line 114 of file cbs_mpeg2.c.

◆ nextbits [2/2]

#define nextbits (   width,
  compare,
  var 
)    (var)

Definition at line 121 of file cbs_mpeg2.c.

◆ infer [2/2]

#define infer (   name,
  value 
)
Value:
do { \
if (current->name != (value)) { \
av_log(ctx->log_ctx, AV_LOG_WARNING, "Warning: " \
"%s does not match inferred value: " \
"%"PRId64", but should be %"PRId64".\n", \
#name, (int64_t)current->name, (int64_t)(value)); \
} \
} while (0)

Definition at line 123 of file cbs_mpeg2.c.

◆ START [1/2]

#define START (   start_code,
  type,
  read_func,
  free_func 
)
Value:
case start_code: \
{ \
type *header = unit->content; \
err = cbs_mpeg2_read_ ## read_func(ctx, &gbc, header); \
if (err < 0) \
return err; \
} \
break;

◆ START [2/2]

#define START (   start_code,
  type,
  func 
)
Value:
case start_code: \
err = cbs_mpeg2_write_ ## func(ctx, pbc, unit->content); \
break;

Function Documentation

◆ cbs_mpeg2_split_fragment()

static int cbs_mpeg2_split_fragment ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag,
int  header 
)
static

Definition at line 143 of file cbs_mpeg2.c.

◆ cbs_mpeg2_read_unit()

static int cbs_mpeg2_read_unit ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit 
)
static

Definition at line 197 of file cbs_mpeg2.c.

◆ cbs_mpeg2_write_header()

static int cbs_mpeg2_write_header ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit,
PutBitContext pbc 
)
static

Definition at line 265 of file cbs_mpeg2.c.

Referenced by cbs_mpeg2_write_unit().

◆ cbs_mpeg2_write_slice()

static int cbs_mpeg2_write_slice ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit,
PutBitContext pbc 
)
static

Definition at line 293 of file cbs_mpeg2.c.

Referenced by cbs_mpeg2_write_unit().

◆ cbs_mpeg2_write_unit()

static int cbs_mpeg2_write_unit ( CodedBitstreamContext ctx,
CodedBitstreamUnit unit,
PutBitContext pbc 
)
static

Definition at line 342 of file cbs_mpeg2.c.

◆ cbs_mpeg2_assemble_fragment()

static int cbs_mpeg2_assemble_fragment ( CodedBitstreamContext ctx,
CodedBitstreamFragment frag 
)
static

Definition at line 352 of file cbs_mpeg2.c.

Variable Documentation

◆ cbs_mpeg2_unit_types

const CodedBitstreamUnitTypeDescriptor cbs_mpeg2_unit_types[]
static

◆ ff_cbs_type_mpeg2

const CodedBitstreamType ff_cbs_type_mpeg2
Initial value:
= {
.priv_data_size = sizeof(CodedBitstreamMPEG2Context),
.unit_types = cbs_mpeg2_unit_types,
.split_fragment = &cbs_mpeg2_split_fragment,
.read_unit = &cbs_mpeg2_read_unit,
.write_unit = &cbs_mpeg2_write_unit,
.assemble_fragment = &cbs_mpeg2_assemble_fragment,
}

Definition at line 416 of file cbs_mpeg2.c.

func
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition: jacosubdec.c:68
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
name
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 default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:664
MPEG2_START_GROUP
@ MPEG2_START_GROUP
Definition: cbs_mpeg2.h:37
MPEG2RawPictureHeader
Definition: cbs_mpeg2.h:123
start_code
static const uint8_t start_code[]
Definition: videotoolboxenc.c:198
MAX_INT_BITS
#define MAX_INT_BITS(length)
Definition: cbs_internal.h:188
SUBSCRIPTS
#define SUBSCRIPTS(subs,...)
Definition: cbs_mpeg2.c:41
MPEG2RawExtensionData
Definition: cbs_mpeg2.h:177
MPEG2_START_SEQUENCE_HEADER
@ MPEG2_START_SEQUENCE_HEADER
Definition: cbs_mpeg2.h:33
MPEG2RawUserData
Definition: cbs_mpeg2.h:76
bit
#define bit(string, value)
Definition: cbs_mpeg2.c:58
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: cbs.c:586
MPEG2RawSlice
Definition: cbs_mpeg2.h:206
MPEG2RawGroupOfPicturesHeader
Definition: cbs_mpeg2.h:109
CBS_UNIT_TYPE_INTERNAL_REF
#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field)
Definition: cbs_internal.h:219
CBS_CONTENT_TYPE_INTERNAL_REFS
@ CBS_CONTENT_TYPE_INTERNAL_REFS
Definition: cbs_internal.h:37
MPEG2_START_EXTENSION
@ MPEG2_START_EXTENSION
Definition: cbs_mpeg2.h:35
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
width
#define width
ctx
AVFormatContext * ctx
Definition: movenc.c:48
CBS_UNIT_TYPE_RANGE
@ CBS_UNIT_TYPE_RANGE
Definition: cbs_internal.h:52
cbs_mpeg2_write_unit
static int cbs_mpeg2_write_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
Definition: cbs_mpeg2.c:342
cbs_mpeg2_split_fragment
static int cbs_mpeg2_split_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header)
Definition: cbs_mpeg2.c:143
user_data
static int FUNC() user_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawUserData *current)
Definition: cbs_mpeg2_syntax_template.c:59
header
static const uint8_t header[24]
Definition: sdr2.c:67
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: cbs.c:665
cbs_mpeg2_assemble_fragment
static int cbs_mpeg2_assemble_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Definition: cbs_mpeg2.c:352
CBS_UNIT_TYPE_POD
#define CBS_UNIT_TYPE_POD(type_, structure)
Definition: cbs_internal.h:195
MPEG2RawSequenceEnd
Definition: cbs_mpeg2.h:215
MPEG2RawSequenceHeader
Definition: cbs_mpeg2.h:59
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: cbs.c:622
MPEG2_START_USER_DATA
@ MPEG2_START_USER_DATA
Definition: cbs_mpeg2.h:32
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:361
value
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 default value
Definition: writing_filters.txt:86
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: cbs.c:543
CodedBitstreamMPEG2Context
Definition: cbs_mpeg2.h:220
CBS_UNIT_TYPE_END_OF_LIST
#define CBS_UNIT_TYPE_END_OF_LIST
Definition: cbs_internal.h:242
MPEG2_START_SEQUENCE_END
@ MPEG2_START_SEQUENCE_END
Definition: cbs_mpeg2.h:36
compare
static float compare(const AVFrame *haystack, const AVFrame *obj, int offx, int offy)
Definition: vf_find_rect.c:95
cbs_mpeg2_read_unit
static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
Definition: cbs_mpeg2.c:197
MIN_INT_BITS
#define MIN_INT_BITS(length)
Definition: cbs_internal.h:192
cbs_mpeg2_unit_types
static const CodedBitstreamUnitTypeDescriptor cbs_mpeg2_unit_types[]
Definition: cbs_mpeg2.c:389
MPEG2_START_PICTURE
@ MPEG2_START_PICTURE
Definition: cbs_mpeg2.h:29
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:54