31 #define  UNCHECKED_BITSTREAM_READER 1 
   78 #define DNXHD_VLC_BITS 9 
   79 #define DNXHD_DC_VLC_BITS 7 
  114     if (cid != ctx->
cid) {
 
  185     int old_bit_depth = ctx->
bit_depth, bitdepth;
 
  186     uint64_t header_prefix;
 
  187     if (buf_size < 0x280) {
 
  189                "buffer too small (%d < 640).\n", buf_size);
 
  194     if (header_prefix == 0) {
 
  196                "unknown header 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
 
  197                buf[0], buf[1], buf[2], buf[3], buf[4]);
 
  205                "interlaced %d, cur field %d\n", buf[5] & 3, ctx->
cur_field);
 
  209     ctx->
mbaff = (buf[0x6] >> 5) & 1;
 
  210     ctx->
alpha = buf[0x7] & 1;
 
  211     ctx->
lla   = (buf[0x7] >> 1) & 1;
 
  218     switch(buf[0x21] >> 5) {
 
  219     case 1: bitdepth = 8; 
break;
 
  220     case 2: bitdepth = 10; 
break;
 
  221     case 3: bitdepth = 12; 
break;
 
  224                "Unknown bitdepth indicator (%d)\n", buf[0x21] >> 5);
 
  236                "Adaptive MB interlace flag in an unsupported profile.\n");
 
  238     ctx->
act = buf[0x2C] & 7;
 
  241                "Adaptive color transform in an unsupported profile.\n");
 
  243     ctx->
is_444 = (buf[0x2C] >> 6) & 1;
 
  248         } 
else if (bitdepth == 10) {
 
  257     } 
else if (bitdepth == 12) {
 
  260     } 
else if (bitdepth == 10) {
 
  311                    "mb height too big: %d\n", ctx->
mb_height);
 
  318                 "mb height too big: %d\n", ctx->
mb_height);
 
  324                "buffer too small (%d < %d).\n", buf_size, ctx->
data_offset);
 
  336         ff_dlog(ctx->
avctx, 
"mb scan index %d, pos %d: %"PRIu32
"\n",
 
  340                    "invalid mb scan index (%"PRIu32
" vs %u).\n",
 
  357     int i, j, index1, index2, 
len, 
flags;
 
  358     int level, component, sign;
 
  371             component     = 1 + (n & 1);
 
  380         component = (n >> 1) % 3;
 
  400         level = (
NEG_USR32(sign ^ level, len) ^ sign) - sign;
 
  401         row->
last_dc[component] += level * (1 << dc_shift);
 
  403     block[0] = row->
last_dc[component];
 
  411     while (index1 != eob_index) {
 
  412         level = ac_info[2*index1+0];
 
  413         flags = ac_info[2*index1+1];
 
  438         level += scale[i] >> 1;
 
  439         if (level_bias < 32 || weight_matrix[i] != level_bias)
 
  441         level >>= level_shift;
 
  443         block[j] = (level ^ sign) - sign;
 
  488     int dct_linesize_luma   = frame->
linesize[0];
 
  489     int dct_linesize_chroma = frame->
linesize[1];
 
  490     uint8_t *dest_y, *dest_u, *dest_v;
 
  491     int dct_y_offset, dct_x_offset;
 
  493     int interlaced_mb = 0;
 
  504             static int act_warned;
 
  508                        "ACT flag set, in violation of frame header.\n");
 
  510         } 
else if (row->
format == -1) {
 
  512         } 
else if (row->
format != act) {
 
  518         for (i = 0; i < 64; i++) {
 
  525     for (i = 0; i < 8 + 4 * ctx->
is_444; i++) {
 
  531         dct_linesize_luma   <<= 1;
 
  532         dct_linesize_chroma <<= 1;
 
  535     dest_y = frame->
data[0] + ((y * dct_linesize_luma)   << 4) + (x << (4 + 
shift1));
 
  536     dest_u = frame->
data[1] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->
is_444));
 
  537     dest_v = frame->
data[2] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->
is_444));
 
  545         dct_linesize_luma   <<= 1;
 
  546         dct_linesize_chroma <<= 1;
 
  549     dct_y_offset = interlaced_mb ? frame->
linesize[0] : (dct_linesize_luma << 3);
 
  550     dct_x_offset = 8 << 
shift1;
 
  555         ctx->
idsp.
idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, row->
blocks[5]);
 
  558             dct_y_offset = interlaced_mb ? frame->
linesize[1] : (dct_linesize_chroma << 3);
 
  568         ctx->
idsp.
idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, row->
blocks[7]);
 
  571             dct_y_offset = interlaced_mb ? frame->
linesize[1] : (dct_linesize_chroma << 3);
 
  575             ctx->
idsp.
idct_put(dest_u + dct_y_offset + dct_x_offset, dct_linesize_chroma, row->
blocks[9]);
 
  579             ctx->
idsp.
idct_put(dest_v + dct_y_offset + dct_x_offset, dct_linesize_chroma, row->
blocks[11]);
 
  587                             int rownb, 
