本文整理汇总了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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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();
}
示例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;
}
示例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;
}
}
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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) {
//.........这里部分代码省略.........