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