Помогите переводом с С++...

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Помогите переводом с С++...

Сообщение Vovik » 22.03.2004 (Пн) 22:27

Ребята, очень надо. Пожалуйста, помогите перевести с С++,а то я в нём ни гу-гу... :cry: :cry:
Код: Выделить всё
PAVISTREAM m_paviStream; // AVI поток
    PGETFRAME m_pgfFrame; // Указатель на текущий кадр в потоке
    AVISTREAMINFO m_psiStreamInfo; // Информация о потоке
    float Left=10;  // Координаты полигона на экране.
    float Top=10;
    float Right=200;
    float Bottom=200;
    D3DTLVERTEX Rect[4];

1 этап. Загрузка.
Load()
{
// создаем пустую текстуру размером 128х128. Эта текстура и будет содержать   в себе текущий кадр AVI файла        D3DTextr_CreateEmptyTexture("videotexture", 128, 128, 0,D3DTEXTR_16BITSPERPIXEL );
// инициализируем библиотеку для работы с AVI
AVIFileInit();
// загружаем файл test.avi как поток.
AVIStreamOpenFromFile( &m_paviStream, "test.avi",streamtypeVIDEO, 0, OF_READ, NULL );
// Ссылку на текущий кадр приводим в начало потока
m_pgfFrame = AVIStreamGetFrameOpen( m_paviStream, NULL );
// получаем информацию об AVI файле.
AVIStreamInfo( m_paviStream, &m_psiStreamInfo,sizeof(AVISTREAMINFO));
}

2 этап. Рендеринг.
Render(IDirect3DDevice7* lpDevice)
{
// получаем поверхность (surface) текстуры
LPDIRECTDRAWSURFACE7 pddsTexture = D3DTextr_GetSurface("videotexture");
DDSURFACEDESC2 ddsd; // переменная, содержащая информацию о текстуре
ddsd.dwSize = sizeof(DDSURFACEDESC2);
// лоччим(lock) текстуру, т.е. открываем ее для попиксельного редактирования.
pddsTexture->Lock( NULL, &ddsd, DDLOCK_WAIT | DDLOCK_WRITEONLY, NULL );
// является ли текстура в формате 565 ? Дело в том что твой ускоритель может
// выбрать разные форматы для текстур. В то время как сам direct3D может избрать
// другой формат.
BOOL bTextureIs565 = (ddsd.ddpfPixelFormat.dwGBitMask==0x7E0)?TRUE:FALSE;
// Сохраняем время начала проигрывания файла
static FLOAT fAVIStartTime = ((FLOAT)clock())/CLOCKS_PER_SEC;

//Используем таймер для определения кадра, который нужно рендерить в данный момент.
FLOAT fCurrTime = ((FLOAT)clock())/CLOCKS_PER_SEC;
FLOAT fElapsedTime = fCurrTime-fAVIStartTime;
FLOAT fAVITimeScale = ((FLOAT)m_psiStreamInfo.dwRate) / m_psiStreamInfo.dwScale;
DWORD dwCurrFrame = (DWORD)( fElapsedTime * fAVITimeScale );

//Если мы достигли конца файла, то проигрываем его заново
if( dwCurrFrame >= m_psiStreamInfo.dwLength )
{
fAVIStartTime = ((FLOAT)clock())/CLOCKS_PER_SEC;
dwCurrFrame = m_psiStreamInfo.dwStart + 1;
}

//Получаем ссылку на текущий кадр в файле
BITMAPINFO* pbmi;
pbmi = (BITMAPINFO*)AVIStreamGetFrame( m_pgfFrame, dwCurrFrame );

//Ссылки на источник и приемник сюрфейса текстуры.
// В источнике пропускаем заголовок.
WORD* pSrc = (WORD*)( sizeof(BITMAPINFO) + (BYTE*)pbmi );
WORD* pDest = (WORD*)ddsd.lpSurface;

// Если формат тектсуры 565, то копируем текстуру попиксельно,
// в противном случаем копируем куском, без преобразований.
if( bTextureIs565 )
{
for( DWORD i=0; i < 128*128; i++ )
{
WORD color = *pSrc++;
*pDest++ = ((color & 0x1F)|((color & 0xFFE0)<<1));
}
}
else
memcpy( pDest, pSrc, sizeof(WORD)*128*128 );

// Разлочиваем (unlock) текстуру. Попиксельная обработка закончилась.
pddsTexture->Unlock(NULL);
// делаем текущей текстуру "videotexture"
lpDevice->SetTexture( 0, D3DTextr_GetSurface("videotexture" ));
// инициализируем полигон для наложения текстуры на него.
Rect[0] = D3DTLVERTEX(D3DVECTOR(Left,Bottom,0.11f),0.5f,0xffffffff,0,0,1);
Rect[1] = D3DTLVERTEX(D3DVECTOR(Left,Top,0.11f),0.5f,0xffffffff,0,0,0);
Rect[2] = D3DTLVERTEX(D3DVECTOR(Right,Bottom,0.11f),0.5f,0xffffffff,0,1,1);
Rect[3] = D3DTLVERTEX(D3DVECTOR(Right,Top,0.11f),0.5f,0xffffffff,0,1,0);

    Rect[0].tu=0.0f;Rect[0].tv=0.0f;
    Rect[1].tu=0.0f;Rect[1].tv=1.0f;
    Rect[2].tu=0.99f;Rect[2].tv=0.0f;
    Rect[3].tu=0.99f;Rect[3].tv=1.0f;
// отрисовываем полигон.
    lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX,Rect,4,0);
// убираем текущую текстуру
   lpDevice->SetTexture( 0, NULL );
}

3 этап. Выгрузка
Restore()
{
AVIStreamRelease( m_paviStream ); // освобождаем AVI поток
AVIFileExit(); // закрываем библиотеку для работы с AVI
};

Заранее благодарен.....Если очень сложно, то хотяб рендеринг.... :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.03.2004 (Вт) 16:28

Так не сойдёт?
Вложения
vbdemo.zip
DirectShow sample
(7.22 Кб) Скачиваний: 61
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 23.03.2004 (Вт) 22:29

GSerg писал(а):Так не сойдёт?
Эх...этот пример использует какую-то библиотеку, которая не у всех может быть..... мне бы чисто через DX.... :cry: Неужели никто не может помочь? :cry:

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.03.2004 (Ср) 21:39

Ну неужели никто не может помочь? :cry: :cry: :cry: :( :( :( :cry: :cry: :cry:

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 25.03.2004 (Чт) 0:26

если что-то конкретное то спрашивай помогу а так извини я не силен в директХ ни в си ни в васике, и абы как переводить неохота
ps http://www.vbstreets.ru/VB/Sources/42768.aspx может поможет
Ничто так не ограничивает полёт мысли программиста, как компилятор


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 139

    TopList