当前位置: 首页>>代码示例>>C++>>正文


C++ CGolombBuffer类代码示例

本文整理汇总了C++中CGolombBuffer的典型用法代码示例。如果您正苦于以下问题:C++ CGolombBuffer类的具体用法?C++ CGolombBuffer怎么用?C++ CGolombBuffer使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了CGolombBuffer类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ParsePage

HRESULT CDVBSub::ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE>& pPage)
{
	HRESULT		hr		= S_OK;
	WORD		wEnd	= (WORD)gb.GetPos() + wSegLength;
	int			nPos	= 0;
	
	pPage.Attach (DNew DVB_PAGE());
	pPage->PageTimeOut			= gb.ReadByte();
	pPage->PageVersionNumber	= (BYTE)gb.BitRead(4);
	pPage->PageState			= (BYTE)gb.BitRead(2);
	pPage->RegionCount			= 0;
	gb.BitRead(2);	// Reserved
	while (gb.GetPos() < wEnd)
	{
		if (nPos < MAX_REGIONS)
		{
			pPage->Regions[nPos].Id			= gb.ReadByte();
			gb.ReadByte();	// Reserved
			pPage->Regions[nPos].HorizAddr	= gb.ReadShort();
			pPage->Regions[nPos].VertAddr	= gb.ReadShort();
			pPage->RegionCount++;
		}
		nPos++;
	}

	return S_OK;
}
开发者ID:Fluffiest,项目名称:splayer,代码行数:27,代码来源:DVBSub.cpp

示例2: CheckNoLog

HRESULT CMpeg2DataParser::ParsePAT()
{
	HRESULT					hr;
	CComPtr<ISectionList>	pSectionList;
	DWORD					dwLength;
	PSECTION				data;
	WORD					wTSID;
	WORD					wSectionLength;

	CheckNoLog (m_pData->GetSection (PID_PAT, SI_PAT, &m_Filter, 5000, &pSectionList));
	CheckNoLog (pSectionList->GetSectionData (0, &dwLength, &data));

	CGolombBuffer	gb ((BYTE*)data, dwLength);

	// program_association_section()
	CheckNoLog (ParseSIHeader (gb, SI_PAT, wSectionLength, wTSID));
	while (gb.GetSize() - gb.GetPos() > 4) {
		WORD program_number = gb.BitRead(16);			// program_number
		gb.BitRead(3);									// reserved
		if (program_number==0) {
			gb.BitRead(13);    // network_PID
		} else {
			WORD program_map_PID = gb.BitRead(13);			// program_map_PID
			if (Channels.Lookup(program_number)) {
				Channels [program_number].SetPMT (program_map_PID);
				ParsePMT (Channels [program_number]);
			}
		}
	}

	return S_OK;
}
开发者ID:Samangan,项目名称:mpc-hc,代码行数:32,代码来源:Mpeg2SectionData.cpp

示例3: ParseObject

HRESULT CDVBSub::ParseObject(CGolombBuffer& gb, WORD wSegLength)
{
    HRESULT hr = E_FAIL;

    if (m_pCurrentPage && wSegLength > 2) {
        CompositionObject* pObject = DNew CompositionObject();
        BYTE object_coding_method;

        pObject->m_object_id_ref  = gb.ReadShort();
        pObject->m_version_number = (BYTE)gb.BitRead(4);

        object_coding_method = (BYTE)gb.BitRead(2); // object_coding_method
        gb.BitRead(1);  // non_modifying_colour_flag
        gb.BitRead(1);  // reserved

        if (object_coding_method == 0x00) {
            pObject->SetRLEData(gb.GetBufferPos(), wSegLength - 3, wSegLength - 3);
            gb.SkipBytes(wSegLength - 3);
            m_pCurrentPage->Objects.AddTail(pObject);
            hr = S_OK;
        } else {
            delete pObject;
            hr = E_NOTIMPL;
        }
    }


    return hr;
}
开发者ID:finalpatch,项目名称:mpc-hc,代码行数:29,代码来源:DVBSub.cpp

示例4: ParsePage

