UInt32 HTTPDecoder::decoding(Exception& ex, UInt8* data,UInt32 size) { std::shared_ptr<HTTPPacket> pPacket(new HTTPPacket(_rootPath)); UInt32 consumed = pPacket->build(ex, data, size); if (consumed) receive(pPacket); return consumed; }
STDMETHODIMP CBaseMuxerInputPin::Receive(IMediaSample* pSample) { CAutoLock cAutoLock(&m_csReceive); HRESULT hr = __super::Receive(pSample); if(FAILED(hr)) return hr; CAutoPtr<MuxerPacket> pPacket(new MuxerPacket(this)); long len = pSample->GetActualDataLength(); BYTE* pData = NULL; if(FAILED(pSample->GetPointer(&pData)) || !pData) return S_OK; pPacket->pData.SetCount(len); memcpy(pPacket->pData.GetData(), pData, len); if(S_OK == pSample->IsSyncPoint() || m_mt.majortype == MEDIATYPE_Audio && !m_mt.bTemporalCompression) { pPacket->flags |= MuxerPacket::syncpoint; } if(S_OK == pSample->GetTime(&pPacket->rtStart, &pPacket->rtStop)) { pPacket->flags |= MuxerPacket::timevalid; pPacket->rtStart += m_tStart; pPacket->rtStop += m_tStart; if((pPacket->flags & MuxerPacket::syncpoint) && pPacket->rtStart < m_rtMaxStart) { pPacket->flags &= ~MuxerPacket::syncpoint; pPacket->flags |= MuxerPacket::bogus; } m_rtMaxStart = max(m_rtMaxStart, pPacket->rtStart); } else if(pPacket->flags & MuxerPacket::syncpoint) { pPacket->flags &= ~MuxerPacket::syncpoint; pPacket->flags |= MuxerPacket::bogus; } if(S_OK == pSample->IsDiscontinuity()) { pPacket->flags |= MuxerPacket::discontinuity; } pPacket->index = m_iPacketIndex++; PushPacket(pPacket); return S_OK; }
STDMETHODIMP CBaseMuxerInputPin::EndOfStream() { CAutoLock cAutoLock(&m_csReceive); HRESULT hr = __super::EndOfStream(); if(FAILED(hr)) return hr; ASSERT(!m_fEOS); CAutoPtr<MuxerPacket> pPacket(new MuxerPacket(this)); pPacket->flags |= MuxerPacket::eos; PushPacket(pPacket); m_fEOS = true; return hr; }