小编Paw*_*wel的帖子

颜色转换器 DSP ProcessOutput 总是返回 MF_E_TRANSFORM_NEED_MORE_INPUT

我需要将视频帧从 RGB32 转换为 IYUV,但颜色转换器 MFT 拒绝处理样本。对于每一帧,我调用 IMFTransform::ProcessInput() 和 IMFTransform::ProcessOutput() 但我收到MF_E_TRANSFORM_NEED_MORE_INPUT。如果我尝试用另一个样品提供 MFT,我会收到MF_E_NOTACCEPTING错误。

下面我粘贴一个代码来显示我的问题。希望你们能帮上忙。

首先我创建媒体类型:

//DSP input MediaType
CHECK_HR(hr = MFCreateMediaType(&m_pInputMediaType));   
CHECK_HR(hr =  m_pInputMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));   
CHECK_HR(hr =  m_pInputMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32))
CHECK_HR(hr =  m_pInputMediaType->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive))
CHECK_HR(hr =  MFSetAttributeSize(m_pInputMediaType, MF_MT_FRAME_SIZE, m_pStreamParams->StreamWidth, m_pStreamParams->StreamHeight))
CHECK_HR(hr =  MFSetAttributeRatio(m_pInputMediaType, MF_MT_FRAME_RATE, m_pStreamParams->StreamFramerate, 1))
CHECK_HR(hr =  MFSetAttributeRatio(m_pInputMediaType, MF_MT_PIXEL_ASPECT_RATIO, 1, 1));  

    //DSP output MediaType
CHECK_HR(hr = MFCreateMediaType(&m_pIntermediateMediaType));   
CHECK_HR(hr =  m_pIntermediateMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));   
CHECK_HR(hr =  m_pIntermediateMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_IYUV));
CHECK_HR(hr =  m_pIntermediateMediaType->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive));
CHECK_HR(hr =  MFSetAttributeSize(m_pIntermediateMediaType, MF_MT_FRAME_SIZE, m_pStreamParams->StreamWidth, m_pStreamParams->StreamHeight));
CHECK_HR(hr =  MFSetAttributeRatio(m_pIntermediateMediaType, …
Run Code Online (Sandbox Code Playgroud)

visual-c++ windows-7 ms-media-foundation

5
推荐指数
1
解决办法
1743
查看次数