HRESULT CDVBSub::ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE>& pPage)
{
    size_t nExpectedSize = 2;
    size_t nEnd = gb.GetPos() + wSegLength;

    pPage = CAutoPtr<DVB_PAGE>(DEBUG_NEW DVB_PAGE());

    pPage->pageTimeOut = gb.ReadByte();
    pPage->pageVersionNumber = (BYTE)gb.BitRead(4);
    pPage->pageState = (BYTE)gb.BitRead(2);
    gb.BitRead(2);  // Reserved
    while (gb.GetPos() < nEnd) {
        nExpectedSize += 6;
        DVB_REGION_POS regionPos;
        regionPos.id = gb.ReadByte();
        gb.ReadByte();  // Reserved
        regionPos.horizAddr = gb.ReadShort();
        regionPos.vertAddr = gb.ReadShort();
        pPage->regionsPos.AddTail(regionPos);
    }

    return (wSegLength == nExpectedSize) ? S_OK : E_UNEXPECTED;
}
开发者ID:chichalito,项目名称:mpc-hc,代码行数:23,代码来源:DVBSub.cpp

示例5:

HRESULT CMpeg2DataParser::ParseSIHeader(CGolombBuffer& gb, DVB_SI SIType, WORD& wSectionLength, WORD& wTSID)
{
	if (gb.BitRead(8) != SIType) {
		return ERROR_INVALID_DATA;    // table_id
	}
	gb.BitRead(1);														// section_syntax_indicator
	gb.BitRead(1);														// reserved_future_use
	gb.BitRead(2);														// reserved
	wSectionLength = gb.BitRead(12);									// section_length
	wTSID = gb.BitRead(16);												// transport_stream_id
	gb.BitRead(2);														// reserved
	gb.BitRead(5);														// version_number
	gb.BitRead(1);														// current_next_indicator
	gb.BitRead(8);														// section_number
	gb.BitRead(8);														// last_section_number

	return S_OK;
}
开发者ID:Samangan,项目名称:mpc-hc,代码行数:18,代码来源:Mpeg2SectionData.cpp

示例6: ParseDisplay

HRESULT CDVBSub::ParseDisplay(CGolombBuffer& gb, WORD wSegLength)
{
    m_Display.version_number = (BYTE)gb.BitRead(4);
    m_Display.display_window_flag = (BYTE)gb.BitRead(1);
    gb.BitRead(3);  // reserved
    m_Display.width = gb.ReadShort();
    m_Display.height = gb.ReadShort();
    if (m_Display.display_window_flag) {
        m_Display.horizontal_position_minimun = gb.ReadShort();
        m_Display.horizontal_position_maximum = gb.ReadShort();
        m_Display.vertical_position_minimun = gb.ReadShort();
        m_Display.vertical_position_maximum = gb.ReadShort();
    }

    return S_OK;
}
开发者ID:finalpatch,项目名称:mpc-hc,代码行数:16,代码来源:DVBSub.cpp

示例7: while

void CompositionObject::Dvb8PixelsCodeString(SubPicDesc& spd, CGolombBuffer& gb, SHORT& nX, SHORT& nY)
{
    BYTE			bTemp;
    BYTE			nPaletteIndex = 0;
    SHORT			nCount;
    bool			bQuit	= false;

    while(!bQuit && !gb.IsEOF())
    {
        nCount			= 0;
        nPaletteIndex	= 0;
        bTemp			= gb.ReadByte();
        if(bTemp != 0)
        {
            nPaletteIndex = bTemp;
            nCount		  = 1;
        }
        else
        {
            if(gb.BitRead(1) == 0)								// switch_1
            {
                nCount = (SHORT)gb.BitRead(7);					// run_length_1-127
                if(nCount == 0)
                    bQuit = true;
            }
            else
            {
                nCount			= (SHORT)gb.BitRead(7);			// run_length_3-127
                nPaletteIndex	= gb.ReadByte();
            }
        }

        if(nX + nCount > m_width)
        {
            ASSERT(FALSE);
            break;
        }

        if(nCount > 0)
        {
            FillSolidRect(spd, nX, nY, nCount, 1, m_Colors[nPaletteIndex]);
            nX += nCount;
        }
    }

    gb.BitByteAlign();
}
开发者ID:AlexsandroAG,项目名称:vsfiltermod,代码行数:47,代码来源:CompositionObject.cpp

示例8: ParseDisplay

