Exemple #1
0
HRESULT CAudioDecFilter::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{
	HRESULT hr = __super::NewSegment(tStart, tStop, dRate);

	CAutoLock AutoLock(&m_cPropLock);

	ResetSync();

	return hr;
}
Exemple #2
0
HRESULT CAudioDecFilter::BeginFlush()
{
	HRESULT hr = __super::BeginFlush();

	CAutoLock AutoLock(&m_cPropLock);

	if (m_pDecoder) {
		m_pDecoder->Reset();
	}

	ResetSync();

	return hr;
}
Exemple #3
0
HRESULT CAudioDecFilter::StartStreaming()
{
	CAutoLock AutoLock(&m_cPropLock);

	if (m_pDecoder) {
		m_pDecoder->Open();
	}

	ResetSync();

	m_bPassthroughError = false;
	m_BitRateCalculator.Initialize();

	return S_OK;
}
Exemple #4
0
bool CTsSrcStream::InputMedia(const CMediaData *pMediaData)
{
	CBlockLock Lock(&m_Lock);

	if (!m_bEnableSync) {
		AddData(pMediaData);
		return true;
	}

	/*
		PTSを同期する処理は、TBS問題対策案(up0357)を元にしています。
	*/

	const CTsPacket *pPacket=static_cast<const CTsPacket*>(pMediaData);
	const WORD PID=pPacket->GetPID();
	if (PID!=m_VideoPID && PID!=m_AudioPID) {
		AddData(pMediaData);
		return true;
	}

	if (pPacket->m_Header.bPayloadUnitStartIndicator) {
		const DWORD Size=pPacket->GetPayloadSize();
		if (Size<14) {
			AddData(pMediaData);
			return true;
		}
		const BYTE *pData=pPacket->GetPayloadData();
		if (pData==NULL) {
			AddData(pMediaData);
			return true;
		}
		if (pData[0]!=0 || pData[1]!=0 || pData[2]!=1) {	// !PES
			AddData(pMediaData);
			return true;
		}
		if ((pData[7]&0x80)!=0) {	// pts_flag
			if (PID==m_VideoPID) {
				m_VideoPTSPrev=m_VideoPTS;
				m_VideoPTS=GET_PTS(&pData[9]);
			} else {
				m_AudioPTSPrev=m_AudioPTS;
				m_AudioPTS=GET_PTS(&pData[9]);
			}
		}
	}

#ifdef BONTSENGINE_1SEG_SUPPORT

	LONGLONG AudioPTS=m_AudioPTS;
	if (m_AudioPTSPrev>=0) {
		if (AudioPTS<m_AudioPTSPrev)
			AudioPTS+=0x200000000LL;
		if (AudioPTS>=m_AudioPTSPrev+ERR_PTS_DIFF) {
			TRACE(TEXT("Reset Audio PTS : Adj=%X%08X Cur=%X%08X Prev=%X%08X\n"),
				(DWORD)(AudioPTS>>32),(DWORD)AudioPTS,
				(DWORD)(m_AudioPTS>>32),(DWORD)m_AudioPTS,
				(DWORD)(m_AudioPTSPrev>>32),(DWORD)m_AudioPTSPrev);
			AddPoolPackets();
			ResetSync();
			AudioPTS=-1;
		}
	}