HRESULT CMpeg2DataParser::ParsePMT(CDVBChannel& Channel) { HRESULT hr; CComPtr<ISectionList> pSectionList; DWORD dwLength; PSECTION data; WORD wTSID; WORD wSectionLength; Channel.SetVideoFps(DVB_FPS_NONE); Channel.SetVideoChroma(DVB_Chroma_NONE); CheckNoLog(m_pData->GetSection((PID)Channel.GetPMT(), SI_PMT, &m_Filter, 15000, &pSectionList)); CheckNoLog(pSectionList->GetSectionData(0, &dwLength, &data)); CGolombBuffer gb((BYTE*)data, dwLength); // TS_program_map_section() CheckNoLog(ParseSIHeader(gb, SI_PMT, wSectionLength, wTSID)); gb.BitRead(3); // reserved Channel.SetPCR((ULONG)gb.BitRead(13)); // PCR_PID gb.BitRead(4); // reserved BeginEnumDescriptors(gb, nType, nLength) { // for (i=0;i<N;i++) { SkipDescriptor(gb, nType, nLength); // descriptor() }
void CTunerScanDlg::OnBnClickedSave() { CAppSettings& s = AfxGetAppSettings(); s.m_DVBChannels.RemoveAll(); for (int i = 0; i < m_ChannelList.GetItemCount(); i++) { CDVBChannel Channel; Channel.FromString(m_ChannelList.GetItemText(i, TSCC_CHANNEL)); Channel.SetPrefNumber(i); s.m_DVBChannels.AddTail(Channel); } OnOK(); }
void CPlayerNavigationDialog::OnSelChangeComboAudio() { UINT nID; CWnd* TempWnd; AppSettings& s = AfxGetAppSettings(); CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel); nID = m_ComboAudio.GetCurSel() + ID_NAVIGATE_AUDIO_SUBITEM_START; TempWnd = static_cast<CPlayerNavigationBar*> (m_pParent) -> m_pParent; static_cast<CMainFrame*> (TempWnd) -> OnNavigateAudio(nID); pChannel->SetDefaultAudio(m_ComboAudio.GetCurSel()); pChannel->ToString(); }
LRESULT CTunerScanDlg::OnNewChannel(WPARAM wParam, LPARAM lParam) { CDVBChannel Channel; CString strTemp; Channel.FromString((LPCTSTR)lParam); if (!m_bIgnoreEncryptedChannels || !Channel.IsEncrypted()) { int nItem, nChannelNumber; if (Channel.GetOriginNumber() != 0) { // LCN is available nChannelNumber = Channel.GetOriginNumber(); // Insert new channel so that channels are sorted by their logical number for (nItem = 0; nItem < m_ChannelList.GetItemCount(); nItem++) { if ((int)m_ChannelList.GetItemData(nItem) > nChannelNumber) { break; } } } else { nChannelNumber = nItem = m_ChannelList.GetItemCount(); } strTemp.Format(_T("%d"), nChannelNumber); nItem = m_ChannelList.InsertItem(nItem, strTemp); m_ChannelList.SetItemData(nItem, Channel.GetOriginNumber()); m_ChannelList.SetItemText(nItem, TSCC_NAME, Channel.GetName()); strTemp.Format(_T("%d"), Channel.GetFrequency()); m_ChannelList.SetItemText(nItem, TSCC_FREQUENCY, strTemp); strTemp = Channel.IsEncrypted() ? ResStr(IDS_DVB_CHANNEL_ENCRYPTED) : ResStr(IDS_DVB_CHANNEL_NOT_ENCRYPTED); m_ChannelList.SetItemText(nItem, TSCC_ENCRYPTED, strTemp); m_ChannelList.SetItemText(nItem, TSCC_CHANNEL, (LPCTSTR) lParam); } return TRUE; }
HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq) { HRESULT hr; CComPtr<ISectionList> pSectionList; DWORD dwLength; PSECTION data; WORD wTSID; WORD wONID; WORD wSectionLength; CheckNoLog (m_pData->GetSection (PID_SDT, SI_SDT, &m_Filter, 5000, &pSectionList)); CheckNoLog (pSectionList->GetSectionData (0, &dwLength, &data)); CGolombBuffer gb ((BYTE*)data, dwLength); // service_description_section() CheckNoLog (ParseSIHeader (gb, SI_SDT, wSectionLength, wTSID)); wONID = gb.BitRead(16); // original_network_id gb.BitRead(8); // reserved_future_use while (gb.GetSize() - gb.GetPos() > 4) { CDVBChannel Channel; Channel.SetFrequency (ulFreq); Channel.SetTSID (wTSID); Channel.SetONID (wONID); Channel.SetSID (gb.BitRead(16)); // service_id uimsbf gb.BitRead(6); // reserved_future_use bslbf gb.BitRead(1); // EIT_schedule_flag bslbf Channel.SetNowNextFlag(!!gb.BitRead(1)); // EIT_present_following_flag bslbf gb.BitRead(3); // running_status uimsbf Channel.SetEncrypted (!!gb.BitRead(1)); // free_CA_mode bslbf // Descriptors: BeginEnumDescriptors(gb, nType, nLength) { switch (nType) { case DT_SERVICE : gb.BitRead(8); // service_type nLength = gb.BitRead(8); // service_provider_name_length gb.ReadBuffer (DescBuffer, nLength); // service_provider_name nLength = gb.BitRead(8); // service_name_length gb.ReadBuffer (DescBuffer, nLength); // service_name DescBuffer[nLength] = 0; Channel.SetName (ConvertString (DescBuffer, nLength)); TRACE ("%15S %d\n", Channel.GetName(), Channel.GetSID()); break; default : SkipDescriptor (gb, nType, nLength); // descriptor() break; } } EndEnumDescriptors if (!Channels.Lookup(Channel.GetSID())) { Channels [Channel.GetSID()] = Channel; } } return S_OK; }
LRESULT CTunerScanDlg::OnNewChannel(WPARAM wParam, LPARAM lParam) { CDVBChannel Channel; CString strTemp; Channel.FromString((LPCTSTR)lParam); if (!m_bIgnoreEncryptedChannels || !Channel.IsEncrypted()) { int nItem, nChannelNumber; if (Channel.GetOriginNumber() != 0) { // LCN is available nChannelNumber = Channel.GetOriginNumber(); // Insert new channel so that channels are sorted by their logical number for (nItem = 0; nItem < m_ChannelList.GetItemCount(); nItem++) { if ((int)m_ChannelList.GetItemData(nItem) > nChannelNumber || (int)m_ChannelList.GetItemData(nItem) == 0) { break; } } } else { nChannelNumber = 0; nItem = m_ChannelList.GetItemCount(); } strTemp.Format(_T("%d"), nChannelNumber); nItem = m_ChannelList.InsertItem(nItem, strTemp); m_ChannelList.SetItemData(nItem, Channel.GetOriginNumber()); m_ChannelList.SetItemText(nItem, TSCC_NAME, Channel.GetName()); strTemp.Format(_T("%d"), Channel.GetFrequency()); m_ChannelList.SetItemText(nItem, TSCC_FREQUENCY, strTemp); strTemp = Channel.IsEncrypted() ? ResStr(IDS_DVB_CHANNEL_ENCRYPTED) : ResStr(IDS_DVB_CHANNEL_NOT_ENCRYPTED); m_ChannelList.SetItemText(nItem, TSCC_ENCRYPTED, strTemp); if (Channel.GetVideoType() == DVB_H264) { strTemp = _T(" H.264"); } else if (Channel.GetVideoPID()) { strTemp = _T("MPEG-2"); } else { strTemp = _T(" - "); } m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FORMAT, strTemp); strTemp = Channel.GetVideoFpsDesc(); m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FPS, strTemp); if (Channel.GetVideoWidth() || Channel.GetVideoHeight()) { strTemp.Format(_T("%dx%d"), Channel.GetVideoWidth(), Channel.GetVideoHeight()); } else { strTemp = _T(" - "); } m_ChannelList.SetItemText(nItem, TSCC_VIDEO_RES, strTemp); strTemp.Format(_T("%d/%d"), Channel.GetVideoARy(), Channel.GetVideoARx()); m_ChannelList.SetItemText(nItem, TSCC_VIDEO_AR, strTemp); m_ChannelList.SetItemText(nItem, TSCC_CHANNEL, (LPCTSTR) lParam); } return TRUE; }