HRESULT CDVBSub::ParseDisplay(CGolombBuffer& gb, WORD wSegLength)
{
    int nExpectedSize = 5;

    m_displayInfo.version_number = (BYTE)gb.BitRead(4);
    m_displayInfo.display_window_flag = (BYTE)gb.BitRead(1);
    gb.BitRead(3);  // reserved
    m_displayInfo.width = gb.ReadShort() + 1;
    m_displayInfo.height = gb.ReadShort() + 1;
    if (m_displayInfo.display_window_flag) {
        nExpectedSize += 8;
        m_displayInfo.horizontal_position_minimun = gb.ReadShort();
        m_displayInfo.horizontal_position_maximum = gb.ReadShort();
        m_displayInfo.vertical_position_minimun = gb.ReadShort();
        m_displayInfo.vertical_position_maximum = gb.ReadShort();
    }

    return (wSegLength == nExpectedSize) ? S_OK : E_UNEXPECTED;
}
开发者ID:chichalito,项目名称:mpc-hc,代码行数:19,代码来源:DVBSub.cpp

示例9: DvbRenderField

void CompositionObject::DvbRenderField(SubPicDesc& spd, CGolombBuffer& gb, SHORT nXStart, SHORT nYStart, SHORT nLength)
{
    //FillSolidRect (spd, 0,  0, 300, 10, 0xFFFF0000);	// Red opaque
    //FillSolidRect (spd, 0, 10, 300, 10, 0xCC00FF00);	// Green 80%
    //FillSolidRect (spd, 0, 20, 300, 10, 0x100000FF);	// Blue 60%
    //return;
    SHORT	nX		= nXStart;
    SHORT	nY		= nYStart;
    INT64	nEnd	= gb.GetPos() + nLength;
    while(gb.GetPos() < nEnd)
    {
        BYTE	bType	= gb.ReadByte();
        switch(bType)
        {
        case 0x10 :
            Dvb2PixelsCodeString(spd, gb, nX, nY);
            break;
        case 0x11 :
            Dvb4PixelsCodeString(spd, gb, nX, nY);
            break;
        case 0x12 :
            Dvb8PixelsCodeString(spd, gb, nX, nY);
            break;
        case 0x20 :
            gb.SkipBytes(2);
            break;
        case 0x21 :
            gb.SkipBytes(4);
            break;
        case 0x22 :
            gb.SkipBytes(16);
            break;
        case 0xF0 :
            nX  = nXStart;
            nY += 2;
            break;
        default :
            ASSERT(FALSE);
            break;
        }
    }
}
开发者ID:AlexsandroAG,项目名称:vsfiltermod,代码行数:42,代码来源:CompositionObject.cpp

示例10: ParseObject

HRESULT CDVBSub::ParseObject(CGolombBuffer& gb, WORD wSegLength)
{
    HRESULT hr = E_POINTER;

    if (m_pCurrentPage) {
        size_t nExpectedSize = 3;
        size_t nEnd = gb.GetPos() + wSegLength;

        short id = gb.ReadShort();
        POSITION posObject = FindObject(m_pCurrentPage, id);
        if (!posObject) {
            posObject = m_pCurrentPage->objects.AddTail(CAutoPtr<CompositionObject>(DEBUG_NEW CompositionObject()));
        }
        const auto& pObject = m_pCurrentPage->objects.GetAt(posObject);

        pObject->m_object_id_ref  = id;
        pObject->m_version_number = (BYTE)gb.BitRead(4);

        BYTE object_coding_method = (BYTE)gb.BitRead(2); // object_coding_method
        gb.BitRead(1);  // non_modifying_colour_flag
        gb.BitRead(1);  // reserved

        if (object_coding_method == 0x00) {
            pObject->SetRLEData(gb.GetBufferPos(), wSegLength - nExpectedSize, wSegLength - nExpectedSize);
            gb.SkipBytes(wSegLength - 3);

            hr = (wSegLength >= nExpectedSize) ? S_OK : E_UNEXPECTED;
        } else {
            TRACE_DVB(_T("DVB - Text subtitles are currently not supported\n"));
            m_pCurrentPage->objects.RemoveTail();
            hr = E_NOTIMPL;
        }
    }

    return hr;
}
开发者ID:chichalito,项目名称:mpc-hc,代码行数:36,代码来源:DVBSub.cpp

示例11: HrdParameters

int HrdParameters(CGolombBuffer& gb)
{
    UINT64 cnt = gb.UExpGolombRead();	// cpb_cnt_minus1
    if (cnt > 32U) {
        return -1;
    }
    gb.BitRead(4);							// bit_rate_scale
    gb.BitRead(4);							// cpb_size_scale

    for (unsigned int i = 0; i <= cnt; i++ ) {
        gb.UExpGolombRead();				// bit_rate_value_minus1
        gb.UExpGolombRead();				// cpb_size_value_minus1
        gb.BitRead(1);						// cbr_flag
    }

    gb.BitRead(5);							// initial_cpb_removal_delay_length_minus1
    gb.BitRead(5);							// cpb_removal_delay_length_minus1
    gb.BitRead(5);							// dpb_output_delay_length_minus1
    gb.BitRead(5);							// time_offset_length

    return 0;
}
开发者ID:WinnerSoftLab,项目名称:WinnerMediaPlayer,代码行数:22,代码来源:VideoParser.cpp

示例12: ParseClut

HRESULT CDVBSub::ParseClut(CGolombBuffer& gb, WORD wSegLength)
{
    HRESULT hr = E_FAIL;
    int nEnd = gb.GetPos() + wSegLength;

    if (m_pCurrentPage && wSegLength > 2) {
        BYTE id = gb.ReadByte();
        DVB_CLUT* pClut = FindClut(m_pCurrentPage, id);

        bool bIsNewClut = (pClut == nullptr);
        if (bIsNewClut) {
            pClut = DEBUG_NEW DVB_CLUT();
        }

        if (pClut) {
            pClut->id = id;
            pClut->version_number = (BYTE)gb.BitRead(4);
            gb.BitRead(4);  // Reserved

            pClut->size = 0;
            while (gb.GetPos() < nEnd) {
                pClut->palette[pClut->size].entry_id = gb.ReadByte();

                BYTE _2_bit   = (BYTE)gb.BitRead(1);
                BYTE _4_bit   = (BYTE)gb.BitRead(1);
                BYTE _8_bit   = (BYTE)gb.BitRead(1);
                UNREFERENCED_PARAMETER(_2_bit);
                UNREFERENCED_PARAMETER(_4_bit);
                UNREFERENCED_PARAMETER(_8_bit);
                gb.BitRead(4);  // Reserved

                if (gb.BitRead(1)) {
                    pClut->palette[pClut->size].Y  = gb.ReadByte();
                    pClut->palette[pClut->size].Cr = gb.ReadByte();
                    pClut->palette[pClut->size].Cb = gb.ReadByte();
                    pClut->palette[pClut->size].T  = 0xff - gb.ReadByte();
                } else {
                    pClut->palette[pClut->size].Y  = (BYTE)gb.BitRead(6) << 2;
                    pClut->palette[pClut->size].Cr = (BYTE)gb.BitRead(4) << 4;
                    pClut->palette[pClut->size].Cb = (BYTE)gb.BitRead(4) << 4;
                    pClut->palette[pClut->size].T  = 0xff - ((BYTE)gb.BitRead(2) << 6);
                }
                if (!pClut->palette[pClut->size].Y) {
                    pClut->palette[pClut->size].Cr = 0;
                    pClut->palette[pClut->size].Cb = 0;
                    pClut->palette[pClut->size].T  = 0;
                }

                pClut->size++;
            }

            if (bIsNewClut) {
                m_pCurrentPage->CLUTs.AddTail(pClut);
            }

            hr = S_OK;
        } else {
            hr = E_OUTOFMEMORY;
        }
    }

    return hr;
}
开发者ID:anxocruel,项目名称:mpc-hc,代码行数:63,代码来源:DVBSub.cpp

示例13: ParseClut

