const bool WavWriter::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex > GetInputNum()){ return false; } return CFileWriter::InputMedia(pMediaData, dwInputIndex); }
const bool CTsPacketParser::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex >= GetInputNum())return false; if(!pMediaData)return false; // TSパケットを処理する SyncPacket(pMediaData->GetData(), pMediaData->GetSize()); return true; }
const bool WavSplitWriter::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex > GetInputNum()){ return false; } /* 速度は出ないけどなるべく他のモジュールに修正を入れないように作る */ std::vector<WavWriter*>& v = m_OutFiles; DWORD dwBlockAlign = m_dwBlockAlign; DWORD dwChannel = v.size(); DWORD dwBytePerSample = dwBlockAlign / dwChannel; DWORD dwSample = pMediaData->GetSize() / dwBlockAlign; DWORD dwChannelSize = dwBytePerSample * dwSample; std::vector<BYTE> tmp(pMediaData->GetSize()); { LPBYTE p1 = &tmp[0]; LPBYTE p2 = pMediaData->GetData(); for(DWORD i=0;i<dwSample;i++){ for(DWORD j=0;j<dwChannel;j++){ ::CopyMemory(p1 + (dwChannelSize * j), p2 + (dwBytePerSample * j), dwBytePerSample); } p1 += dwBytePerSample; p2 += dwBlockAlign; } } { LPBYTE p1 = &tmp[0]; CMediaData sample(dwChannelSize); for(std::vector<WavWriter*>::iterator it=v.begin();it!=v.end();++it){ sample.SetData(p1, dwChannelSize); (*it)->InputMedia(&sample, dwInputIndex); p1 += dwChannelSize; } } return true; }
const bool CAacConverter::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex > GetInputNum())return false; CAdtsFrame *pAdtsFrame = static_cast<CAdtsFrame *>(pMediaData); // 入力メディアデータは互換性がない if(!pAdtsFrame)return false; // AACデコーダに入力 return m_AacDecoder.Decode(pAdtsFrame); }
const bool CMediaGrabber::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex > GetInputNum())return false; // コールバックに通知する if(m_pfnMediaGrabFunc)m_pfnMediaGrabFunc(pMediaData, m_pMediaGrabParam); // 下位デコーダにデータを渡す OutputMedia(pMediaData); return true; }
const bool CProgManager::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex >= GetInputNum())return false; CTsPacket *pTsPacket = static_cast<CTsPacket *>(pMediaData); // 入力メディアデータは互換性がない if(!pTsPacket)return false; // PIDルーティング m_PidMapManager.StorePacket(pTsPacket); // 次のフィルタにデータを渡す OutputMedia(pMediaData); return true; }
const bool CTsDemuxer::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { if(dwInputIndex >= GetInputNum())return false; CTsPacket *pTsPacket = dynamic_cast<CTsPacket *>(pMediaData); // 入力メディアデータは互換性がない if(!pTsPacket)return false; // 映像PESパケット抽出 if(pTsPacket->GetPID() == m_wVideoPID){ m_VideoPesParser.StorePacket(pTsPacket); return true; } // 音声PESパケット抽出 if(pTsPacket->GetPID() == m_wAudioPID){ m_AudioPesParser.StorePacket(pTsPacket); return true; } return true; }