Официальный сайт студ.городка НГТУ
Программирование и БД » Кодек видео 

#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

#2  26.03.13 14:54

Re: Кодек видео

глянь первый пост

Offline

#3  29.03.13 11:20

Re: Кодек видео

проблема решилась силами ffmpeg

Offline

Программирование и БД » Кодек видео 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.022 сек.
Выполнено 11 запросов.