HRESULT CDVBSub::ParseClut(CGolombBuffer& gb, WORD wSegLength)
{
    HRESULT hr = S_OK;
    int nEnd = gb.GetPos() + wSegLength;
    CDVBSub::DVB_CLUT* pClut;

    pClut = FindClut(m_pCurrentPage, gb.ReadByte());
    //  ASSERT (pClut != NULL);
    if (pClut != NULL) {
        pClut->version_number = (BYTE)gb.BitRead(4);
        gb.BitRead(4);  // Reserved

        pClut->Size = 0;
        while (gb.GetPos() < nEnd) {
            BYTE entry_id = gb.ReadByte();
            BYTE _2_bit   = (BYTE)gb.BitRead(1);
            BYTE _4_bit   = (BYTE)gb.BitRead(1);
            BYTE _8_bit   = (BYTE)gb.BitRead(1);
            UNREFERENCED_PARAMETER(_2_bit);
            UNREFERENCED_PARAMETER(_4_bit);
            UNREFERENCED_PARAMETER(_8_bit);
            gb.BitRead(4);  // Reserved

            pClut->Palette[entry_id].entry_id = entry_id;
            if (gb.BitRead(1)) {
                pClut->Palette[entry_id].Y  = gb.ReadByte();
                pClut->Palette[entry_id].Cr = gb.ReadByte();
                pClut->Palette[entry_id].Cb = gb.ReadByte();
                pClut->Palette[entry_id].T  = 0xff - gb.ReadByte();
            } else {
                pClut->Palette[entry_id].Y  = (BYTE)gb.BitRead(6) << 2;
                pClut->Palette[entry_id].Cr = (BYTE)gb.BitRead(4) << 4;
                pClut->Palette[entry_id].Cb = (BYTE)gb.BitRead(4) << 4;
                pClut->Palette[entry_id].T  = 0xff - ((BYTE)gb.BitRead(2) << 6);
            }
            if (!pClut->Palette[entry_id].Y) {
                pClut->Palette[entry_id].Cr = 0;
                pClut->Palette[entry_id].Cb = 0;
                pClut->Palette[entry_id].T = 0;
            }

            if (pClut->Size <= entry_id) {
                pClut->Size = entry_id + 1;
            }
        }
    }

    return hr;
}
开发者ID:finalpatch,项目名称:mpc-hc,代码行数:49,代码来源:DVBSub.cpp

示例14: ParseRegion

HRESULT CDVBSub::ParseRegion(CGolombBuffer& gb, WORD wSegLength)
{
    int nEnd = gb.GetPos() + wSegLength;
    CDVBSub::DVB_REGION* pRegion;
    CDVBSub::DVB_REGION DummyRegion;

    pRegion = FindRegion(m_pCurrentPage, gb.ReadByte());

    if (pRegion == NULL) {
        pRegion = &DummyRegion;
    }

    if (pRegion != NULL) {
        pRegion->version_number = (BYTE)gb.BitRead(4);
        pRegion->fill_flag = (BYTE)gb.BitRead(1);
        gb.BitRead(3);  // Reserved
        pRegion->width  = gb.ReadShort();
        pRegion->height = gb.ReadShort();
        pRegion->level_of_compatibility = (BYTE)gb.BitRead(3);
        pRegion->depth = (BYTE)gb.BitRead(3);
        gb.BitRead(2);  // Reserved
        pRegion->CLUT_id = gb.ReadByte();
        pRegion->_8_bit_pixel_code = gb.ReadByte();
        pRegion->_4_bit_pixel_code = (BYTE)gb.BitRead(4);
        pRegion->_2_bit_pixel_code = (BYTE)gb.BitRead(2);
        gb.BitRead(2);  // Reserved

        pRegion->ObjectCount = 0;
        while (gb.GetPos() < nEnd) {
            DVB_OBJECT* pObject  = &pRegion->Objects[pRegion->ObjectCount];
            pObject->object_id   = gb.ReadShort();
            pObject->object_type = (BYTE)gb.BitRead(2);
            pObject->object_provider_flag = (BYTE)gb.BitRead(2);
            pObject->object_horizontal_position = (short)gb.BitRead(12);
            gb.BitRead(4);  // Reserved
            pObject->object_vertical_position = (short)gb.BitRead(12);
            if (pObject->object_type == 0x01 || pObject->object_type == 0x02) {
                pObject->foreground_pixel_code = gb.ReadByte();
                pObject->background_pixel_code = gb.ReadByte();
            }
            pRegion->ObjectCount++;
        }
    } else {
        gb.SkipBytes(wSegLength - 1);
    }

    return S_OK;
}
开发者ID:finalpatch,项目名称:mpc-hc,代码行数:48,代码来源:DVBSub.cpp

示例15: ParseAVCHeader

