1/* 2 * VC3/DNxHD encoder structure definitions and prototypes 3 * Copyright (c) 2007 Baptiste Coudurier <baptiste dot coudurier at smartjog dot com> 4 * 5 * VC-3 encoder funded by the British Broadcasting Corporation 6 * 7 * This file is part of FFmpeg. 8 * 9 * FFmpeg is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * FFmpeg is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with FFmpeg; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 */ 23 24#ifndef AVCODEC_DNXHDENC_H 25#define AVCODEC_DNXHDENC_H 26 27#include <stdint.h> 28 29#include "mpegvideo.h" 30#include "dnxhddata.h" 31 32typedef struct RCCMPEntry { 33 uint16_t mb; 34 int value; 35} RCCMPEntry; 36 37typedef struct RCEntry { 38 int ssd; 39 int bits; 40} RCEntry; 41 42typedef struct DNXHDEncContext { 43 AVClass *class; 44 BlockDSPContext bdsp; 45 MpegEncContext m; ///< Used for quantization dsp functions 46 47 int cid; 48 const CIDEntry *cid_table; 49 uint8_t *msip; ///< Macroblock Scan Indexes Payload 50 uint32_t *slice_size; 51 uint32_t *slice_offs; 52 53 struct DNXHDEncContext *thread[MAX_THREADS]; 54 55 // Because our samples are either 8 or 16 bits for 8-bit and 10-bit 56 // encoding respectively, these refer either to bytes or to two-byte words. 57 unsigned dct_y_offset; 58 unsigned dct_uv_offset; 59 unsigned block_width_l2; 60 61 int interlaced; 62 int cur_field; 63 64 int nitris_compat; 65 unsigned min_padding; 66 67 DECLARE_ALIGNED(16, int16_t, blocks)[8][64]; 68 69 int (*qmatrix_c) [64]; 70 int (*qmatrix_l) [64]; 71 uint16_t (*qmatrix_l16)[2][64]; 72 uint16_t (*qmatrix_c16)[2][64]; 73 74 unsigned frame_bits; 75 uint8_t *src[3]; 76 77 uint32_t *vlc_codes; 78 uint8_t *vlc_bits; 79 uint16_t *run_codes; 80 uint8_t *run_bits; 81 82 /** Rate control */ 83 unsigned slice_bits; 84 unsigned qscale; 85 unsigned lambda; 86 87 uint16_t *mb_bits; 88 uint8_t *mb_qscale; 89 90 RCCMPEntry *mb_cmp; 91 RCEntry (*mb_rc)[8160]; 92 93 void (*get_pixels_8x4_sym)(int16_t * /* align 16 */, 94 const uint8_t *, ptrdiff_t); 95} DNXHDEncContext; 96 97void ff_dnxhdenc_init_x86(DNXHDEncContext *ctx); 98 99#endif /* AVCODEC_DNXHDENC_H */ 100