⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_bs.h

📁 audio-video-codecs.rar语音编解码器
💻 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 + -