11cc31e629e8132df390ae692873c847d1c2f62c0James Dong/* ------------------------------------------------------------------ 21cc31e629e8132df390ae692873c847d1c2f62c0James Dong * Copyright (C) 1998-2009 PacketVideo 31cc31e629e8132df390ae692873c847d1c2f62c0James Dong * 41cc31e629e8132df390ae692873c847d1c2f62c0James Dong * Licensed under the Apache License, Version 2.0 (the "License"); 51cc31e629e8132df390ae692873c847d1c2f62c0James Dong * you may not use this file except in compliance with the License. 61cc31e629e8132df390ae692873c847d1c2f62c0James Dong * You may obtain a copy of the License at 71cc31e629e8132df390ae692873c847d1c2f62c0James Dong * 81cc31e629e8132df390ae692873c847d1c2f62c0James Dong * http://www.apache.org/licenses/LICENSE-2.0 91cc31e629e8132df390ae692873c847d1c2f62c0James Dong * 101cc31e629e8132df390ae692873c847d1c2f62c0James Dong * Unless required by applicable law or agreed to in writing, software 111cc31e629e8132df390ae692873c847d1c2f62c0James Dong * distributed under the License is distributed on an "AS IS" BASIS, 121cc31e629e8132df390ae692873c847d1c2f62c0James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 131cc31e629e8132df390ae692873c847d1c2f62c0James Dong * express or implied. 141cc31e629e8132df390ae692873c847d1c2f62c0James Dong * See the License for the specific language governing permissions 151cc31e629e8132df390ae692873c847d1c2f62c0James Dong * and limitations under the License. 161cc31e629e8132df390ae692873c847d1c2f62c0James Dong * ------------------------------------------------------------------- 171cc31e629e8132df390ae692873c847d1c2f62c0James Dong */ 181cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 191cc31e629e8132df390ae692873c847d1c2f62c0James DongThis file contains application function interfaces to the AVC encoder library 201cc31e629e8132df390ae692873c847d1c2f62c0James Dongand necessary type defitionitions and enumerations. 211cc31e629e8132df390ae692873c847d1c2f62c0James Dong@publishedAll 221cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 231cc31e629e8132df390ae692873c847d1c2f62c0James Dong 241cc31e629e8132df390ae692873c847d1c2f62c0James Dong#ifndef AVCENC_INT_H_INCLUDED 251cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define AVCENC_INT_H_INCLUDED 261cc31e629e8132df390ae692873c847d1c2f62c0James Dong 271cc31e629e8132df390ae692873c847d1c2f62c0James Dong#ifndef AVCINT_COMMON_H_INCLUDED 281cc31e629e8132df390ae692873c847d1c2f62c0James Dong#include "avcint_common.h" 291cc31e629e8132df390ae692873c847d1c2f62c0James Dong#endif 301cc31e629e8132df390ae692873c847d1c2f62c0James Dong#ifndef AVCENC_API_H_INCLUDED 311cc31e629e8132df390ae692873c847d1c2f62c0James Dong#include "avcenc_api.h" 321cc31e629e8132df390ae692873c847d1c2f62c0James Dong#endif 331cc31e629e8132df390ae692873c847d1c2f62c0James Dong 341cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef float OsclFloat; 351cc31e629e8132df390ae692873c847d1c2f62c0James Dong 361cc31e629e8132df390ae692873c847d1c2f62c0James Dong/* Definition for the structures below */ 371cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define DEFAULT_ATTR 0 /* default memory attribute */ 381cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MAX_INPUT_FRAME 30 /* some arbitrary number, it can be much higher than this. */ 391cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MAX_REF_FRAME 16 /* max size of the RefPicList0 and RefPicList1 */ 401cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MAX_REF_PIC_LIST 33 411cc31e629e8132df390ae692873c847d1c2f62c0James Dong 421cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MIN_QP 0 431cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MAX_QP 51 441cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define SHIFT_QP 12 451cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define LAMBDA_ACCURACY_BITS 16 461cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define LAMBDA_FACTOR(lambda) ((int)((double)(1<<LAMBDA_ACCURACY_BITS)*lambda+0.5)) 471cc31e629e8132df390ae692873c847d1c2f62c0James Dong 481cc31e629e8132df390ae692873c847d1c2f62c0James Dong 491cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define DISABLE_THRESHOLDING 0 501cc31e629e8132df390ae692873c847d1c2f62c0James Dong// for better R-D performance 511cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define _LUMA_COEFF_COST_ 4 //!< threshold for luma coeffs 521cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define _CHROMA_COEFF_COST_ 4 //!< threshold for chroma coeffs, used to be 7 531cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define _LUMA_MB_COEFF_COST_ 5 //!< threshold for luma coeffs of inter Macroblocks 541cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define _LUMA_8x8_COEFF_COST_ 5 //!< threshold for luma coeffs of 8x8 Inter Partition 551cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MAX_VALUE 999999 //!< used for start value for some variables 561cc31e629e8132df390ae692873c847d1c2f62c0James Dong 571cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define WEIGHTED_COST(factor,bits) (((factor)*(bits))>>LAMBDA_ACCURACY_BITS) 581cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MV_COST(f,s,cx,cy,px,py) (WEIGHTED_COST(f,mvbits[((cx)<<(s))-px]+mvbits[((cy)<<(s))-py])) 591cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define MV_COST_S(f,cx,cy,px,py) (WEIGHTED_COST(f,mvbits[cx-px]+mvbits[cy-py])) 601cc31e629e8132df390ae692873c847d1c2f62c0James Dong 611cc31e629e8132df390ae692873c847d1c2f62c0James Dong/* for sub-pel search and interpolation */ 621cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define SUBPEL_PRED_BLK_SIZE 576 // 24x24 631cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define REF_CENTER 75 641cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H0Q 1 651cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V0Q_H2Q 2 661cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H2Q 3 671cc31e629e8132df390ae692873c847d1c2f62c0James Dong 681cc31e629e8132df390ae692873c847d1c2f62c0James Dong/* 691cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V3Q_H0Q 1 701cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V3Q_H1Q 2 711cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V0Q_H1Q 3 721cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V1Q_H1Q 4 731cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V1Q_H0Q 5 741cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V1Q_H3Q 6 751cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V0Q_H3Q 7 761cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V3Q_H3Q 8 771cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H3Q 9 781cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H0Q 10 791cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H1Q 11 801cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V2Q_H2Q 12 811cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V3Q_H2Q 13 821cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V0Q_H2Q 14 831cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define V1Q_H2Q 15 841cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 851cc31e629e8132df390ae692873c847d1c2f62c0James Dong 861cc31e629e8132df390ae692873c847d1c2f62c0James Dong 871cc31e629e8132df390ae692873c847d1c2f62c0James Dong#define DEFAULT_OVERRUN_BUFFER_SIZE 1000 881cc31e629e8132df390ae692873c847d1c2f62c0James Dong 891cc31e629e8132df390ae692873c847d1c2f62c0James Dong// associated with the above cost model 901cc31e629e8132df390ae692873c847d1c2f62c0James Dongconst uint8 COEFF_COST[2][16] = 911cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 921cc31e629e8132df390ae692873c847d1c2f62c0James Dong {3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 931cc31e629e8132df390ae692873c847d1c2f62c0James Dong {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9} 941cc31e629e8132df390ae692873c847d1c2f62c0James Dong}; 951cc31e629e8132df390ae692873c847d1c2f62c0James Dong 961cc31e629e8132df390ae692873c847d1c2f62c0James Dong 971cc31e629e8132df390ae692873c847d1c2f62c0James Dong 981cc31e629e8132df390ae692873c847d1c2f62c0James Dong//! convert from H.263 QP to H.264 quant given by: quant=pow(2,QP/6) 991cc31e629e8132df390ae692873c847d1c2f62c0James Dongconst int QP2QUANT[40] = 1001cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 1011cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1, 1, 1, 1, 2, 2, 2, 2, 1021cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3, 3, 3, 4, 4, 4, 5, 6, 1031cc31e629e8132df390ae692873c847d1c2f62c0James Dong 6, 7, 8, 9, 10, 11, 13, 14, 1041cc31e629e8132df390ae692873c847d1c2f62c0James Dong 16, 18, 20, 23, 25, 29, 32, 36, 1051cc31e629e8132df390ae692873c847d1c2f62c0James Dong 40, 45, 51, 57, 64, 72, 81, 91 1061cc31e629e8132df390ae692873c847d1c2f62c0James Dong}; 1071cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1081cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1091cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 1101cc31e629e8132df390ae692873c847d1c2f62c0James DongThis enumeration keeps track of the internal status of the encoder whether it is doing 1111cc31e629e8132df390ae692873c847d1c2f62c0James Dongsomething. The encoding flow follows the order in which these states are. 1121cc31e629e8132df390ae692873c847d1c2f62c0James Dong@publishedAll 1131cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 1141cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef enum 1151cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 1161cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_Initializing = 0, 1171cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_Encoding_SPS, 1181cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_Encoding_PPS, 1191cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_Analyzing_Frame, 1201cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_WaitingForBuffer, // pending state 1211cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_Encoding_Frame, 1221cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCEnc_State ; 1231cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1241cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 1251cc31e629e8132df390ae692873c847d1c2f62c0James DongBitstream structure contains bitstream related parameters such as the pointer 1261cc31e629e8132df390ae692873c847d1c2f62c0James Dongto the buffer, the current byte position and bit position. The content of the 1271cc31e629e8132df390ae692873c847d1c2f62c0James DongbitstreamBuffer will be in EBSP format as the emulation prevention codes are 1281cc31e629e8132df390ae692873c847d1c2f62c0James Dongautomatically inserted as the RBSP is recorded. 1291cc31e629e8132df390ae692873c847d1c2f62c0James Dong@publishedAll 1301cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 1311cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagEncBitstream 1321cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 1331cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *bitstreamBuffer; /* pointer to buffer memory */ 1341cc31e629e8132df390ae692873c847d1c2f62c0James Dong int buf_size; /* size of the buffer memory */ 1351cc31e629e8132df390ae692873c847d1c2f62c0James Dong int write_pos; /* next position to write to bitstreamBuffer */ 1361cc31e629e8132df390ae692873c847d1c2f62c0James Dong int count_zeros; /* count number of consecutive zero */ 1371cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint current_word; /* byte-swapped (MSB left) current word to write to buffer */ 1381cc31e629e8132df390ae692873c847d1c2f62c0James Dong int bit_left; /* number of bit left in current_word */ 1391cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *overrunBuffer; /* extra output buffer to prevent current skip due to output buffer overrun*/ 1401cc31e629e8132df390ae692873c847d1c2f62c0James Dong int oBSize; /* size of allocated overrun buffer */ 1411cc31e629e8132df390ae692873c847d1c2f62c0James Dong void *encvid; /* pointer to the main object */ 1421cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1431cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCEncBitstream; 1441cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1451cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 1461cc31e629e8132df390ae692873c847d1c2f62c0James DongThis structure is used for rate control purpose and other performance related control 1471cc31e629e8132df390ae692873c847d1c2f62c0James Dongvariables such as, RD cost, statistics, motion search stuffs, etc. 1481cc31e629e8132df390ae692873c847d1c2f62c0James Dongshould be in this structure. 1491cc31e629e8132df390ae692873c847d1c2f62c0James Dong@publishedAll 1501cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 1511cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1521cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1531cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagRDInfo 1541cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 1551cc31e629e8132df390ae692873c847d1c2f62c0James Dong int QP; 1561cc31e629e8132df390ae692873c847d1c2f62c0James Dong int actual_bits; 1571cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat mad; 1581cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat R_D; 1591cc31e629e8132df390ae692873c847d1c2f62c0James Dong} RDInfo; 1601cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1611cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagMultiPass 1621cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 1631cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* multipass rate control data */ 1641cc31e629e8132df390ae692873c847d1c2f62c0James Dong int target_bits; /* target bits for current frame, = rc->T */ 1651cc31e629e8132df390ae692873c847d1c2f62c0James Dong int actual_bits; /* actual bits for current frame obtained after encoding, = rc->Rc*/ 1661cc31e629e8132df390ae692873c847d1c2f62c0James Dong int QP; /* quantization level for current frame, = rc->Qc*/ 1671cc31e629e8132df390ae692873c847d1c2f62c0James Dong int prev_QP; /* quantization level for previous frame */ 1681cc31e629e8132df390ae692873c847d1c2f62c0James Dong int prev_prev_QP; /* quantization level for previous frame before last*/ 1691cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat mad; /* mad for current frame, = video->avgMAD*/ 1701cc31e629e8132df390ae692873c847d1c2f62c0James Dong int bitrate; /* bitrate for current frame */ 1711cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat framerate; /* framerate for current frame*/ 1721cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1731cc31e629e8132df390ae692873c847d1c2f62c0James Dong int nRe_Quantized; /* control variable for multipass encoding, */ 1741cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* 0 : first pass */ 1751cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* 1 : intermediate pass(quantization and VLC loop only) */ 1761cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* 2 : final pass(de-quantization, idct, etc) */ 1771cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* 3 : macroblock level rate control */ 1781cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1791cc31e629e8132df390ae692873c847d1c2f62c0James Dong int encoded_frames; /* counter for all encoded frames */ 1801cc31e629e8132df390ae692873c847d1c2f62c0James Dong int re_encoded_frames; /* counter for all multipass encoded frames*/ 1811cc31e629e8132df390ae692873c847d1c2f62c0James Dong int re_encoded_times; /* counter for all times of multipass frame encoding */ 1821cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1831cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* Multiple frame prediction*/ 1841cc31e629e8132df390ae692873c847d1c2f62c0James Dong RDInfo **pRDSamples; /* pRDSamples[30][32], 30->30fps, 32 -> 5 bit quantizer, 32 candidates*/ 1851cc31e629e8132df390ae692873c847d1c2f62c0James Dong int framePos; /* specific position in previous multiple frames*/ 1861cc31e629e8132df390ae692873c847d1c2f62c0James Dong int frameRange; /* number of overall previous multiple frames */ 1871cc31e629e8132df390ae692873c847d1c2f62c0James Dong int samplesPerFrame[30]; /* number of samples per frame, 30->30fps */ 1881cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1891cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* Bit allocation for scene change frames and high motion frames */ 1901cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat sum_mad; 1911cc31e629e8132df390ae692873c847d1c2f62c0James Dong int counter_BTsrc; /* BT = Bit Transfer, bit transfer from low motion frames or less complicatedly compressed frames */ 1921cc31e629e8132df390ae692873c847d1c2f62c0James Dong int counter_BTdst; /* BT = Bit Transfer, bit transfer to scene change frames or high motion frames or more complicatedly compressed frames */ 1931cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat sum_QP; 1941cc31e629e8132df390ae692873c847d1c2f62c0James Dong int diff_counter; /* diff_counter = -diff_counter_BTdst, or diff_counter_BTsrc */ 1951cc31e629e8132df390ae692873c847d1c2f62c0James Dong 1961cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* For target bitrate or framerate update */ 1971cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat target_bits_per_frame; /* = C = bitrate/framerate */ 1981cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat target_bits_per_frame_prev; /* previous C */ 1991cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat aver_mad; /* so-far average mad could replace sum_mad */ 2001cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat aver_mad_prev; /* previous average mad */ 2011cc31e629e8132df390ae692873c847d1c2f62c0James Dong int overlapped_win_size; /* transition period of time */ 2021cc31e629e8132df390ae692873c847d1c2f62c0James Dong int encoded_frames_prev; /* previous encoded_frames */ 2031cc31e629e8132df390ae692873c847d1c2f62c0James Dong} MultiPass; 2041cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2051cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2061cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagdataPointArray 2071cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 2081cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Qp; 2091cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rp; 2101cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat Mp; /* for MB-based RC */ 2111cc31e629e8132df390ae692873c847d1c2f62c0James Dong struct tagdataPointArray *next; 2121cc31e629e8132df390ae692873c847d1c2f62c0James Dong struct tagdataPointArray *prev; 2131cc31e629e8132df390ae692873c847d1c2f62c0James Dong} dataPointArray; 2141cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2151cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagAVCRateControl 2161cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 2171cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2181cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* these parameters are initialized by the users AVCEncParams */ 2191cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* bitrate-robustness tradeoff */ 2201cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint scdEnable; /* enable scene change detection */ 2211cc31e629e8132df390ae692873c847d1c2f62c0James Dong int idrPeriod; /* IDR period in number of frames */ 2221cc31e629e8132df390ae692873c847d1c2f62c0James Dong int intraMBRate; /* intra MB refresh rate per frame */ 2231cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint dpEnable; /* enable data partitioning */ 2241cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2251cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* quality-complexity tradeoff */ 2261cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint subPelEnable; /* enable quarter pel search */ 2271cc31e629e8132df390ae692873c847d1c2f62c0James Dong int mvRange; /* motion vector search range in +/- pixel */ 2281cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint subMBEnable; /* enable sub MB prediction mode (4x4, 4x8, 8x4) */ 2291cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint rdOptEnable; /* enable RD-opt mode selection */ 2301cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint twoPass; /* flag for 2 pass encoding ( for future )*/ 2311cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint bidirPred; /* bi-directional prediction for B-frame. */ 2321cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2331cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint rcEnable; /* enable rate control, '1' on, '0' const QP */ 2341cc31e629e8132df390ae692873c847d1c2f62c0James Dong int initQP; /* initial QP */ 2351cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2361cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* note the following 3 params are for HRD, these triplets can be a series 2371cc31e629e8132df390ae692873c847d1c2f62c0James Dong of triplets as the generalized HRD allows. SEI message must be generated in this case. */ 2381cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* We no longer have to differentiate between CBR and VBR. The users to the 2391cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVC encoder lib will do the mapping from CBR/VBR to these parameters. */ 2401cc31e629e8132df390ae692873c847d1c2f62c0James Dong int32 bitRate; /* target bit rate for the overall clip in bits/second*/ 2411cc31e629e8132df390ae692873c847d1c2f62c0James Dong int32 cpbSize; /* coded picture buffer size in bytes */ 2421cc31e629e8132df390ae692873c847d1c2f62c0James Dong int32 initDelayOffset; /* initial CBP removal delay in bits */ 2431cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2441cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat frame_rate; /* frame rate */ 2451cc31e629e8132df390ae692873c847d1c2f62c0James Dong int srcInterval; /* source frame rate in msec */ 2461cc31e629e8132df390ae692873c847d1c2f62c0James Dong int basicUnit; /* number of macroblocks per BU */ 2471cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2481cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* Then internal parameters for the operation */ 2491cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint first_frame; /* a flag for the first frame */ 2501cc31e629e8132df390ae692873c847d1c2f62c0James Dong int lambda_mf; /* for example */ 2511cc31e629e8132df390ae692873c847d1c2f62c0James Dong int totalSAD; /* SAD of current frame */ 2521cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2531cc31e629e8132df390ae692873c847d1c2f62c0James Dong /*******************************************/ 2541cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* this part comes from MPEG4 rate control */ 2551cc31e629e8132df390ae692873c847d1c2f62c0James Dong int alpha; /* weight for I frame */ 2561cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rs; /*bit rate for the sequence (or segment) e.g., 24000 bits/sec */ 2571cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rc; /*bits used for the current frame. It is the bit count obtained after encoding. */ 2581cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rp; /*bits to be removed from the buffer per picture. */ 2591cc31e629e8132df390ae692873c847d1c2f62c0James Dong /*? is this the average one, or just the bits coded for the previous frame */ 2601cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rps; /*bit to be removed from buffer per src frame */ 2611cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat Ts; /*number of seconds for the sequence (or segment). e.g., 10 sec */ 2621cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat Ep; 2631cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat Ec; /*mean absolute difference for the current frame after motion compensation.*/ 2641cc31e629e8132df390ae692873c847d1c2f62c0James Dong /*If the macroblock is intra coded, the original spatial pixel values are summed.*/ 2651cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Qc; /*quantization level used for the current frame. */ 2661cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Nr; /*number of P frames remaining for encoding.*/ 2671cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rr; /*number of bits remaining for encoding this sequence (or segment).*/ 2681cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Rr_Old; 2691cc31e629e8132df390ae692873c847d1c2f62c0James Dong int T; /*target bit to be used for the current frame.*/ 2701cc31e629e8132df390ae692873c847d1c2f62c0James Dong int S; /*number of bits used for encoding the previous frame.*/ 2711cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Hc; /*header and motion vector bits used in the current frame. It includes all the information except to the residual information.*/ 2721cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Hp; /*header and motion vector bits used in the previous frame. It includes all the information except to the residual information.*/ 2731cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Ql; /*quantization level used in the previous frame */ 2741cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Bs; /*buffer size e.g., R/2 */ 2751cc31e629e8132df390ae692873c847d1c2f62c0James Dong int B; /*current buffer level e.g., R/4 - start from the middle of the buffer */ 2761cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat X1; 2771cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat X2; 2781cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat X11; 2791cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat M; /*safe margin for the buffer */ 2801cc31e629e8132df390ae692873c847d1c2f62c0James Dong OsclFloat smTick; /*ratio of src versus enc frame rate */ 2811cc31e629e8132df390ae692873c847d1c2f62c0James Dong double remnant; /*remainder frame of src/enc frame for fine frame skipping */ 2821cc31e629e8132df390ae692873c847d1c2f62c0James Dong int timeIncRes; /* vol->timeIncrementResolution */ 2831cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2841cc31e629e8132df390ae692873c847d1c2f62c0James Dong dataPointArray *end; /*quantization levels for the past (20) frames */ 2851cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2861cc31e629e8132df390ae692873c847d1c2f62c0James Dong int frameNumber; /* ranging from 0 to 20 nodes*/ 2871cc31e629e8132df390ae692873c847d1c2f62c0James Dong int w; 2881cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Nr_Original; 2891cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Nr_Old, Nr_Old2; 2901cc31e629e8132df390ae692873c847d1c2f62c0James Dong int skip_next_frame; 2911cc31e629e8132df390ae692873c847d1c2f62c0James Dong int Qdep; /* smooth Q adjustment */ 2921cc31e629e8132df390ae692873c847d1c2f62c0James Dong int VBR_Enabled; 2931cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2941cc31e629e8132df390ae692873c847d1c2f62c0James Dong int totalFrameNumber; /* total coded frames, for debugging!!*/ 2951cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2961cc31e629e8132df390ae692873c847d1c2f62c0James Dong char oFirstTime; 2971cc31e629e8132df390ae692873c847d1c2f62c0James Dong 2981cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numFrameBits; /* keep track of number of bits of the current frame */ 2991cc31e629e8132df390ae692873c847d1c2f62c0James Dong int NumberofHeaderBits; 3001cc31e629e8132df390ae692873c847d1c2f62c0James Dong int NumberofTextureBits; 3011cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numMBHeaderBits; 3021cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numMBTextureBits; 3031cc31e629e8132df390ae692873c847d1c2f62c0James Dong double *MADofMB; 3041cc31e629e8132df390ae692873c847d1c2f62c0James Dong int32 bitsPerFrame; 3051cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3061cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* BX rate control, something like TMN8 rate control*/ 3071cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3081cc31e629e8132df390ae692873c847d1c2f62c0James Dong MultiPass *pMP; 3091cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3101cc31e629e8132df390ae692873c847d1c2f62c0James Dong int TMN_W; 3111cc31e629e8132df390ae692873c847d1c2f62c0James Dong int TMN_TH; 3121cc31e629e8132df390ae692873c847d1c2f62c0James Dong int VBV_fullness; 3131cc31e629e8132df390ae692873c847d1c2f62c0James Dong int max_BitVariance_num; /* the number of the maximum bit variance within the given buffer with the unit of 10% of bitrate/framerate*/ 3141cc31e629e8132df390ae692873c847d1c2f62c0James Dong int encoded_frames; /* counter for all encoded frames */ 3151cc31e629e8132df390ae692873c847d1c2f62c0James Dong int low_bound; /* bound for underflow detection, usually low_bound=-Bs/2, but could be changed in H.263 mode */ 3161cc31e629e8132df390ae692873c847d1c2f62c0James Dong int VBV_fullness_offset; /* offset of VBV_fullness, usually is zero, but can be changed in H.263 mode*/ 3171cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* End BX */ 3181cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3191cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCRateControl; 3201cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3211cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3221cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 3231cc31e629e8132df390ae692873c847d1c2f62c0James DongThis structure is for the motion vector information. */ 3241cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagMV 3251cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 3261cc31e629e8132df390ae692873c847d1c2f62c0James Dong int x; 3271cc31e629e8132df390ae692873c847d1c2f62c0James Dong int y; 3281cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint sad; 3291cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCMV; 3301cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3311cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 3321cc31e629e8132df390ae692873c847d1c2f62c0James DongThis structure contains function pointers for different platform dependent implementation of 3331cc31e629e8132df390ae692873c847d1c2f62c0James Dongfunctions. */ 3341cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagAVCEncFuncPtr 3351cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 3361cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3371cc31e629e8132df390ae692873c847d1c2f62c0James Dong int (*SAD_MB_HalfPel[4])(uint8*, uint8*, int, void *); 3381cc31e629e8132df390ae692873c847d1c2f62c0James Dong int (*SAD_Macroblock)(uint8 *ref, uint8 *blk, int dmin_lx, void *extra_info); 3391cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3401cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCEncFuncPtr; 3411cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3421cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 3431cc31e629e8132df390ae692873c847d1c2f62c0James DongThis structure contains information necessary for correct padding. 3441cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 3451cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagPadInfo 3461cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 3471cc31e629e8132df390ae692873c847d1c2f62c0James Dong int i; 3481cc31e629e8132df390ae692873c847d1c2f62c0James Dong int width; 3491cc31e629e8132df390ae692873c847d1c2f62c0James Dong int j; 3501cc31e629e8132df390ae692873c847d1c2f62c0James Dong int height; 3511cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCPadInfo; 3521cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3531cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3541cc31e629e8132df390ae692873c847d1c2f62c0James Dong#ifdef HTFM 3551cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagHTFM_Stat 3561cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 3571cc31e629e8132df390ae692873c847d1c2f62c0James Dong int abs_dif_mad_avg; 3581cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint countbreak; 3591cc31e629e8132df390ae692873c847d1c2f62c0James Dong int offsetArray[16]; 3601cc31e629e8132df390ae692873c847d1c2f62c0James Dong int offsetRef[16]; 3611cc31e629e8132df390ae692873c847d1c2f62c0James Dong} HTFM_Stat; 3621cc31e629e8132df390ae692873c847d1c2f62c0James Dong#endif 3631cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3641cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3651cc31e629e8132df390ae692873c847d1c2f62c0James Dong/** 3661cc31e629e8132df390ae692873c847d1c2f62c0James DongThis structure is the main object for AVC encoder library providing access to all 3671cc31e629e8132df390ae692873c847d1c2f62c0James Dongglobal variables. It is allocated at PVAVCInitEncoder and freed at PVAVCCleanUpEncoder. 3681cc31e629e8132df390ae692873c847d1c2f62c0James Dong@publishedAll 3691cc31e629e8132df390ae692873c847d1c2f62c0James Dong*/ 3701cc31e629e8132df390ae692873c847d1c2f62c0James Dongtypedef struct tagEncObject 3711cc31e629e8132df390ae692873c847d1c2f62c0James Dong{ 3721cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3731cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCCommonObj *common; 3741cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3751cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEncBitstream *bitstream; /* for current NAL */ 3761cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *overrunBuffer; /* extra output buffer to prevent current skip due to output buffer overrun*/ 3771cc31e629e8132df390ae692873c847d1c2f62c0James Dong int oBSize; /* size of allocated overrun buffer */ 3781cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3791cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* rate control */ 3801cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCRateControl *rateCtrl; /* pointer to the rate control structure */ 3811cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3821cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* encoding operation */ 3831cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEnc_State enc_state; /* encoding state */ 3841cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3851cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCFrameIO *currInput; /* pointer to the current input frame */ 3861cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3871cc31e629e8132df390ae692873c847d1c2f62c0James Dong int currSliceGroup; /* currently encoded slice group id */ 3881cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3891cc31e629e8132df390ae692873c847d1c2f62c0James Dong int level[24][16], run[24][16]; /* scratch memory */ 3901cc31e629e8132df390ae692873c847d1c2f62c0James Dong int leveldc[16], rundc[16]; /* for DC component */ 3911cc31e629e8132df390ae692873c847d1c2f62c0James Dong int levelcdc[16], runcdc[16]; /* for chroma DC component */ 3921cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numcoefcdc[2]; /* number of coefficient for chroma DC */ 3931cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numcoefdc; /* number of coefficients for DC component */ 3941cc31e629e8132df390ae692873c847d1c2f62c0James Dong 3951cc31e629e8132df390ae692873c847d1c2f62c0James Dong int qp_const; 3961cc31e629e8132df390ae692873c847d1c2f62c0James Dong int qp_const_c; 3971cc31e629e8132df390ae692873c847d1c2f62c0James Dong /********* intra prediction scratch memory **********************/ 3981cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 pred_i16[AVCNumI16PredMode][256]; /* save prediction for MB */ 3991cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 pred_i4[AVCNumI4PredMode][16]; /* save prediction for blk */ 4001cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 pred_ic[AVCNumIChromaMode][128]; /* for 2 chroma */ 4011cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4021cc31e629e8132df390ae692873c847d1c2f62c0James Dong int mostProbableI4Mode[16]; /* in raster scan order */ 4031cc31e629e8132df390ae692873c847d1c2f62c0James Dong /********* motion compensation related variables ****************/ 4041cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCMV *mot16x16; /* Saved motion vectors for 16x16 block*/ 4051cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCMV(*mot16x8)[2]; /* Saved motion vectors for 16x8 block*/ 4061cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCMV(*mot8x16)[2]; /* Saved motion vectors for 8x16 block*/ 4071cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCMV(*mot8x8)[4]; /* Saved motion vectors for 8x8 block*/ 4081cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4091cc31e629e8132df390ae692873c847d1c2f62c0James Dong /********* subpel position **************************************/ 4101cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint32 subpel_pred[SUBPEL_PRED_BLK_SIZE/*<<2*/]; /* all 16 sub-pel positions */ 4111cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *hpel_cand[9]; /* pointer to half-pel position */ 4121cc31e629e8132df390ae692873c847d1c2f62c0James Dong int best_hpel_pos; /* best position */ 4131cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 qpel_cand[8][24*16]; /* pointer to quarter-pel position */ 4141cc31e629e8132df390ae692873c847d1c2f62c0James Dong int best_qpel_pos; 4151cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *bilin_base[9][4]; /* pointer to 4 position at top left of bilinear quarter-pel */ 4161cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4171cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* need for intra refresh rate */ 4181cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *intraSearch; /* Intra Array for MBs to be intra searched */ 4191cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint firstIntraRefreshMBIndx; /* keep track for intra refresh */ 4201cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4211cc31e629e8132df390ae692873c847d1c2f62c0James Dong int i4_sad; /* temporary for i4 mode SAD */ 4221cc31e629e8132df390ae692873c847d1c2f62c0James Dong int *min_cost; /* Minimum cost for the all MBs */ 4231cc31e629e8132df390ae692873c847d1c2f62c0James Dong int lambda_mode; /* Lagrange parameter for mode selection */ 4241cc31e629e8132df390ae692873c847d1c2f62c0James Dong int lambda_motion; /* Lagrange parameter for MV selection */ 4251cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4261cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *mvbits_array; /* Table for bits spent in the cost funciton */ 4271cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 *mvbits; /* An offset to the above array. */ 4281cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4291cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* to speedup the SAD calculation */ 4301cc31e629e8132df390ae692873c847d1c2f62c0James Dong void *sad_extra_info; 4311cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint8 currYMB[256]; /* interleaved current macroblock in HTFM order */ 4321cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4331cc31e629e8132df390ae692873c847d1c2f62c0James Dong#ifdef HTFM 4341cc31e629e8132df390ae692873c847d1c2f62c0James Dong int nrmlz_th[48]; /* Threshold for fast SAD calculation using HTFM */ 4351cc31e629e8132df390ae692873c847d1c2f62c0James Dong HTFM_Stat htfm_stat; /* For statistics collection */ 4361cc31e629e8132df390ae692873c847d1c2f62c0James Dong#endif 4371cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4381cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* statistics */ 4391cc31e629e8132df390ae692873c847d1c2f62c0James Dong int numIntraMB; /* keep track of number of intra MB */ 4401cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4411cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* encoding complexity control */ 4421cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint fullsearch_enable; /* flag to enable full-pel full-search */ 4431cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4441cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* misc.*/ 4451cc31e629e8132df390ae692873c847d1c2f62c0James Dong bool outOfBandParamSet; /* flag to enable out-of-band param set */ 4461cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4471cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCSeqParamSet extSPS; /* for external SPS */ 4481cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCPicParamSet extPPS; /* for external PPS */ 4491cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4501cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* time control */ 4511cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint32 prevFrameNum; /* previous frame number starting from modTimeRef */ 4521cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint32 modTimeRef; /* Reference modTime update every I-Vop*/ 4531cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint32 wrapModTime; /* Offset to modTime Ref, rarely used */ 4541cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4551cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint prevProcFrameNum; /* previously processed frame number, could be skipped */ 4561cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint prevCodedFrameNum; /* previously encoded frame number */ 4571cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* POC related variables */ 4581cc31e629e8132df390ae692873c847d1c2f62c0James Dong uint32 dispOrdPOCRef; /* reference POC is displayer order unit. */ 4591cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4601cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* Function pointers */ 4611cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCEncFuncPtr *functionPointer; /* store pointers to platform specific functions */ 4621cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4631cc31e629e8132df390ae692873c847d1c2f62c0James Dong /* Application control data */ 4641cc31e629e8132df390ae692873c847d1c2f62c0James Dong AVCHandle *avcHandle; 4651cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4661cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4671cc31e629e8132df390ae692873c847d1c2f62c0James Dong} AVCEncObject; 4681cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4691cc31e629e8132df390ae692873c847d1c2f62c0James Dong 4701cc31e629e8132df390ae692873c847d1c2f62c0James Dong#endif /*AVCENC_INT_H_INCLUDED*/ 4711cc31e629e8132df390ae692873c847d1c2f62c0James Dong 472