Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows Phone 8.1 RT(XAML)中使用MFT组件裁剪视频_C#_C++_Windows Phone 8.1_Video Processing_Ms Media Foundation - Fatal编程技术网

C# 在Windows Phone 8.1 RT(XAML)中使用MFT组件裁剪视频

C# 在Windows Phone 8.1 RT(XAML)中使用MFT组件裁剪视频,c#,c++,windows-phone-8.1,video-processing,ms-media-foundation,C#,C++,Windows Phone 8.1,Video Processing,Ms Media Foundation,在WP 8.1 RT中使用MFT时,我遇到了一个问题:将视频从480 x 640裁剪到480 x 480(删除左侧和右侧区域,而不是将它们拉伸到新的比例)。我倾斜,试图修改灰度过滤器,使其工作,但失败,由于我的局限性在C++和MF编程。有谁能帮我指出如何删除不需要的像素和更改输出视频帧大小的一般指导原则吗?我做了研究,发现了一些使用DSP或视频大小调整器的技巧(不适用于WP编程)。但是我不知道如何在WP项目中包含或使用它们 以下是我从灰度过滤器中修改的代码: // Convert NV12 im

在WP 8.1 RT中使用MFT时,我遇到了一个问题:将视频从480 x 640裁剪到480 x 480(删除左侧和右侧区域,而不是将它们拉伸到新的比例)。我倾斜,试图修改灰度过滤器,使其工作,但失败,由于我的局限性在C++和MF编程。有谁能帮我指出如何删除不需要的像素和更改输出视频帧大小的一般指导原则吗?我做了研究,发现了一些使用DSP或视频大小调整器的技巧(不适用于WP编程)。但是我不知道如何在WP项目中包含或使用它们

以下是我从灰度过滤器中修改的代码:

// Convert NV12 image

void TransformImage_NV12(
const D2D_RECT_U &rcDest,
_Inout_updates_(_Inexpressible_(2 * lDestStride * dwHeightInPixels)) BYTE *pDest,
_In_ LONG lDestStride,
_In_reads_(_Inexpressible_(2 * lSrcStride * dwHeightInPixels)) const BYTE *pSrc,
_In_ LONG lSrcStride,
_In_ DWORD dwWidthInPixels,
_In_ DWORD dwHeightInPixels,
_In_ int EffectValue)
{
// NV12 is planar: Y plane, followed by packed U-V plane.

// Y plane
for (DWORD y = 0; y < dwHeightInPixels; y++)
{
    if (y < dwHeightInPixels / 2)
        CopyMemory(pDest, pSrc, dwWidthInPixels);
    pDest += lDestStride;
    pSrc += lSrcStride;
}

// U-V plane

// NOTE: The U-V plane has 1/2 the number of lines as the Y plane.

// Lines above the destination rectangle.
DWORD yn = 0;
const DWORD y0 = min(rcDest.bottom, dwHeightInPixels);

// Lines within the destination rectangle.
// 128 = 256/2 => fill this value to memory of U V plane to make grayscale the effect
for (; yn < y0 / 2; yn++)
{
    //CopyMemory(pDest, pSrc, rcDest.left);
    if (yn < y0 / 4)
        CopyMemory(pDest, pSrc, dwWidthInPixels);
    //FillMemory(pDest + rcDest.left, rcDest.right - rcDest.left, EffectValue);
    //CopyMemory(pDest + rcDest.right, pSrc + rcDest.right, dwWidthInPixels - rcDest.right);
    pDest += lDestStride;
    pSrc += lSrcStride;
}
}
//转换NV12图像
无效转换图像\u NV12(
常数D2D_RECT_&rcDest,
_Inout更新字节*pDest,
_大步走,
_In_reads_uu(_不可表达_u2*lSrcStride*dwHeightInPixels))常量字节*pSrc,
_在漫长的道路上,
_在DWORD DWWITHINPIxels中,
_在uuudord dwHeightInPixels中,
_In_uuint效应值)
{
//NV12是平面的:Y平面,然后是压缩U-V平面。
//Y平面
对于(DWORD y=0;y将该值填充到U V平面的内存中,以使灰度成为效果
对于(;yn

它生成的视频只有上半部分,下半部分填充绿色。

关于大小调整器,您应该能够使用视频大小调整器DSP执行此任务。您必须创建一个拓扑,并构建一个拓扑节点,将调整器附加到该节点。然后在拓扑结构中使用该节点。那么您正在尝试以NV12格式进行视频样本裁剪?这里有一个类似的问题:它对你有帮助吗?我确实了解视频像素数据格式,也知道如何裁剪它们。问题是设置输出帧大小。我得到了帮助,很快就会发布答案