bool CAVMediaFlow::GetStatus(u_int32_t valueName, void* pValue) { CMediaSource* source = NULL; if (m_videoSource) { source = m_videoSource; } else if (m_audioSource) { source = m_audioSource; } else if (m_textSource) { source = m_textSource; } switch (valueName) { case FLOW_STATUS_DONE: { bool done = true; if (m_videoSource) { done = m_videoSource->IsDone(); } if (m_audioSource) { done = (done && m_audioSource->IsDone()); } if (m_textSource) { done = (done && m_textSource->IsDone()); } *(bool*)pValue = done; } break; case FLOW_STATUS_PROGRESS: if (source) { *(float*)pValue = source->GetProgress(); } else { *(float*)pValue = 0.0; } break; default: return false; } return true; }