bool ParseAVCHeader(CGolombBuffer gb, avc_hdr& h, bool fullscan)
{
    static BYTE profiles[] = {44, 66, 77, 88, 100, 110, 118, 122, 128, 144, 244};
    static BYTE levels[] = {10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52};

    memset((void*)&h, 0, sizeof(h));

    h.profile = (BYTE)gb.BitRead(8);
    if (!MatchValue(profiles, _countof(profiles), h.profile)) {
        return false;
    }

    gb.BitRead(8);
    h.level = (BYTE)gb.BitRead(8);
    if (!MatchValue(levels, _countof(levels), h.level)) {
        return false;
    }

    UINT64 sps_id = gb.UExpGolombRead();	// seq_parameter_set_id
    if (sps_id >= 32) {
        return false;
    }

    UINT64 chroma_format_idc = 0;
    if (h.profile >= 100) {					// high profile
        chroma_format_idc = gb.UExpGolombRead();
        if (chroma_format_idc == 3) {		// chroma_format_idc
            gb.BitRead(1);					// residue_transform_flag
        }

        gb.UExpGolombRead();				// bit_depth_luma_minus8
        gb.UExpGolombRead();				// bit_depth_chroma_minus8

        gb.BitRead(1);						// qpprime_y_zero_transform_bypass_flag

        if (gb.BitRead(1)) {				// seq_scaling_matrix_present_flag
            for (int i = 0; i < 8; i++) {
                if (gb.BitRead(1)) {		// seq_scaling_list_present_flag
                    for (int j = 0, size = i < 6 ? 16 : 64, next = 8; j < size && next != 0; ++j) {
                        next = (next + gb.SExpGolombRead() + 256) & 255;
                    }
                }
            }
        }
    }

    gb.UExpGolombRead();					// log2_max_frame_num_minus4

    UINT64 pic_order_cnt_type = gb.UExpGolombRead();

    if (pic_order_cnt_type == 0) {
        gb.UExpGolombRead();				// log2_max_pic_order_cnt_lsb_minus4
    } else if (pic_order_cnt_type == 1) {
        gb.BitRead(1);						// delta_pic_order_always_zero_flag
        gb.SExpGolombRead();				// offset_for_non_ref_pic
        gb.SExpGolombRead();				// offset_for_top_to_bottom_field
        UINT64 num_ref_frames_in_pic_order_cnt_cycle = gb.UExpGolombRead();
        if (num_ref_frames_in_pic_order_cnt_cycle >= 256) {
            return false;
        }
        for (int i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {
            gb.SExpGolombRead();			// offset_for_ref_frame[i]
        }
    } else if (pic_order_cnt_type != 2) {
        return false;
    }

    UINT64 ref_frame_count = gb.UExpGolombRead();	// num_ref_frames
    if (ref_frame_count > 30) {
        return false;
    }
    gb.BitRead(1);									// gaps_in_frame_num_value_allowed_flag

    UINT64 pic_width_in_mbs_minus1 = gb.UExpGolombRead();
    UINT64 pic_height_in_map_units_minus1 = gb.UExpGolombRead();
    h.interlaced = !(BYTE)gb.BitRead(1);

    if (h.interlaced) {
        gb.BitRead(1);								// mb_adaptive_frame_field_flag
    }

    BYTE direct_8x8_inference_flag = (BYTE)gb.BitRead(1); // direct_8x8_inference_flag
    if (h.interlaced && !direct_8x8_inference_flag) {
        return false;
    }

    if (gb.BitRead(1)) {									// frame_cropping_flag
        h.crop_left   = (unsigned int)gb.UExpGolombRead();	// frame_cropping_rect_left_offset
        h.crop_right  = (unsigned int)gb.UExpGolombRead();	// frame_cropping_rect_right_offset
        h.crop_top    = (unsigned int)gb.UExpGolombRead();	// frame_cropping_rect_top_offset
        h.crop_bottom = (unsigned int)gb.UExpGolombRead();	// frame_cropping_rect_bottom_offset
    }

    if (gb.BitRead(1)) {							// vui_parameters_present_flag
        if (gb.BitRead(1)) {						// aspect_ratio_info_present_flag
            BYTE aspect_ratio_idc = (BYTE)gb.BitRead(8); // aspect_ratio_idc
            if (255 == aspect_ratio_idc) {
                h.sar.num = (WORD)gb.BitRead(16);	// sar_width
                h.sar.den = (WORD)gb.BitRead(16);	// sar_height
            } else if (aspect_ratio_idc < 17) {
//.........这里部分代码省略.........
开发者ID:WinnerSoftLab,项目名称:WinnerMediaPlayer,代码行数:101,代码来源:VideoParser.cpp


注:本文中的CGolombBuffer类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。