SetInputType 返回错误代码 c00d6d60 [英] SetInputType returns error code c00d6d60

查看:34
本文介绍了SetInputType 返回错误代码 c00d6d60的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的项目中使用 MediaFoundation 杜比编码器.我能够初始化输出类型,但在设置输入类型时,它给了我 c00d6d60 错误代码

I am trying to use MediaFoundation dolby encoder in my project. I am able to initialize output type but while setting up input tyep it gives me c00d6d60 error code

IMFMediaType* pInputMediaType = NULL;
    IMFMediaType *pOutputType = NULL;
    if (!m_pMFT)
    {
        return MF_E_NOT_INITIALIZED;
    }
    HRESULT hr = S_OK;
    DWORD pcInputStreams = 0;
    DWORD pcOutputStreams = 0;
    CHECK_HR(m_pMFT->GetStreamCount(&pcInputStreams,&pcOutputStreams));

assert(pcInputStreams==1 && pcInputStreams == pcOutputStreams);
hr = m_pMFT->GetStreamIDs(1, &m_dwInputID, 1, &m_dwOutputID);

if (hr == E_NOTIMPL)
{
    // The stream identifiers are zero-based.
    m_dwInputID = 0;
    m_dwOutputID = 0;
    hr = S_OK;
}
else if (FAILED(hr))
{
    goto done;
}

SafeRelease(&m_pOutputType);

CHECK_HR( MFCreateMediaType( &pOutputType ) );
CHECK_HR( pOutputType->SetGUID( MF_MT_MAJOR_TYPE, MFMediaType_Audio ) );  
CHECK_HR( pOutputType->SetGUID( MF_MT_SUBTYPE, MFAudioFormat_Dolby_AC3 ) );
CHECK_HR( pOutputType->SetUINT32( MF_MT_AUDIO_SAMPLES_PER_SECOND, inSamplePerSec ) );
CHECK_HR( pOutputType->SetUINT32( MF_MT_AUDIO_AVG_BYTES_PER_SECOND, inOutputAvgBytesPerSec ) );
CHECK_HR( pOutputType->SetUINT32( MF_MT_AUDIO_NUM_CHANNELS, inNumChannels ) );


LogMediaType(pOutputType);
hr = m_pMFT->SetOutputType(m_dwOutputID, pOutputType, 0);

if (SUCCEEDED(hr))
{
    m_pOutputType = pOutputType;
    m_pOutputType->AddRef();
}

CHECK_HR( MFCreateMediaType( &pInputMediaType ) );
CHECK_HR( pInputMediaType->SetGUID( MF_MT_MAJOR_TYPE, MFMediaType_Audio ) );
CHECK_HR( pInputMediaType->SetGUID( MF_MT_SUBTYPE, MFAudioFormat_PCM ) );  
CHECK_HR( pInputMediaType->SetUINT32( MF_MT_AUDIO_BITS_PER_SAMPLE, 16 ) );
CHECK_HR( pInputMediaType->SetUINT32( MF_MT_AUDIO_SAMPLES_PER_SECOND, inSamplePerSec ) );
CHECK_HR( pInputMediaType->SetUINT32( MF_MT_AUDIO_NUM_CHANNELS, inNumChannels ) );
//CHECK_HR( spMFTypeIn->SetUINT32( MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1 ) );
CHECK_HR( pInputMediaType->SetUINT32( MF_MT_AUDIO_BLOCK_ALIGNMENT, inNumChannels*2 ) );
CHECK_HR( pInputMediaType->SetUINT32( MF_MT_AUDIO_AVG_BYTES_PER_SECOND, inNumChannels*2*inSamplePerSec) );
LogMediaType(pInputMediaType);
if (FAILED(hr))
{
    goto done;
}

hr = m_pMFT->SetInputType(m_dwInputID, pInputMediaType, 0);

我使用的指南是 http://msdn.microsoft.com/en-us/library/windows/desktop/hh447682%28v=vs.85%29.aspx.可以请一些人提供一些见解

The guide I am using is http://msdn.microsoft.com/en-us/library/windows/desktop/hh447682%28v=vs.85%29.aspx. Can some please provide some insight

推荐答案

0xC00D6D60 is MF_E_TRANSFORM_TYPE_NOT_SET "尚未为此流或它所依赖的流设置有效类型."

0xC00D6D60 is MF_E_TRANSFORM_TYPE_NOT_SET "A valid type has not been set for this stream or a stream that it depends on."

MSDN 设置输入/输出媒体类型过早,需要从另一端配置transform时返回此错误码.

MSDN says that this error code is returned when it is too early to set input/output media type and you need to configure transform from the other end.

在杜比数字音频编码器的情况下,真正的原因应该是编码器对您不可用:

In case of Dolby Digital Audio Encoder real cause should be the unavailability of the encoder to you:

重要说明 Microsoft 对 Dolby Digital 技术的实施受到 Microsoft 应用程序使用的 Dolby Digital 许可计划条款的限制.

Important The Microsoft implementation of the Dolby Digital technology is restricted under terms of the Dolby Digital licensing program to use by Microsoft applications.

如果您使用第三方转换(您不显示实例化代码),则可能适用其他条件或初始化序列.

If you are using third party transform (you don't show instantiation code), then additional conditions or initialization sequence might apply.

这篇关于SetInputType 返回错误代码 c00d6d60的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