void CMediaDecoder::Reset() { // 次のフィルタをリセットする for(DWORD dwOutputIndex = 0UL ; dwOutputIndex < GetOutputNum() ; dwOutputIndex++){ if(m_aOutputDecoder[dwOutputIndex].pDecoder){ m_aOutputDecoder[dwOutputIndex].pDecoder->Reset(); } } }
const bool CMediaDecoder::SetOutputDecoder(CMediaDecoder *pDecoder, const DWORD dwOutputIndex, const DWORD dwInputIndex) { // 出力フィルタをセットする if(dwOutputIndex < GetOutputNum()){ m_aOutputDecoder[dwOutputIndex].pDecoder = pDecoder; m_aOutputDecoder[dwOutputIndex].dwInputIndex = dwInputIndex; return true; } return false; }
const bool CMediaDecoder::OutputMedia(CMediaData *pMediaData, const DWORD dwOutptIndex) { // デフォルトの出力処理 // 次のフィルタにデータを渡す if(dwOutptIndex < GetOutputNum()){ if(m_aOutputDecoder[dwOutptIndex].pDecoder){ return m_aOutputDecoder[dwOutptIndex].pDecoder->InputMedia(pMediaData, m_aOutputDecoder[dwOutptIndex].dwInputIndex); } } return false; }
const bool CMediaTee::InputMedia(CMediaData *pMediaData, const DWORD dwInputIndex) { CBlockLock Lock(&m_DecoderLock); /* if (dwInputIndex >= GetInputNum()) return false; */ // 下位デコーダにデータを渡す for (DWORD dwOutIndex = 0UL ; dwOutIndex < GetOutputNum() ; dwOutIndex++) { OutputMedia(pMediaData, dwOutIndex); } return true; }