int threadnb)
 
  598     for (x = 0; x < ctx->
mb_width; x++) {
 
  622     ff_dlog(avctx, 
"frame size %d\n", buf_size);
 
  663         goto decode_coding_unit;
 
  673         static int act_warned;
 
  688                        "Unsupported: variable ACT flag.\n");
 
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B 
static int dnxhd_decode_dct_block_8(const DNXHDContext *ctx, RowContext *row, int n)
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
static const char * format[]
This structure describes decoded (raw) audio or video data. 
ptrdiff_t const GLvoid * data
void(* clear_block)(int16_t *block)
int coded_width
Bitstream width / height, may be different from width/height e.g. 
int64_t cid
compression id 
static int dnxhd_get_profile(int cid)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
#define AV_LOG_WARNING
Something somehow does not look correct. 
const uint8_t * luma_weight
static int init_thread_copy(AVCodecContext *avctx)
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 av_cold int init(AVCodecContext *avctx)
static av_cold int dnxhd_decode_init_thread_copy(AVCodecContext *avctx)
av_cold void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx)
#define AV_PIX_FMT_GBRP10
const CIDEntry ff_dnxhd_cid_table[]
const uint16_t * run_codes
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format. 
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_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static av_cold int dnxhd_decode_close(AVCodecContext *avctx)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
static int dnxhd_decode_dct_block_12(const DNXHDContext *ctx, RowContext *row, int n)
const AVProfile ff_dnxhd_profiles[]
Multithreading support functions. 
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
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory. 
static av_always_inline int dnxhd_decode_dct_block(const DNXHDContext *ctx, RowContext *row, int n, int index_bits, int level_bias, int level_shift, int dc_shift)
int format
-1:not set yet 0:off=RGB 1:on=YUV 2:variable 
bitstream reader API header. 
#define AV_LOG_VERBOSE
Detailed information. 
int interlaced_frame
The content of the picture is interlaced. 
unsigned int coding_unit_size
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction. 
#define DNXHD_DC_VLC_BITS
#define AV_PIX_FMT_YUV422P12
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale. 
high precision timer, useful to profile code 
enum AVPixelFormat pix_fmt
static int first_field(const struct video_data *s)
const uint16_t * ac_codes
#define UPDATE_CACHE(name, gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
int ff_dnxhd_get_cid_table(int cid)
static const int shift1[6]
static int dnxhd_decode_row(AVCodecContext *avctx, void *data, int rownb, int threadnb)
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
int flags
AV_CODEC_FLAG_*. 
const char * name
Name of the codec implementation. 
#define AV_PIX_FMT_YUV444P10
#define FF_PROFILE_DNXHR_LB
static const uint8_t offset[127][2]
#define CLOSE_READER(name, gb)
static int dnxhd_decode_dct_block_10_444(const DNXHDContext *ctx, RowContext *row, int n)
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading. 
static av_always_inline uint64_t ff_dnxhd_parse_header_prefix(const uint8_t *buf)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) 
const uint8_t * chroma_weight
#define SKIP_BITS(name, gb, num)
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified. 
enum AVPictureType pict_type
Picture type of the frame. 
int width
picture width / height. 
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
#define LAST_SKIP_BITS(name, gb, num)
#define GET_VLC(code, name, gb, table, bits, max_depth)
If the vlc code is invalid and max_depth=1, then no bits will be removed. 
uint8_t idct_permutation[64]
IDCT input permutation. 
#define FF_PROFILE_DNXHR_HQ
static void error(const char *err)
static int dnxhd_decode_macroblock(const DNXHDContext *ctx, RowContext *row, AVFrame *frame, int x, int y)
#define SHOW_UBITS(name, gb, num)
#define FF_ARRAY_ELEMS(a)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading. 
Libavcodec external API header. 
int cur_field
current interlaced field 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs. 
static int dnxhd_decode_dct_block_10(const DNXHDContext *ctx, RowContext *row, int n)
main external API structure. 
#define OPEN_READER(name, gb)
static unsigned int get_bits1(GetBitContext *s)
enum AVColorSpace colorspace
YUV colorspace type. 
static av_always_inline uint64_t ff_dnxhd_check_header_prefix_hr(uint64_t prefix)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
#define GET_CACHE(name, gb)
const uint8_t ff_zigzag_direct[64]
#define FF_PROFILE_DNXHR_SQ
#define AV_PIX_FMT_GBRP12
#define flags(name, subs,...)
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV444P12
static int dnxhd_init_vlc(DNXHDContext *ctx, uint32_t cid, int bitdepth)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
uint32_t mb_scan_index[512]
#define DNXHD_VARIABLE
Indicate that a CIDEntry value must be read in the bitstream. 
#define SHOW_SBITS(name, gb, num)
#define FF_PROFILE_DNXHR_HQX
common internal api header. 
void(* idct_put)(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
block -> idct -> clip to unsigned 8 bit -> dest. 
int(* decode_dct_block)(const struct DNXHDContext *ctx, RowContext *row, int n)
#define FF_PROFILE_DNXHR_444
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
int top_field_first
If the content is interlaced, is top field displayed first. 
static int dnxhd_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
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. 
VLC_TYPE(* table)[2]
code, bits 
int key_frame
1 -> keyframe, 0-> not 
const CIDEntry * cid_table
static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, const uint8_t *buf, int buf_size, int first_field)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown. 
AVPixelFormat
Pixel format. 
This structure stores compressed data. 
void ff_free_vlc(VLC *vlc)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
static int dnxhd_decode_dct_block_12_444(const DNXHDContext *ctx, RowContext *row, int n)
static av_cold int dnxhd_decode_init(AVCodecContext *avctx)
void * av_mallocz_array(size_t nmemb, size_t size)