标签: mft

Media Foundation - 如何在MFT中更改帧大小(Media Foundation Transform)

我正在尝试实现一个能够旋转视频的MFT.旋转本身将在变换函数内完成.为此,我需要更改输出帧大小,但我不知道如何做到这一点.

作为起点,我使用了Microsoft提供的MFT_Grayscale示例.我将此MFT作为转换节点包含在部分拓扑中

HRESULT Player::AddBranchToPartialTopology(
    IMFTopology *pTopology,
    IMFPresentationDescriptor *pSourcePD,
    DWORD iStream
    )
{
    ...
    IMFTopologyNode pTransformNode = NULL;
    ...
    hr = CreateTransformNode(CLSID_GrayscaleMFT, &pTransformNode);
    ...
    hr = pSourceNode->ConnectOutput(0, pTransformNode, 0);
    hr = pTransformNode->ConnectOutput(0, pOutputNode, 0);
    ...
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,此代码正在运行.应用灰度mft并按预期工作.无论如何,我想改变这个mft来处理视频旋转.所以我们假设我想将视频旋转90度.为此,必须切换输入框架的宽度和高度.我尝试了不同的东西,但没有一个按预期工作.基于此线程中的第一条注释如何更改Media Foundation Transform输出帧(视频)大小?我开始改变SetOutputType的实现.我在GetOutputType中调用GetAttributeSize来接收实际的frame_size.当我尝试设置新的frame_size时失败(当开始播放时我收到hresult 0xc00d36b4(指定的数据无效,不一致或此对象不支持)

HRESULT CGrayscale::SetOutputType(
    DWORD           dwOutputStreamID,
    IMFMediaType    *pType, // Can be NULL to clear the output type.
    DWORD           dwFlags 
    )
{ ....
    //Receive the actual frame_size of pType (works as expected)
    hr = MFGetAttributeSize(
    pType,
    MF_MT_FRAME_SIZE,
    &width,
    &height
    ));
    ...
    //change …
Run Code Online (Sandbox Code Playgroud)

c++ windows video-processing mft ms-media-foundation

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

媒体基金会:英特尔硬件MFT的SPS / PPS问题

我使用Intel硬件MFT将NV12帧编码为H264流,并使用Live555通过LAN上的RTP通过流传输编码的帧,并在另一端进行ffplay设置以解码和显示它们。该设置可以与软件编码器(SYNC或ASYNC软件MFT)配合使用,但是ffplay抱怨当在Intel硬件MFT中完成编码时,SPS / PPS不可用,并且仅显示一个乱码。我发现英特尔硬件编码器在馈入初始样本并通过MF_MT_MPEG_SEQUENCE_HEADER使SPS / PPS可用之后触发MF_E_TRANSFORM_STREAM_CHANGE事件。我能够捕获该MF_E_TRANSFORM_STREAM_CHANGE事件并获取序列标头blob。

问题是,Live555需要分别设置SPS和PPS。但是,我对于从MF_MT_MPEG_SEQUENCE_HEADER blob中提取SPS和PPS感到非常困惑。

根据我的理解以及在其他线程中的进一步查找,SPS和PPS分别以00 00 00 01 67和0 00 00 01 68开头。但是,我在从英特尔编码器收到的Blob中找不到任何序列。

https://github.com/cisco/openh264/issues/756 SPS的开始:00 00 00 01 67 PPS的开始:00 00 00 01 68

从intel MFT获得的序列头

序列头大小50

冒号头:0 0 1 27 64 0 28 ac 2b 40 3c 1 13 f2 e0 22 0 0 3 0 2 0 0 3 0 79 d0 80 f 42 0 3 d0 93 7b df 7 68 70 ca 80 0 0 0 1 28 ee 3c b0 …

rtp video-streaming mft live555 ms-media-foundation

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