#1 25.03.13 14:45
Кодек видео
Есть кодеки, которые кодируют/декодируют видео на CPU. Хотелось бы каких-нибудь кодеков, которые делают это на GPU. Конкретно хочется XviD. Кто-нибудь с таким сталкивался? Где такое можно взять?
Поставим по другому вопрос:
беру семпл отсюда: http://docs.nvidia.com/cuda/cuda-sample … brary--api
и хочу фреймы, пожатые карточкой положить в avi контейнер, чтобы их потом можно было посмотреть каким-нить проигрывателем.
делаю так:
Код::
int bitmap_dx = 1920;
int bitmap_dy = 1080;
g_bitMapInfo.bmiHeader.biSize = sizeof(g_bitMapInfo.bmiHeader);
g_bitMapInfo.bmiHeader.biWidth = bitmap_dx;
g_bitMapInfo.bmiHeader.biHeight = bitmap_dy;
g_bitMapInfo.bmiHeader.biPlanes = 1;
g_bitMapInfo.bmiHeader.biBitCount = 24;
g_bitMapInfo.bmiHeader.biCompression = BI_RGB;
g_bitMapInfo.bmiHeader.biSizeImage = (DWORD)(bitmap_dx*bitmap_dy*3);
g_bitMapInfo.bmiHeader.biXPelsPerMeter = 0;
g_bitMapInfo.bmiHeader.biYPelsPerMeter = 0;
g_bitMapInfo.bmiHeader.biClrUsed = 0;
g_bitMapInfo.bmiHeader.biClrImportant = 0;
// заполнение структуры информации о файле
ZeroMemory(&g_asiOutput, sizeof AVISTREAMINFO);
g_asiOutput.fccType = streamtypeVIDEO;
g_asiOutput.dwScale = 1;
g_asiOutput.dwRate = 25;
g_asiOutput.dwLength = 60;
g_asiOutput.dwSampleSize = g_bitMapInfo.bmiHeader.biSizeImage;
g_asiOutput.rcFrame.right = g_bitMapInfo.bmiHeader.biWidth;
g_asiOutput.rcFrame.bottom = g_bitMapInfo.bmiHeader.biHeight;
strcpy(g_asiOutput.szName, "Video #1");
AVIFileInit();
_mkdir("video");
// имя файла в формате: "video_год_месяц_день_час_минута_секунда.wav"
time_t _Time;
struct tm _Tm;
_Time = time(NULL);
localtime_s(&_Tm, &_Time);
char filename[_MAX_PATH];
sprintf(filename, "video/video_%d_%02d_%02d_%02d_%02d_%02d.avi", 1900+_Tm.tm_year, _Tm.tm_mon+1, _Tm.tm_mday, _Tm.tm_hour, _Tm.tm_min, _Tm.tm_sec);
// Создание нового avi-файла
if (AVIFileOpen(&g_pafOutput, filename, OF_WRITE | OF_CREATE, 0) != 0) {
AVIFileExit();
return;
}
// создание нового AVI потока
if (AVIFileCreateStream(g_pafOutput, &g_pasOutput, &g_asiOutput) != 0) {
AVIStreamRelease(g_pasOutput);
AVIFileRelease (g_pafOutput);
AVIFileExit ();
return;
}
HRESULT hr = AVIStreamSetFormat(g_pasOutput, 0, &g_bitMapInfo.bmiHeader, sizeof BITMAPINFOHEADER);
// запонение информации о заголовке Bitmap. Будет использоваться для установки формата AVI потока
if (hr != 0) {
AVIStreamRelease(g_pasOutput);
AVIStreamRelease(g_pCompressedStream);
AVIFileRelease (g_pafOutput);
AVIFileExit ();
return;
}
....
static int num = 0;
HRESULT hr = AVIStreamWrite(g_pasOutput, num++, 1, reinterpret_cast <void*> (cb), nBytesInBuffer, 0, NULL, NULL);
if (S_OK != hr) {
std::cout << "ERROR!\n";
system("pause");
exit(0);
}программа отрабатывает без ошибок, завершается удачно. avi-шка создается и даже открывается WMP. но в ней я вижу только черный экран.
Исправлено Flinn (26.03.13 14:53)
Offline

