49 #define MAX_REFERENCE_FRAMES 8 
   51 #define MAX_FRAMES (MAX_REFERENCE_FRAMES + MAX_DELAY + 1) 
   53 #define MAX_BLOCKSIZE 32     
   58 #define DIRAC_REF_MASK_REF1   1 
   59 #define DIRAC_REF_MASK_REF2   2 
   60 #define DIRAC_REF_MASK_GLOBAL 4 
   66 #define DELAYED_PIC_REF 4 
   68 #define CALC_PADDING(size, depth)                       \ 
   69     (((size + (1 << depth) - 1) >> depth) << depth) 
   71 #define DIVRNDUP(a, b) (((a) + (b) - 1) / (b)) 
  105 typedef struct Plane {
 
  252     return (
int)((x+1
U)*21845 + 10922) >> 16;
 
  258     int i, remove_idx = -1;
 
  260     for (i = 0; framelist[i]; i++)
 
  261         if (framelist[i]->avframe->display_picture_number == picnum) {
 
  262             remove_pic = framelist[i];
 
  267         for (i = remove_idx; framelist[i]; i++)
 
  268             framelist[i] = framelist[i+1];
 
  276     for (i = 0; i < maxframes; i++)
 
  278             framelist[i] = 
frame;
 
  288     int i, w, 
h, top_padding;
 
  291     for (i = 0; i < 3; i++) {
 
  361         for (j = 0; j < 3; j++)
 
  362             for (k = 1; k < 4; k++)
 
  369     for (i = 0; i < 3; i++) {
 
  445     const unsigned sign = 
FFSIGN(coeff);
 
  447         coeff = sign*((sign * coeff * qfactor + qoffset) >> 2);
 
  451 #define SIGN_CTX(x) (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0)) 
  453 #define UNPACK_ARITH(n, type) \ 
  454     static inline void coeff_unpack_arith_##n(DiracArith *c, int qfactor, int qoffset, \ 
  455                                               SubBand *b, type *buf, int x, int y) \ 
  457         int sign, sign_pred = 0, pred_ctx = CTX_ZPZN_F1; \ 
  459         const int mstride = -(b->stride >> (1+b->pshift)); \ 
  461             const type *pbuf = (type *)b->parent->ibuf; \ 
  462             const int stride = b->parent->stride >> (1+b->parent->pshift); \ 
  463             pred_ctx += !!pbuf[stride * (y>>1) + (x>>1)] << 1; \ 
  465         if (b->orientation == subband_hl) \ 
  466             sign_pred = buf[mstride]; \ 
  468             pred_ctx += !(buf[-1] | buf[mstride] | buf[-1 + mstride]); \ 
  469             if (b->orientation == subband_lh) \ 
  470                 sign_pred = buf[-1]; \ 
  472             pred_ctx += !buf[mstride]; \ 
  474         coeff = dirac_get_arith_uint(c, pred_ctx, CTX_COEFF_DATA); \ 
  476             coeff = (coeff * qfactor + qoffset) >> 2; \ 
  477             sign  = dirac_get_arith_bit(c, SIGN_CTX(sign_pred)); \ 
  478             coeff = (coeff ^ -sign) + sign; \ 
  492                              int left, 
int right, 
int top, 
int bottom,
 
  493                              int blockcnt_one, 
int is_arith)
 
  495     int x, y, zero_block;
 
  496     int qoffset, qfactor;
 
  510     if (s->codeblock_mode && !(s->old_delta_quant && blockcnt_one)) {
 
  511         int quant = b->quant;
 
  536     buf = b->ibuf + top * b->stride;
 
  538         for (y = top; y < bottom; y++) {
 
  539             for (x = left; x < right; x++) {
 
  541                     coeff_unpack_arith_10(c, qfactor, qoffset, b, (
int32_t*)(buf)+x, x, y);
 
  543                     coeff_unpack_arith_8(c, qfactor, qoffset, b, (int16_t*)(buf)+x, x, y);
 
  549         for (y = top; y < bottom; y++) {
 
  550             for (x = left; x < right; x++) {
 
  567 #define INTRA_DC_PRED(n, type) \ 
  568     static inline void intra_dc_prediction_##n(SubBand *b) \ 
  570         type *buf = (type*)b->ibuf; \ 
  573         for (x = 1; x < b->width; x++) \ 
  574             buf[x] += buf[x-1]; \ 
  575         buf += (b->stride >> (1+b->pshift)); \ 
  577         for (y = 1; y < b->height; y++) { \ 
  578             buf[0] += buf[-(b->stride >> (1+b->pshift))]; \ 
  580             for (x = 1; x < b->width; x++) { \ 
  581                 int pred = buf[x - 1] + buf[x - (b->stride >> (1+b->pshift))] + buf[x - (b->stride >> (1+b->pshift))-1]; \ 
  582                 buf[x]  += divide3(pred); \ 
  584             buf += (b->stride >> (1+b->pshift)); \ 
  597     int cb_x, cb_y, left, right, top, bottom;
 
  600     int cb_width  = s->codeblock[b->level + (b->orientation != 
subband_ll)].
width;
 
  601     int cb_height = s->codeblock[b->level + (b->orientation != 
subband_ll)].
height;
 
  602     int blockcnt_one = (cb_width + cb_height) == 2;
 
  613     for (cb_y = 0; cb_y < cb_height; cb_y++) {
 
  614         bottom = (b->height * (cb_y+1LL)) / cb_height;
 
  616         for (cb_x = 0; cb_x < cb_width; cb_x++) {
 
  617             right = (b->width * (cb_x+1LL)) / cb_width;
 
  618             codeblock(s, b, &gb, &c, left, right, top, bottom, blockcnt_one, is_arith);
 
  624     if (b->orientation == 
subband_ll && s->num_refs == 0) {
 
  626             intra_dc_prediction_10(b);
 
  628             intra_dc_prediction_8(b);
 
  657     int level, num_bands = 0;
 
  661         for (orientation = !!level; orientation < 4; orientation++) {
 
  663             bands[num_bands++] = 
b;
 
  686 #define PARSE_VALUES(type, x, gb, ebits, buf1, buf2) \ 
  687     type *buf = (type *)buf1; \ 
  688     buf[x] = coeff_unpack_golomb(gb, qfactor, qoffset); \ 
  689     if (get_bits_count(gb) >= ebits) \ 
  692         buf = (type *)buf2; \ 
  693         buf[x] = coeff_unpack_golomb(gb, qfactor, qoffset); \ 
  694         if (get_bits_count(gb) >= ebits) \ 
  699                            int slice_x, 
int slice_y, 
int bits_end,
 
  703     int right  = b1->
width  *(slice_x+1) / s->
num_x;
 
  707     int qfactor, qoffset;
 
  725         for (y = top; y < bottom; y++) {
 
  726             for (x = left; x < right; x++) {
 
  735         for (y = top; y < bottom; y++) {
 
  736             for (x = left; x < right; x++) {
 
  765         for (orientation = !!level; orientation < 4; orientation++) {
 
  774     chroma_bits = 8*slice->
bytes - 7 - length_bits - luma_bits;
 
  778         for (orientation = !!level; orientation < 4; orientation++) {
 
  819     int i, 
level, orientation, quant_idx;
 
  834         for (orientation = !!level; orientation < 4; orientation++) {
 
  842     for (i = 0; i < 3; i++) {
 
  843         int coef_num, coef_par, off = 0;
 
  857                                                   length, tmp_buf, coef_num);
 
  860                                                   length, tmp_buf, coef_num);
 
  862         if (coef_num > coef_par) {
 
  863             const int start_b = coef_par * (1 << (s->
pshift + 1));
 
  864             const int end_b   = coef_num * (1 << (s->
pshift + 1));
 
  865             memset(&tmp_buf[start_b], 0, end_b - start_b);
 
  870             for (orientation = !!level; orientation < 4; orientation++) {
 
  877                                                    qfactor[
level][orientation],
 
  878                                                    qoffset[
level][orientation],
 
  897     for (i = 0; i < s->
num_x; i++)
 
  909     int slice_x, slice_y, bufsize;
 
  910     int64_t coef_buf_size, bytes = 0;
 
  930     coef_buf_size = (coef_buf_size << (1 + s->
pshift)) + 512;
 
  951         for (slice_y = 0; bufsize > 0 && slice_y < s->
num_y; slice_y++) {
 
  952             for (slice_x = 0; bufsize > 0 && slice_x < s->
num_x; slice_x++) {
 
  954                 for (i = 0; i < 3; i++) {
 
  955                     if (bytes <= bufsize/8)
 
  958                 if (bytes >= INT_MAX || bytes*8 > bufsize) {
 
  963                 slices[slice_num].
bytes   = bytes;
 
  964                 slices[slice_num].
slice_x = slice_x;
 
  965                 slices[slice_num].
slice_y = slice_y;
 
  970                 if (bufsize/8 >= bytes)
 
  984         for (slice_y = 0; bufsize > 0 && slice_y < s->
num_y; slice_y++) {
 
  985             for (slice_x = 0; bufsize > 0 && slice_x < s->
num_x; slice_x++) {
 
  988                 slices[slice_num].
bytes   = bytes;
 
  989                 slices[slice_num].
slice_x = slice_x;
 
  990                 slices[slice_num].
slice_y = slice_y;
 
  995                 if (bufsize/8 >= bytes)
 
 1007             intra_dc_prediction_10(&s->
plane[0].
band[0][0]); 
 
 1008             intra_dc_prediction_10(&s->
plane[1].
band[0][0]); 
 
 1009             intra_dc_prediction_10(&s->
plane[2].
band[0][0]); 
 
 1011             intra_dc_prediction_8(&s->
plane[0].
band[0][0]);
 
 1012             intra_dc_prediction_8(&s->
plane[1].
band[0][0]);
 
 1013             intra_dc_prediction_8(&s->
plane[2].
band[0][0]);
 
 1022     int i, w, 
h, 
level, orientation;
 
 1024     for (i = 0; i < 3; i++) {
 
 1036             for (orientation = !!level; orientation < 4; orientation++) {
 
 1047                 if (orientation & 1)
 
 1049                 if (orientation > 1)
 
 1076     static const uint8_t default_blen[] = { 4, 12, 16, 24 };
 
 1110                "invalid x/y block length (%d/%d) for x/y chroma shift (%d/%d)\n",
 
 1141         for (ref = 0; ref < s->
num_refs; ref++) {
 
 1208 #define CHECKEDREAD(dst, cond, errmsg) \ 
 1209     tmp = get_interleaved_ue_golomb(gb); \ 
 1211         av_log(s->avctx, AV_LOG_ERROR, errmsg); \ 
 1212         return AVERROR_INVALIDDATA; \ 
 1271                 for (i = !!level; i < 4; i++) {
 
 1282                 for (i = 0; i < 4; i++) {
 
 1295     static const uint8_t avgsplit[7] = { 0, 0, 1, 1, 1, 2, 2 };
 
 1304     return avgsplit[sbsplit[-1] + sbsplit[-
stride] + sbsplit[-stride-1]];
 
 1314         return block[-1].
ref & refmask;
 
 1319     pred = (block[-1].
ref & refmask) + (block[-stride].
ref & refmask) + (block[-stride-1].
ref & refmask);
 
 1320     return (pred >> 1) & refmask;
 
 1327     memset(block->
u.
dc, 0, 
sizeof(block->
u.
dc));
 
 1329     if (x && !(block[-1].
ref & 3)) {
 
 1330         for (i = 0; i < 3; i++)
 
 1331             block->
u.
dc[i] += block[-1].
u.
dc[i];
 
 1335     if (y && !(block[-stride].
ref & 3)) {
 
 1336         for (i = 0; i < 3; i++)
 
 1337             block->
u.
dc[i] += block[-stride].
u.
dc[i];
 
 1341     if (x && y && !(block[-1-stride].ref & 3)) {
 
 1342         for (i = 0; i < 3; i++)
 
 1343             block->
u.
dc[i] += block[-1-stride].
u.
dc[i];
 
 1348         for (i = 0; i < 3; i++)
 
 1349             block->
u.
dc[i] = (block->
u.
dc[i]+1)>>1;
 
 1350     } 
else if (n == 3) {
 
 1351         for (i = 0; i < 3; i++)
 
 1359     int refmask = ref+1;
 
 1363     if (x && (block[-1].ref & mask) == refmask)
 
 1364         pred[n++] = block[-1].
u.
mv[
ref];
 
 1366     if (y && (block[-stride].ref & mask) == refmask)
 
 1369     if (x && y && (block[-stride-1].ref & mask) == refmask)
 
 1370         pred[n++] = block[-stride-1].
u.
mv[
ref];
 
 1378         block->
u.
mv[
ref][0] = pred[0][0];
 
 1379         block->
u.
mv[
ref][1] = pred[0][1];
 
 1382         block->
u.
mv[
ref][0] = (pred[0][0] + pred[1][0] + 1) >> 1;
 
 1383         block->
u.
mv[
ref][1] = (pred[0][1] + pred[1][1] + 1) >> 1;
 
 1386         block->
u.
mv[
ref][0] = 
mid_pred(pred[0][0], pred[1][0], pred[2][0]);
 
 1387         block->
u.
mv[
ref][1] = 
mid_pred(pred[0][1], pred[1][1], pred[2][1]);
 
 1400     int m       = (1<<ep) - (c[0]*x + c[1]*y);
 
 1401     int mx      = m * ((
A[0][0] * x + 
A[0][1]*y) + (1<<ez) * b[0]);
 
 1402     int my      = m * ((
A[1][0] * x + 
A[1][1]*y) + (1<<ez) * b[1]);
 
 1404     block->
u.
mv[
ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
 
 1405     block->
u.
mv[
ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
 
 1409                                 int stride, 
int x, 
int y)
 
 1423         for (i = 0; i < 3; i++)
 
 1434         if (block->
ref & (i+1)) {
 
 1438                 pred_mv(block, stride, x, y, i);
 
 1453     for (x = 1; x < 
size; x++)
 
 1456     for (y = 1; y < 
size; y++) {
 
 1458         for (x = 0; x < 
size; x++)
 
 1485     for (y = 0; y < s->
sbheight; y++) {
 
 1486         for (x = 0; x < s->
sbwidth; x++) {
 
 1497     for (i = 0; i < s->
num_refs; i++) {
 
 1501     for (i = 0; i < 3; i++)
 
 1505         for (x = 0; x < s->
sbwidth; x++) {
 
 1509             for (q = 0; q < blkcnt; q++)
 
 1510                 for (p = 0; p < blkcnt; p++) {
 
 1511                     int bx = 4 * x + p*step;
 
 1512                     int by = 4 * y + q*step;
 
 1524 #define ROLLOFF(i) offset == 1 ? ((i) ? 5 : 3) :        \ 
 1525     (1 + (6*(i) + offset - 1) / (2*offset - 1)) 
 1529     else if (i > blen-1 - 2*offset)
 
 1535                                  int left, 
int right, 
int wy)
 
 1538     for (x = 0; left && x < p->
xblen >> 1; x++)
 
 1539         obmc_weight[x] = wy*8;
 
 1540     for (; x < p->
xblen >> right; x++)
 
 1542     for (; x < p->
xblen; x++)
 
 1543         obmc_weight[x] = wy*8;
 
 1549                              int left, 
int right, 
int top, 
int bottom)
 
 1552     for (y = 0; top && y < p->
yblen >> 1; y++) {
 
 1556     for (; y < p->
yblen >> bottom; y++) {
 
 1561     for (; y < p->
yblen; y++) {
 
 1573     if (top || bottom || by == 1) {
 
 1612     int motion_x = block->
u.
mv[
ref][0];
 
 1613     int motion_y = block->
u.
mv[
ref][1];
 
 1614     int mx, my, i, epel, nplanes = 0;
 
 1637         src[0] = ref_hpel[(my>>1)+(mx>>2)] + y*p->
stride + x;
 
 1641         for (i = 0; i < 4; i++)
 
 1642             src[i] = ref_hpel[i] + y*p->
stride + x;
 
 1666                 src[!mx] = src[2 + !!mx];
 
 1668             } 
else if (!(my&3)) {
 
 1669                 src[0] = src[(my>>1)  ];
 
 1670                 src[1] = src[(my>>1)+1];
 
 1691         for (i = 0; i < nplanes; i++) {
 
 1699     return (nplanes>>1) + epel;
 
 1703                    uint8_t *obmc_weight, 
int xblen, 
int yblen)
 
 1708     for (y = 0; y < yblen; y++) {
 
 1709         for (x = 0; x < xblen; x += 2) {
 
 1710             dst[x  ] += dc * obmc_weight[x  ];
 
 1711             dst[x+1] += dc * obmc_weight[x+1];
 
 1719                      uint16_t *mctmp, 
uint8_t *obmc_weight,
 
 1720                      int plane, 
int dstx, 
int dsty)
 
 1726     switch (block->
ref&3) {
 
 1732         idx = 
mc_subpel(s, block, src, dstx, dsty, (block->
ref&3)-1, plane);
 
 1739         idx = 
mc_subpel(s, block, src, dstx, dsty, 0, plane);
 
 1741         idx = 
mc_subpel(s, block, src, dstx, dsty, 1, plane);
 
 1762     for (x = 1; x < s->
blwidth-1; x++) {
 
 1804     for (i = 1; i < 4; i++) {
 
 1816                                       ref->
hpel[plane][3], ref->
hpel[plane][0],
 
 1834     int y, i, 
comp, dsty;
 
 1840             for (comp = 0; comp < 3; comp++) {
 
 1851     for (comp = 0; comp < 3; comp++) {
 
 1856         for (i = 0; i < 4; i++)
 
 1870             for (y = 0; y < p->
height; y += 16) {
 
 1883             for (i = 0; i < s->
num_refs; i++) {
 
 1892             for (y = 0; y < s->
blheight; y++) {
 
 1895                 uint16_t *mctmp    = s->
mctmp + y*rowheight;
 
 1908                 mc_row(s, blocks, mctmp, comp, dsty);
 
 1929     int chroma_x_shift, chroma_y_shift;
 
 1938     for (i = 0; f->
data[i]; i++) {
 
 1955     unsigned retire, picnum;
 
 1957     int64_t refdist, refnum;
 
 1972     for (i = 0; i < s->
num_refs; i++) {
 
 1974         refdist = INT64_MAX;
 
 2009         if (retire != picnum) {
 
 2072 #define DATA_UNIT_HEADER_SIZE 13 
 2088     parse_code = buf[4];
 
 2144             if (sscanf(buf+14, 
"Schroedinger %d.%d.%d", ver, ver+1, ver+2) == 3)
 
 2145                 if (ver[0] == 1 && ver[1] == 0 && ver[2] <= 7)
 
 2148     } 
else if (parse_code & 0x8) {  
 
 2166         tmp            =  parse_code & 0x03;                   
 
 2172         s->
is_arith      = (parse_code & 0x48) == 0x08;          
 
 2173         s->
low_delay     = (parse_code & 0x88) == 0x88;          
 
 2178         pic->
reference   = (parse_code & 0x0C) == 0x0C;          
 
 2219     int buf_size        = pkt->
size;
 
 2222     unsigned data_unit_size;
 
 2243             if (buf[buf_idx  ] == 
'B' && buf[buf_idx+1] == 
'B' &&
 
 2244                 buf[buf_idx+2] == 
'C' && buf[buf_idx+3] == 
'D')
 
 2251         data_unit_size = 
AV_RB32(buf+buf_idx+5);
 
 2252         if (data_unit_size > buf_size - buf_idx || !data_unit_size) {
 
 2253             if(data_unit_size > buf_size - buf_idx)
 
 2255                    "Data unit with size %d is larger than input buffer, discarding\n",
 
 2267         buf_idx += data_unit_size;
 
 2291         if (delayed_frame) {
 
#define CHECKEDREAD(dst, cond, errmsg)
int ff_dirac_golomb_read_32bit(DiracGolombLUT *lut_ctx, const uint8_t *buf, int bytes, uint8_t *_dst, int coeffs)
void(* add_obmc)(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen)
av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc)
#define UNPACK_ARITH(n, type)
const char const char void * val
const int32_t ff_dirac_qscale_tab[116]
#define PARSE_VALUES(type, x, gb, ebits, buf1, buf2)
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
static av_cold int dirac_decode_end(AVCodecContext *avctx)
static void codeblock(DiracContext *s, SubBand *b, GetBitContext *gb, DiracArith *c, int left, int right, int top, int bottom, int blockcnt_one, int is_arith)
Decode the coeffs in the rectangle defined by left, right, top, bottom [DIRAC_STD] 13...
#define av_realloc_f(p, o, n)
This structure describes decoded (raw) audio or video data. 
dirac_weight_func weight_func
ptrdiff_t const GLvoid * data
static void flush(AVCodecContext *avctx)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
DiracFrame * ref_frames[MAX_REFERENCE_FRAMES+1]
static int divide3(int x)
static int dirac_decode_frame_internal(DiracContext *s)
Dirac Specification -> 13.0 Transform data syntax. 
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context. 
static void skip_bits_long(GetBitContext *s, int n)
static av_cold int init(AVCodecContext *avctx)
struct DiracContext::@62 globalmc[2]
static void propagate_block_data(DiracBlock *block, int stride, int size)
Copies the current block to the other blocks covered by the current superblock split mode...
enum AVColorRange color_range
MPEG vs JPEG YUV range. 
dirac_weight_func weight_dirac_pixels_tab[3]
#define DELAYED_PIC_REF
Value of Picture.reference when Picture is not a reference picture, but is held for delayed output...
void ff_dirac_init_arith_decoder(DiracArith *c, GetBitContext *gb, int length)
static int subband_coeffs(DiracContext *s, int x, int y, int p, SliceCoeffs c[MAX_DWT_LEVELS])
#define DATA_UNIT_HEADER_SIZE
Dirac Specification -> 9.6 Parse Info Header Syntax. 
static void global_mv(DiracContext *s, DiracBlock *block, int x, int y, int ref)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
static int dirac_get_arith_uint(DiracArith *c, int follow_ctx, int data_ctx)
static int alloc_buffers(DiracContext *s, int stride)
int ff_dirac_golomb_read_16bit(DiracGolombLUT *lut_ctx, const uint8_t *buf, int bytes, uint8_t *_dst, int coeffs)
attribute_deprecated void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
static void dirac_decode_flush(AVCodecContext *avctx)
const uint8_t * coeff_data
static int get_delayed_pic(DiracContext *s, AVFrame *picture, int *got_frame)
static int dirac_unpack_idwt_params(DiracContext *s)
Dirac Specification -> 11.3 Wavelet transform data. 
#define DIRAC_REF_MASK_REF2
static int decode_hq_slice(DiracContext *s, DiracSlice *slice, uint8_t *tmp_buf)
VC-2 Specification -> 13.5.3 hq_slice(sx,sy) 
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
int av_dirac_parse_sequence_header(AVDiracSeqHeader **pdsh, const uint8_t *buf, size_t buf_size, void *log_ctx)
Parse a Dirac sequence header. 
unsigned weight_log2denom
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
DiracFrame * delay_frames[MAX_DELAY+1]
void(* emulated_edge_mc)(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_linesize, ptrdiff_t src_linesize, int block_w, int block_h, int src_x, int src_y, int w, int h)
Copy a rectangular area of samples to a temporary buffer and replicate the border samples...
av_cold void ff_mpegvideoencdsp_init(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
void(* add_rect_clamped)(uint8_t *dst, const uint16_t *src, int stride, const int16_t *idwt, int idwt_stride, int width, int height)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
Interface to Dirac Decoder/Encoder. 
static int coeff_unpack_golomb(GetBitContext *gb, int qfactor, int qoffset)
static av_cold int dirac_decode_init(AVCodecContext *avctx)
uint8_t quant[MAX_DWT_LEVELS][4]
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
static int dirac_get_se_golomb(GetBitContext *gb)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
DiracSlice * slice_params_buf
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory. 
static AVOnce dirac_arith_init
static void free_sequence_buffers(DiracContext *s)
static int get_bits_count(const GetBitContext *s)
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context. 
bitstream reader API header. 
static const uint8_t epel_weights[4][4][4]
static int decode_lowdelay_slice(AVCodecContext *avctx, void *arg)
Dirac Specification -> 13.5.2 Slices. 
void(* avg_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], int stride, int h)
static void pred_block_dc(DiracBlock *block, int stride, int x, int y)
av_cold int ff_dirac_golomb_reader_init(DiracGolombLUT **lut_ctx)
static int get_bits_left(GetBitContext *gb)
const int32_t ff_dirac_qoffset_intra_tab[120]
av_cold void ff_diracdsp_init(DiracDSPContext *c)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static int dirac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
void(* dirac_hpel_filter)(uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, const uint8_t *src, int stride, int width, int height)
static const uint16_t mask[17]
#define DIRAC_REF_MASK_GLOBAL
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
static int pred_sbsplit(uint8_t *sbsplit, int stride, int x, int y)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int add_frame(DiracFrame *framelist[], int maxframes, DiracFrame *frame)
static void pred_mv(DiracBlock *block, int stride, int x, int y, int ref)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
const uint8_t ff_dirac_default_qmat[7][4][4]
static int interpolate_refplane(DiracContext *s, DiracFrame *ref, int plane, int width, int height)
static int mc_subpel(DiracContext *s, DiracBlock *block, const uint8_t *src[5], int x, int y, int ref, int plane)
For block x,y, determine which of the hpel planes to do bilinear interpolation from and set src[] to ...
const char * name
Name of the codec implementation. 
DiracFrame * current_picture
int64_t max_pixels
The number of pixels per image to maximally accept. 
#define DIRAC_MAX_QUANT_INDEX
unsigned old_delta_quant
schroedinger older than 1.0.8 doesn't store quant delta if only one codebook exists in a band ...
static const uint8_t offset[127][2]
static void * av_mallocz_array(size_t nmemb, size_t size)
static int dirac_decode_data_unit(AVCodecContext *avctx, const uint8_t *buf, int size)
static char * split(char *message, char delim)
#define INTRA_DC_PRED(n, type)
Dirac Specification -> 13.3 intra_dc_prediction(band) 
static void init_planes(DiracContext *s)
static void decode_block_params(DiracContext *s, DiracArith arith[8], DiracBlock *block, int stride, int x, int y)
SubBand band[DWT_LEVELS][4]
enum AVPictureType pict_type
Picture type of the frame. 
int display_picture_number
picture number in display order 
#define CALC_PADDING(size, depth)
static int decode_hq_slice_row(AVCodecContext *avctx, void *arg, int jobnr, int threadnr)
void(* avg_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], int stride, int h)
static void block_mc(DiracContext *s, DiracBlock *block, uint16_t *mctmp, uint8_t *obmc_weight, int plane, int dstx, int dsty)
static DiracFrame * remove_frame(DiracFrame *framelist[], int picnum)
void ff_spatial_idwt_slice2(DWTContext *d, int y)
int width
picture width / height. 
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
static int dirac_unpack_prediction_parameters(DiracContext *s)
Unpack the motion compensation parameters Dirac Specification -> 11.2 Picture prediction data...
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries. 
av_cold void ff_dirac_golomb_reader_end(DiracGolombLUT **lut_ctx)
MpegvideoEncDSPContext mpvencdsp
static void mc_row(DiracContext *s, DiracBlock *block, uint16_t *mctmp, int plane, int dsty)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static void select_dsp_funcs(DiracContext *s, int width, int height, int xblen, int yblen)
uint8_t * edge_emu_buffer_base
struct DiracContext::@59 codeblock[MAX_DWT_LEVELS+1]
static void decode_component(DiracContext *s, int comp)
Dirac Specification -> [DIRAC_STD] 13.4.1 core_transform_data() 
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
static void init_obmc_weights(DiracContext *s, Plane *p, int by)
struct DiracContext::@61 highquality
static const float pred[4]
void(* add_dirac_obmc[3])(uint16_t *dst, const uint8_t *src, int stride, const uint8_t *obmc_weight, int yblen)
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading. 
static const int8_t mv[256][2]
static int get_buffer_with_edge(AVCodecContext *avctx, AVFrame *f, int flags)
static av_always_inline void decode_subband_internal(DiracContext *s, SubBand *b, int is_arith)
Dirac Specification -> 13.4.2 Non-skipped subbands. 
Libavcodec external API header. 
uint8_t * edge_emu_buffer[4]
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
const int ff_dirac_qoffset_inter_tab[122]
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext. 
void(* dirac_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int h)
main external API structure. 
DiracFrame all_frames[MAX_FRAMES]
static const float bands[]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame. 
Arithmetic decoder for Dirac. 
dirac_biweight_func biweight_dirac_pixels_tab[3]
#define MAX_DWT_LEVELS
The spec limits the number of wavelet decompositions to 4 for both level 1 (VC-2) and 128 (long-gop d...
static unsigned int get_bits1(GetBitContext *s)
static int decode_lowdelay(DiracContext *s)
Dirac Specification -> 13.5.1 low_delay_transform_data() 
static int dirac_get_arith_bit(DiracArith *c, int ctx)
enum AVColorSpace colorspace
YUV colorspace type. 
Rational number (pair of numerator and denominator). 
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic. 
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
dirac_biweight_func biweight_func
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits. 
static int decode_subband_arith(AVCodecContext *avctx, void *b)
static int weight(int i, int blen, int offset)
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields. 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
static int pred_block_mode(DiracBlock *block, int stride, int x, int y, int refmask)
DiracGolombLUT * reader_ctx
struct DiracContext::@60 lowdelay
#define MAX_REFERENCE_FRAMES
The spec limits this to 3 for frame coding, but in practice can be as high as 6. 
GLint GLenum GLboolean GLsizei stride
static int dirac_decode_picture_header(DiracContext *s)
Dirac Specification -> 11.1.1 Picture Header. 
common internal api header. 
static int ref[MAX_W *MAX_W]
static void decode_subband(DiracContext *s, GetBitContext *gb, int quant, int slice_x, int slice_y, int bits_end, SubBand *b1, SubBand *b2)
static int decode_subband_golomb(AVCodecContext *avctx, void *arg)
static int dirac_get_arith_int(DiracArith *c, int follow_ctx, int data_ctx)
static void init_obmc_weight_row(Plane *p, uint8_t *obmc_weight, int stride, int left, int right, int wy)
#define AVERROR_UNKNOWN
Unknown error, typically from an external library. 
Core video DSP helper functions. 
void(* put_dirac_pixels_tab[3][4])(uint8_t *dst, const uint8_t *src[5], int stride, int h)
dirac_pixels_tab[width][subpel] width is 2 for 32, 1 for 16, 0 for 8 subpel is 0 for fpel and hpel (o...
static int alloc_sequence_buffers(DiracContext *s)
void(* put_pixels_tab[4])(uint8_t *dst, const uint8_t *src[5], int stride, int h)
static void init_obmc_weight(Plane *p, uint8_t *obmc_weight, int stride, int left, int right, int top, int bottom)
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things. 
void(* dequant_subband[4])(uint8_t *src, uint8_t *dst, ptrdiff_t stride, const int qf, const int qs, int tot_v, int tot_h)
int(* execute2)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count)
The codec may call this to execute several independent things. 
void(* draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides)
static int ff_thread_once(char *control, void(*routine)(void))
void(* dirac_biweight_func)(uint8_t *dst, const uint8_t *src, int stride, int log2_denom, int weightd, int weights, int h)
int key_frame
1 -> keyframe, 0-> not 
static const double coeff[2][5]
static const uint8_t * align_get_bits(GetBitContext *s)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> dc
static void add_dc(uint16_t *dst, int dc, int stride, uint8_t *obmc_weight, int xblen, int yblen)
#define av_malloc_array(a, b)
uint8_t * hpel_base[3][4]
#define FFSWAP(type, a, b)
static unsigned get_interleaved_ue_golomb(GetBitContext *gb)
This structure stores compressed data. 
void(* put_signed_rect_clamped[3])(uint8_t *dst, int dst_stride, const uint8_t *src, int src_stride, int width, int height)
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later. 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
#define DIRAC_REF_MASK_REF1
DiracBlock->ref flags, if set then the block does MC from the given ref. 
static int dirac_unpack_block_motion_data(DiracContext *s)
Dirac Specification -> 
uint8_t obmc_weight[3][MAX_BLOCKSIZE *MAX_BLOCKSIZE]
int ff_spatial_idwt_init(DWTContext *d, DWTPlane *p, enum dwt_type type, int decomposition_count, int bit_depth)
av_cold void ff_dirac_init_arith_tables(void)