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; }
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; }