Столкнулся с проблемой при использовании MFT в WP 8.1 RT: обрезать видео с 480 х 640 до 480 х 480 (удалить левую и правую области, а не растягивать их в новое соотношение). Я опирался на пример мультимедийного расширения и попытался изменить фильтр оттенков серого. чтобы заставить его работать, но не удалось из-за моих ограничений в программировании на C++ и MF. Может ли кто-нибудь помочь мне, указав общую руководящую линию, как удалить ненужные пиксели и изменить размер выходного видеокадра? Я провел исследование и нашел несколько советов (не для программирования WP), которые используют Видеопроцессор MFT или Video Resizer DSP. Но у меня нет идеального способа включить или использовать их в проекте 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;
}
}
Он производит видео только с верхней частью, а нижняя половина заполнена зеленым цветом.