Использование компонента MFT для обрезки видео в Windows Phone 8.1 RT (XAML)

Столкнулся с проблемой при использовании 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;
}
}

Он производит видео только с верхней частью, а нижняя половина заполнена зеленым цветом.


person thang2410199    schedule 07.11.2014    source источник
comment
об изменении размера msdn.microsoft. com/en-us/library/windows/desktop/   -  person thang2410199    schedule 07.11.2014
comment
Вы должны быть в состоянии использовать Video Resizer DSP для этой задачи. Вам нужно создать топологию и построить узел топологии, к которому вы прикрепите средство изменения размера. Затем используйте этот узел в своей топологии.   -  person Anton Angelov    schedule 23.11.2014
comment
Итак, вы пытаетесь обрезать образец видео в формате NV12? Вот аналогичный вопрос: stackoverflow.com/questions/21094502/ Вам это помогает?   -  person Anton Angelov    schedule 24.11.2014
comment
Я понимал формат данных видеопикселей, а также знал, как их обрезать. Проблема заключается в настройке размера выходного кадра. Мне помогли, скоро опубликую ответ   -  person thang2410199    schedule 25.11.2014