FFmpeg
Classes | Macros | Typedefs | Functions | Variables
bitstream.c File Reference

bitstream api. More...

#include "libavutil/avassert.h"
#include "libavutil/qsort.h"
#include "avcodec.h"
#include "internal.h"
#include "mathops.h"
#include "put_bits.h"
#include "vlc.h"

Classes

struct  VLCcode
 

Macros

#define GET_DATA(v, table, i, wrap, size)
 
#define COPY(condition)
 

Typedefs

typedef struct VLCcode VLCcode
 

Functions

void avpriv_align_put_bits (PutBitContext *s)
 Pad the bitstream with zeros up to the next byte boundary.
 
void avpriv_put_string (PutBitContext *pb, const char *string, int terminate_string)
 Put the string string in the bitstream. More...
 
void avpriv_copy_bits (PutBitContext *pb, const uint8_t *src, int length)
 Copy the content of src to the bitstream. More...
 
int ff_init_vlc_sparse (VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
 
void ff_free_vlc (VLC *vlc)
 

Variables

const uint8_t ff_log2_run [41]
 

Detailed Description

bitstream api.

Macro Definition Documentation

§ COPY

#define COPY (   condition)
Value:
for (i = 0; i < nb_codes; i++) { \
GET_DATA(buf[j].bits, bits, i, bits_wrap, bits_size); \
if (!(condition)) \
continue; \
if (buf[j].bits > 3*nb_bits || buf[j].bits>32) { \
av_log(NULL, AV_LOG_ERROR, "Too long VLC (%d) in init_vlc\n", buf[j].bits);\
if (!(flags & INIT_VLC_USE_NEW_STATIC)) \
av_free(buf); \
return -1; \
} \
GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \
if (buf[j].code >= (1LL<<buf[j].bits)) { \
av_log(NULL, AV_LOG_ERROR, "Invalid code %"PRIx32" for %d in " \
"init_vlc\n", buf[j].code, i); \
if (!(flags & INIT_VLC_USE_NEW_STATIC)) \
av_free(buf); \
return -1; \
} \
if (flags & INIT_VLC_LE) \
buf[j].code = bitswap_32(buf[j].code); \
else \
buf[j].code <<= 32 - buf[j].bits; \
if (symbols) \
GET_DATA(buf[j].symbol, symbols, i, symbols_wrap, symbols_size) \
else \
buf[j].symbol = i; \
j++; \
}
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176

§ GET_DATA

#define GET_DATA (   v,
  table,
  i,
  wrap,
  size 
)
Value:
{ \
const uint8_t *ptr = (const uint8_t *)table + i * wrap; \
switch(size) { \
case 1: \
v = *(const uint8_t *)ptr; \
break; \
case 2: \
v = *(const uint16_t *)ptr; \
break; \
case 4: \
v = *(const uint32_t *)ptr; \
break; \
default: \
av_assert1(0); \
} \
}

Function Documentation

§ avpriv_copy_bits()

void avpriv_copy_bits ( PutBitContext pb,
const uint8_t *  src,
int  length 
)

Copy the content of src to the bitstream.

Parameters
lengththe number of bits of src to copy

§ avpriv_put_string()

void avpriv_put_string ( PutBitContext pb,
const char *  string,
int  terminate_string 
)

Put the string string in the bitstream.

Parameters
terminate_string0-terminates the written string if value is 1

Variable Documentation

§ ff_log2_run

const uint8_t ff_log2_run[41]
Initial value:
={
0, 0, 0, 0, 1, 1, 1, 1,
2, 2, 2, 2, 3, 3, 3, 3,
4, 4, 5, 5, 6, 6, 7, 7,
8, 9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,
24,
}