📄 umc_h264_bs.h
字号:
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright (c) 2004 - 2007 Intel Corporation. All Rights Reserved.
//
#ifndef UMC_H264_BS_H__
#define UMC_H264_BS_H__
#include "umc_h264_pub.h"
#include "umc_base_bitstream.h"
namespace UMC_H264_ENCODER
{
template <class PixType, class CoeffsType> class H264EncoderThreadPrivateSlice;
// LossRecovery return status
typedef enum
{
BSLR_STATUS_ERROR, // Loss recovery did not detect lost packet, or couldn't recover.
BSLR_STATUS_OK, // Loss recovery detected lost packet and recovered
BSLR_STATUS_EOS // Loss recovery detected lost packet but end of
// stream encountered (i.e. no more packet avail.)
} BSLR_Status;
// ---------------------------------------------------------------------------
// CH264pBs : CBaseBitstream - Tromso bitstream class
// ---------------------------------------------------------------------------
template <class PixType, class CoeffsType>
class CH264pBs : public CBaseBitstream
{
private:
Ipp8u* m_pbsRBSPBase; // Points to beginning of previous "Raw Byte Sequence Payload"
Ipp32s num8x8Cshift2;
public:
CH264pBs(Ipp8u* const pb, const Ipp32u maxsize, Ipp32s chroma_format_idc, Status &plr);
CH264pBs(Status &plr);
~CH264pBs();
void Reset();
void ResetRBSP();
Ipp32u EndOfNAL(Ipp8u* const pout, Ipp8u const uIDC, NAL_Unit_Type const uUnitType, bool& startPicture); //Do we need to start new picture (field/frame)?
Status PutSliceHeader(const H264SliceHeader& slice_hdr, const H264PicParamSet& pic_parms,
const H264SeqParamSet& seq_parms, const EnumPicClass& ePictureClass,
const H264EncoderThreadPrivateSlice<PixType, CoeffsType> *curr_slice);
Status PutSeqParms(const H264SeqParamSet& seq_parms);
Status PutSeqExParms(const H264SeqParamSet& seq_parms);
Status PutPicParms(const H264PicParamSet & pic_parms, const H264SeqParamSet & seq_parms);
Status PutPicDelimiter(EnumPicCodType PicCodType);
void PutDQUANT(const Ipp32u quant, const Ipp32u quant_prev);
Status PutNumCoeffAndTrailingOnes(Ipp32u uVLCSelect, Ipp32s bChromaDC, Ipp32u uNumCoeff, Ipp32u uNumTrailingOnes, Ipp32u TrOneSigns);
Status PutLevels(CoeffsType* iLevels, Ipp32s NumLevels, Ipp32s TrailingOnes);
Status PutTotalZeros(Ipp32s TotalZeros, Ipp32s TotalCoeffs, Ipp32s bChromaDC);
Status PutRuns(Ipp8u* Runs, Ipp32s TotalZeros, Ipp32s TotalCoeffs);
Status MBFieldModeInfo_CABAC(Ipp32s mb_field,Ipp32s field_available_left,Ipp32s field_available_above);
Status MBTypeInfo_CABAC(EnumSliceType SliceType,Ipp32s mb_type_cur,MB_Type type_cur, MB_Type type_left,MB_Type type_above );
Status SubTypeInfo_CABAC(EnumSliceType SliceType,Ipp32s type);
Status ChromaIntraPredMode_CABAC(Ipp32s mode,Ipp32s left_p, Ipp32s top_p);
Status IntraPredMode_CABAC(Ipp32s mode);
Status MVD_CABAC(Ipp32s vector,Ipp32s left_p,Ipp32s top_p,Ipp32s contextbase);
Status DQuant_CABAC(Ipp32s deltaQP,Ipp32s left_c);
Status ResidualBlock_CABAC(T_Block_CABAC_Data<CoeffsType> *c_data, bool frame_mb);
Status PutScalingList(const Ipp8u* scalingList, Ipp32s sizeOfScalingList, bool& useDefaultScalingMatrixFlag);
};
//Fake bitstream only for bit calculations
template <class PixType, class CoeffsType>
class CH264pBsFake : public CH264pBs<PixType,CoeffsType>
{
public:
CH264pBsFake(Ipp8u* const pb, const Ipp32u maxsize, Ipp32s chroma_format_idc, Status &plr)
: CH264pBs<PixType,CoeffsType>(pb, maxsize, chroma_format_idc, plr)
{}
CH264pBsFake(Status &plr) : CH264pBs<PixType, CoeffsType>(plr) {};
void WriteBit_CABAC(bool code);
void WriteOutstandingZeroBit_CABAC();
void WriteOutstandingOneBit_CABAC();
void WriteOutstandingBit_CABAC(bool code);
void TerminateEncode_CABAC(void);
void PutBit(Ipp32u code);
void PutBits(Ipp32u code, Ipp32u length);
void PutVLCBits(const Ipp32u val, const Ipp32u len); // Writes one general VLC code to the bitstream
Ipp32u PutVLCCode(const Ipp32u val);// Writes one general VLC code to the bitstream without knowing the code length... Returns the length of the code written.
};
} //namespace UMC_H264_ENCODER
#endif // UMC_H264_BS_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -