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

📄 umc_vc1_spl_frame_constr.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            //FINTERPFLAG
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //reserved
            VC1GetNBits(pbs, bitOffset, 2, tempData);

            //DISPLAY_EXT
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            if(tempData)   //DISPLAY_EXT
            {
                //DISP_HORIZ_SIZE
                VC1GetNBits(pbs, bitOffset, 14,tempData);

                //DISP_VERT_SIZE
                VC1GetNBits(pbs, bitOffset, 14,tempData);

                //ASPECT_RATIO_FLAG
                VC1GetNBits(pbs, bitOffset, 1,tempData);

                if(tempData)    //ASPECT_RATIO_FLAG
                {
                    //ASPECT_RATIO
                    VC1GetNBits(pbs, bitOffset, 4,tempData);

                    if(tempData == 15)
                    {
                        //ASPECT_HORIZ_SIZE
                        VC1GetNBits(pbs, bitOffset, 8,
                            video_info->aspect_ratio_width);

                        //ASPECT_VERT_SIZE
                        VC1GetNBits(pbs, bitOffset, 8,
                            video_info->aspect_ratio_height);
                    }
                    else
                    {
                        video_info->aspect_ratio_width =
                            AspectRatioTable[tempData].width;
                        video_info->aspect_ratio_height =
                            AspectRatioTable[tempData].height;
                    }
                }

                //FRAMERATE_FLAG
                VC1GetNBits(pbs, bitOffset, 1,tempData);

                if(tempData)       //FRAMERATE_FLAG
                {
                    //FRAMERATEIND
                    VC1GetNBits(pbs, bitOffset, 1,tempData);

                    if(!tempData)      //FRAMERATEIND
                    {
                        //FRAMERATENR
                        VC1GetNBits(pbs, bitOffset, 8,tempData);
                        video_info->framerate = FrameRateNumerator[tempData];

                        //FRAMERATEDR
                        VC1GetNBits(pbs, bitOffset, 4,tempData);
                        video_info->framerate =
                            video_info->framerate/FrameRateDenomerator[tempData];
                    }
                    else
                    {
                        //FRAMERATEEXP
                        VC1GetNBits(pbs, bitOffset, 16,tempData);
                        video_info->framerate = (tempData + 1)/32.0;
                    }
                }
                    //COLOR_FORMAT_FLAG
                    VC1GetNBits(pbs, bitOffset, 1,tempData);

                    if(tempData)       //COLOR_FORMAT_FLAG
                    {
                        //COLOR_PRIM
                        VC1GetNBits(pbs, bitOffset, 8,tempData);

                        //TRANSFER_CHAR
                        VC1GetNBits(pbs, bitOffset, 8,tempData);

                        //MATRIX_COEF
                        VC1GetNBits(pbs, bitOffset, 8,tempData);
                    }
            }

            ////HRD_PARAM_FLAG
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            if(tempData)    //HRD_PARAM_FLAG
            {
                //HRD_NUM_LEAKY_BUCKETS
                VC1GetNBits(pbs, bitOffset, 5,tempData1);

                //BIT_RATE_EXPONENT
                VC1GetNBits(pbs, bitOffset, 4,tempData);

                //BUFFER_SIZE_EXPONENT
                VC1GetNBits(pbs, bitOffset, 4,tempData);

                //!!!!!!
                for(i=0; i < tempData1; i++)//HRD_NUM_LEAKY_BUCKETS
                {
                    //HRD_RATE[i]
                    VC1GetNBits(pbs, bitOffset, 16,tempData);

                    //HRD_BUFFER[i]
                    VC1GetNBits(pbs, bitOffset, 16,tempData);
                }
            }
        }
        else
        {
            //Simple/Main profile
            //LEVEL
            VC1GetNBits(pbs, bitOffset, 2, tempData);

            //FRMRTQ_POSTPROC
            VC1GetNBits(pbs, bitOffset, 3, video_info->framerate);

            //BITRTQ_POSTPROC
            VC1GetNBits(pbs, bitOffset, 5, video_info->bitrate);

            //LOOPFILTER
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //reserved
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //MULTIRES
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //reserved
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //FASTUVMC
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //EXTENDED_MV
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //DQUANT
            VC1GetNBits(pbs, bitOffset, 2, tempData);

            //VSTRANSFORM
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //reserved
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //OVERLAP
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //SYNCMARKER
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //RANGERED
            VC1GetNBits(pbs, bitOffset, 1, tempData);

            //MAXBFRAMES
            VC1GetNBits(pbs, bitOffset, 3, tempData);

            //QUANTIZER
            VC1GetNBits(pbs, bitOffset, 2, tempData);

            //FINTERPFLAG
            VC1GetNBits(pbs, bitOffset, 1, tempData);
        }

        *bufferSize = (video_info->clip_info.height + 128)*
            (video_info->clip_info.width + 128)
            + ((video_info->clip_info.height/2 + 64)*
            (video_info->clip_info.width/2 + 64))*2;

        video_info->bitrate = 1024 * video_info->bitrate;

        return umcSts;
    }

    Status vc1_frame_constructor_vc1::GetFirstSeqHeader(MediaData* in,
                                                        MediaData* out,
                                                        MediaDataEx::_MediaDataEx *stCodes,
                                                        Ipp32u splMode)
    {
        UMC::Status umcSts = UMC_ERR_NOT_ENOUGH_DATA;

        umcSts = GetData(in, out, stCodes,splMode);

        if(umcSts == UMC_OK && stCodes->values[0] != 0x0F010000)
        {
            umcSts = UMC_ERR_NOT_ENOUGH_DATA;
        }

        return umcSts;
    }

    //Status vc1_frame_constructor_vc1::GetPicType(MediaDataEx* data, Ipp32u& picType)
    //{
    //    Ipp32u Ipp32u*   pbs = (Ipp32u*)data->GetDataPointer();
    //    Ipp32s  bitOffset = 31;
    //    Ipp32u tempData = 0;

    //    if(data->GetExData()->values[0]>>24 == FrameHeader)
    //    {
    //        if(m_videoStreamInfo.interlace_type)
    //        {
    //            //Frame Coding mode
    //            //0 - progressive; 10 - Frame-interlace; 11 - Field-interlace
    //            ippiGetNBits(pbs,bitOffset,1,tempData); //FCM

    //            if(tempData)
    //            {
    //                ippiGetNBits(pbs,bitOffset,1,tempData); //FCM
    //                tempData = tempData + 2;
    //            }
    //        }


    //        if(tempData != FieldInterlace)
    //        {
    //            //picture type
    //            //110 - I picture; 0 - P picture; 10 - B picture; 1110 - BI picture; 1111 - skipped
    //            ippiGetNBits(pbs,bitOffset,1,tempData);
    //            if(tempData)
    //            {
    //                ippiGetNBits(pbs,bitOffset,1,tempData);

    //                if(tempData)
    //                {
    //                    ippiGetNBits(pbs,bitOffset,1,tempData);

    //                    if(tempData)
    //                    {
    //                        ippiGetNBits(pbs,bitOffset,1,tempData);

    //                        if(tempData)
    //                            picType = SKIPPED_FRAME; //1111
    //                        else
    //                            picType = BI_FRAME; //1110
    //                    }
    //                    else
    //                        picType = I_FRAME; //110
    //                }
    //                else
    //                    picType = B_FRAME; //10
    //            }
    //            else
    //                picType = P_FRAME; //0
    //        }
    //        else
    //        {
    //            //interlace field frame
    //            ippiGetNBits(pbs,bitOffset,3,tempData);
    //
    //            switch(tempData)
    //            {
    //            case 0:
    //                //000  - I,I
    //                picType = I_I_FIELD_FRAME;
    //                break;
    //            case 1:
    //                //001 - I,P
    //                picType = I_P_FIELD_FRAME;
    //                break;
    //            case 2:
    //                //010 - P,I
    //                picType = P_I_FIELD_FRAME;
    //                break;
    //            case 3:
    //                //011 - P,P
    //                picType = P_P_FIELD_FRAME;
    //                break;
    //            case 4:
    //                //100 - B,B
    //                picType = B_B_FIELD_FRAME;
    //                break;
    //            case 5:
    //                //101 - B,BI
    //                picType = B_BI_FIELD_FRAME;
    //                break;
    //            case 6:
    //                //110 - BI,B
    //                picType = BI_B_FIELD_FRAME;
    //                break;
    //            case 7:
    //                //111 - BI,BI
    //                picType = BI_BI_FIELD_FRAME;
    //                break;
    //            default:
    //                break;
    //            }
    //        }
    //    }
    //    else
    //      return UMC_ERR_INVALID_STREAM;

    //      return UMC_OK;
    //}
}

#endif //UMC_ENABLE_VC1_SPLITTER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -