示例#1
0
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()
    }
示例#2
0
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();
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
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;
}