powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Directx и YUV422 frame
1 сообщений из 1, страница 1 из 1
Directx и YUV422 frame
    #37329290
sergey_Ocean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Подскажите пожалуйста.
У меня в p_Dest фрейм yuv422 размером 352 288.
Пытаюсь отобразить его

VOID Render()
{
HRESULT hr;
if( NULL == g_pd3dDevice )
return;
D3DLOCKED_RECT rect;
D3DLOCKED_RECT offrect;


// Clear the backbuffer to a blue color
//g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,0,0), 1.0f, 0 );
// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{

IDirect3DSurface9 *pOffSurface;
if( SUCCEEDED( g_pd3dDevice->CreateOffscreenPlainSurface( 352, 288, D3DFMT_YUY2, D3DPOOL_SYSTEMMEM, &pOffSurface,NULL)))
{
if( SUCCEEDED(hr = pOffSurface->LockRect(&offrect,NULL,D3DLOCK_DONOTWAIT)))
{
IDirect3DSurface9 *p_surface = NULL;
if( SUCCEEDED(hr = g_pd3dDevice->GetBackBuffer( 0,0,D3DBACKBUFFER_TYPE_MONO,&p_surface)))
{
if( SUCCEEDED(hr = p_surface->LockRect(&rect,NULL,D3DLOCK_DONOTWAIT)))
{

PitchYuv422((BYTE*)offrect.pBits, pDest, 352, 288, offrect.Pitch);
g_pd3dDevice->StretchRect(pOffSurface,NULL,p_surface,NULL,D3DTEXF_NONE);
p_surface->UnlockRect();
}
p_surface->Release();
}
pOffSurface->UnlockRect();
}
pOffSurface->Release();
}
// End the scene
g_pd3dDevice->EndScene();
}

// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

где

void PitchYuv422(LPBYTE pTarget, LPBYTE pSource, int nWidth, int nHeight, LONG lPitch)
{
LPBYTE pSourceBuff = pSource;
LPBYTE pTargetBuff = pTarget;

int i, j, nPos=0;
for(i = 0; i < nHeight; i++)
{
pTargetBuff = pTarget + i*lPitch;
for(j = 0; j < nWidth/2; j++)
{
*pTargetBuff++ = *pSourceBuff++; // Y
*pTargetBuff++ = *pSourceBuff++; // U
*pTargetBuff++ = *pSourceBuff++; // Y
*pTargetBuff++ = *pSourceBuff++; // V
/*
*(pTargetBuff+1) = *pSourceBuff++; // Y
*(pTargetBuff+4) = *pSourceBuff++; // U
*(pTargetBuff+3) = *pSourceBuff++; // Y
*(pTargetBuff+2) = *pSourceBuff++; // V
pTargetBuff += 4;
*/
}
}
}

В итоге кадр наполовину и весь фиолетовый. Что то я делаю не так наверное.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Directx и YUV422 frame
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]