Your SlideShare is downloading. ×
Декодирование видео на GPU
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Декодирование видео на GPU

1,543
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,543
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Декодирование видео на современных видеокартах Арсаев Марат Video Group CS MSU Graphics & Media Lab 19.05.2010
  • 2. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Аппаратная поддержка  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 2
  • 3. Only for Maxus  Кодирование видео CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 3
  • 4. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Microsoft DirectX Video Acceleration  Аналоги для Linux  Аппаратная поддержка  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 4
  • 5. Only for Maxus  Microsoft DirectX Video Acceleration 5 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ http://vistastyles.org/
  • 6. Only for Maxus  Microsoft DirectX Video Acceleration: MPC-HС CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 6
  • 7. Only for Maxus  Microsoft DirectX Video Acceleration: MPC-HС CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 7
  • 8. Only for Maxus  Microsoft DirectX Video Acceleration Состоит из Device Driver Interface:  Motion Compensation DDI (decoder DDI)  ProcAmp DDI (post-processing DDI)  Deinterlacing DDI  COPP DDI (security DDI) Вышла в декабре 2002 года. CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 8
  • 9. Only for Maxus  Microsoft DirectX Video Acceleration Для того чтобы DXVA заработал, необходимо:  Программный декодер с необходимыми DXVA вызовами  Системный DXVA-драйвер (входит в DirectX)  Видео драйвер, поддерживающий запрашиваемые вызовы  Видеокарту с аппаратной поддержкой требуемых функций CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 9
  • 10. Only for Maxus  Поток данных DirectShow Фильтр Программный источника декодер потока Рендерер Видеодрайвер (VMREMR) Дополнительный источник DXVA работает тут CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 10
  • 11. Only for Maxus  Decoder DDI Поддерживаемые стандарты: MPEG-1, MPEG-2, MPEG-4, H.263, H.264, VC-1 Будут ускорены аппаратно только те части декодирования, которые мы сконфигурируем CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 11
  • 12. Only for Maxus  Deinterlace DDI Доступные алгоритмы деинтерлейсинга:  Bob (line doubling)  Simple Switching Adaptive  Motion Vector Steered  Advanced 3D Adaptive CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 12
  • 13. Only for Maxus  Deinterlace DDI None Bob ATI Vector Adaptive CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 13
  • 14. Only for Maxus  Deinterlace DDI Доступные алгоритмы преобразования частоты кадров:  Frame Repeat/Drop  Linear Temporal Interpolation  Motion Vector Steered CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 14
  • 15. Only for Maxus  ProcAmp DDI  Предоставляет возможность улучшить визуальное качество  Предоставляет возможность автоматической регулировки параметров видеокартой CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 15
  • 16. Only for Maxus  Использование Microsoft DXVA Работа с DXVA идет через фильтры DirectShow и состоит из следующих шагов:  Запрос возможностей устройства (от определенного типа видео)  Подготовка рендерера  Выделение буферов в видеопамяти  Выполнение CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 16
  • 17. Only for Maxus  Microsoft DXVA 2.0  Доступен, начиная с DirectX 10 (2006 год)  Новый интерфейс – Capture DDI  Позволяет обходить ограничения на DirectShow pipeline  Использует Enhanced Video Renderer (EVR)  Дополнительный стандарт – DXVA-HD CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 17
  • 18. Only for Maxus  Microsoft DXVA: резюме + Хорошо описанный интерфейс с множеством форматов + Активная поддержка со стороны производителей железа и ПО (Adobe Flash, CoreAVC, ffdshow, Media Player Classic, и т.д.) - Довольно сложное программирование - Привязан к Microsoft DirectX CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 18
  • 19. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Microsoft DirectX Video Acceleration  Аналоги для Linux  Аппаратная поддержка  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 19
  • 20. Only for Maxus  Иерархия расширений X Window System X-Video Motion X-Video extension Video Compensation Acceleration API (libVA) VDPAU (Video Decode and X-Video Bitstream Presentation API for Unix) Acceleration (XvBA) CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 20
  • 21. Only for Maxus  X-Video extension Расширение отвечает за проигрывание и вывод видео в системе X Window (c 1991 года)  Поддержка framebuffer object  Возможность вывода на удаленный X Window сервер  Возможность аппаратного линейного скейлинга, конвертирования форматов CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 21
  • 22. Only for Maxus  X-Video Motion Compensation Частичное добавление аппаратного декодирования для MPEG-1, MPEG-2, MPEG-4:  Motion compensation  iDCT  Variable Length Encoding (VLD) Поддержка множества видеокарт – NVIDIA, VIA, Intel, S3 с 2002 года. ATI сделали поддержку совсем недавно CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 22
  • 23. Only for Maxus  X-Video Motion Compensation XvMCContext Video Pipeline StreamInput XvPort XvMCSurfaces Rendering XvMCSubpictures CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 23
  • 24. Only for Maxus  Video Acceleration API Создана для замещения XvMC c использованием последних возможностей GPU Возможности:  Motion compensation  iDCT (+ Modified iDCT)  In-loop Deblocking filter  Intra-frame prediction  Обратное квантование  Variable Length Decoding  Пространственно-временной деинтерлейсинг  Context-adaptive binary arithmetic coding / Context-adaptive variable-length coding Для видео в формате MPEG-2, H.264, VC-1 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 24
  • 25. Only for Maxus  Video Acceleration API Поддерживается обмен данными с X Window сервером через Direct Rendering Infrastructure Благодаря удобному интерфейсу и расширенным возможностям получил развитие от NVIDIA и ATI 25 http://www.freedesktop.org/wiki/Software/vaapi CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
  • 26. Only for Maxus  Video Acceleration API: Compiz 26 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ http://www.compiz.org/
  • 27. Only for Maxus  Video Decode and Presentation API for Unix  Открытая библиотека (libvdpau) - back-end VAAPI от Nvidia (2007 год)  Распространяется и в виде библиотеки, отдельной от драйверов  Поддерживается некоторыми видеокартами S3  Три поколения с наращиваемым функционалом CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 27
  • 28. Only for Maxus  Video Decode and Presentation API for Unix Реализует MC, iDCT, VLD, Deblocking, Deinterlacing для стандартов  MPEG-1  MPEG-2  MPEG-4  H.264  VC-1 Во второе поколение в стандарт добавлены подавление шума и шарпен 28 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
  • 29. Only for Maxus  X-Video Bitstream Acceleration  Back-end для VAAPI от ATI (2009 год)  Поддержка MPEG-2, H.264, VC-1  Поддержка для ограниченного набора GPU (начиная с 4xxx)  Поддержка базовых операций:  Motion compensation  iDCT  VLD CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 29
  • 30. Only for Maxus  Сравнение декодеров Supported formats Supported operation DXVA MPEG, H.264, VC-1 basic, FRC, DI, CE, IQ, encryption Xv - rescaling, format conversion XvMC MPEG, H.264 basic, DI VA API MPEG, H.264, VC-1 basic, DI, FRC, IQ VDPAU MPEG, H.264, VC-1 basic, DI, denoising, sharpen XvBA H.264, VC-1 basic, DI basic – Bit stream decoding FRC – Frame Rate Conversion CE – Color Enhancement DI – deinterlacing IQ – inverted quantization CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 30
  • 31. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Аппаратная поддержка  Nvidia PureVideo  ATI AVIVO & Unified Video Decoder  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 31
  • 32. Only for Maxus  Nvidia PureVideo  Помогает в декодировании и пост-обработке видео  Доступна c GeForce 6xxx  Технология используется практически во всех программных DVD/HD-плеерах  Продается отдельный DirectShow декодер – Nvidia PureVideo Decoder CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 32
  • 33. Only for Maxus  Nvidia PureVideo 1st gen Опубликован для видеокарт серии 6ххх (2004 год):  использовался VMR9  улучшено визуальное качество деинтерлейсинга и рескейлинга  использовался в части MPEG-1/MPEG-2 decoding pipeline  начиная с 6600 (2005 год) – полная акселерация MPEG-1/MPEG-2 decoding pipeline, ограниченная поддержка VC-1 и H.264 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 33
  • 34. Only for Maxus  Nvidia PureVideo 2nd gen HD Начиная с видеокарт серии 8ххх (2007):  переделанный H.264 pipeline полностью на GPU  большая часть декодера VC-1 на GPU  технология позволяла среднему компьютеру проигрывать HD-DVD и Blu-ray фильмы без задержек CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 34
  • 35. Only for Maxus  Nvidia PureVideo 3rd gen HD На некоторых картах 8-ой и 9-ой серий (2008):  полностью поддеживаемый декодинг VC-1  минорные изменения в декодировании MPEG-2  соответствует поддержке Video Decode and Presentation API for Unix feature set B CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 35
  • 36. Only for Maxus  Nvidia PureVideo 4th gen HD На картах 3хх и некоторых 2хх (2009):  полная поддержка декодировании MPEG-4 ASP  высококачественный рескейлер  снятие ограничений для H.264  cоответствует поддержке Video Decode and Presentation API for Unix feature set С CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 36
  • 37. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Аппаратная поддержка  Nvidia PureVideo  ATI AVIVO & Unified Video Decoder  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 37
  • 38. Only for Maxus  ATI AVIVO Начиная с видеокарт X-серии (2005 год) поддерживаются:  автоматическое регулирование цветности, денойзинг, шарпен  частичное декодирование форматов H.264, VC-1, WMV9, MPEG-2 (кроме декодирования битового потока)  адаптивный деинтерлейсинг, скейлинг CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 38
  • 39. Only for Maxus  ATI Unified Video Decoder/ Unified Video Decoder+ В первом поколении, доступном с 2ххх серии (2007 год):  полная поддержка VC-1, AVC/H.264  поддержка MPEG-2 в виде шейдеров  обширный пост-процессинг: denoising, deinterlacing, scaling/resizing, in-loop deblocking CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 39
  • 40. Only for Maxus  ATI Unified Video Decoder 2.0 Во втором поколении, доступном с 4ххх серии (2008 год):  полная поддержка декодирования потоков VC-1, AVC/H.264, MPEG-2  декодирование двойного потока  Picture-in-picture  полностью BD-Live совместима CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 40
  • 41. Only for Maxus  ATI UVD vs. NV PureVideo  Ситуация такова, что пользователь не проиграет  Современные графические процессоры управляются с потоком любой сложности  Загрузка CPU – минимальна  Качество картинки – на усмотрение пользователя CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 41
  • 42. Only for Maxus  ATI UVD vs. NV PureVideo ATI AVIVO CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 42 http://www.hardwareheaven.com/reviews.php?reviewid=552
  • 43. Only for Maxus  ATI UVD vs. NV PureVideo NVIDIA PureVideo CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 43 http://www.hardwareheaven.com/reviews.php?reviewid=552
  • 44. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Аппаратная поддержка  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 44
  • 45. Only for Maxus  Библиотека NVCUVID  Предоставляет возможность управлять процессором декодирования  Поддерживает MPEG-1, MPEG-2, H.264  Декодированный кадр сразу сохраняется в CUDA Device Memory  Позволяет отображать видео (D3D или OGL) или выгружать кадры из видеопамяти CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 45
  • 46. Only for Maxus  Библиотека NVCUVID Последовательность действий:  Разобрать исходное видео (с помощью API)  Декодировать очередной кадр (с помощью API)  Произвести изменения кадра (пост-обработка)  Вывести кадр на экран (с помощью 3D API) CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 46
  • 47. Only for Maxus  Создание декодера Пользователь заполняет структуру CUVIDDECODECREATEINFO для вызова cuvidCreateDecoder(), с информацией входного кадра:  тип кодека  размеры кадра  цветовой формат Также пользователь указывает параметры выходных данных:  размеры кадра  цветовой формат  количество кадров CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 47
  • 48. Only for Maxus  Создание декодера #include <cuvid/cuviddec.h> #include <cuvid/nvcuvid.h> … Cuvideodecoder oDecoder ; CUVIDDECODECREATEINFO oVideoDecodeCreateInfo_; memset(&oVideoDecodeCreateInfo_, 0, sizeof(CUVIDDECODECREATEINFO)); oVideoDecodeCreateInfo_.CodecType= cudaVideoCodec_H264; oVideoDecodeCreateInfo_.ulWidth = 1280; oVideoDecodeCreateInfo_.ulHeight = 720; oVideoDecodeCreateInfo_.ChromaFormat = cudaVideoChromaFormat_420; oVideoDecodeCreateInfo_.OutputFormat = cudaVideoSurfaceFormat_NV12; oVideoDecodeCreateInfo_.DeinterlaceMode = cudaVideoDeinterlaceMode_Adaptive; … cuvidCreateDecoder(&oDecoder, &oVideoDecodeCreateInfo_); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 48
  • 49. Only for Maxus  Декодирование кадра Для вызова функции декодирования cuvidDecodePicture() пользователь заполняет структуру CUVIDPICPARAMS, содержащую :  информацию об интерлейсинге кадра  указатели на данные кадра  размеры кадра Декодер записывает кадры в очередь, откуда их можно достать по номеру CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 49
  • 50. Only for Maxus  Декодирование кадра Подготовка парсера CUVIDPARSERPARAMS oVideoParserParameters; Cuvideoparser hParser_; memset(&oVideoParserParameters, 0, sizeof(CUVIDPARSERPARAMS)); oVideoParserParameters.CodecType = cudaVideoCodec_H264; oVideoParserParameters.ulMaxDisplayDelay = 1; oVideoParserParameters.pUserData = &oParserData_; oVideoParserParameters.pfnDecodePicture = HandlePictureDecode; cuvidCreateVideoParser(&hParser_, &oVideoParserParameters); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 50
  • 51. Only for Maxus  Декодирование кадра Вызов декодера HandlePictureDecode(void * pUserData, CUVIDPICPARAMS * pPicParams) { cuvidDecodePicture(oDecoder, pPicParams); return true; } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 51
  • 52. Only for Maxus  Пост-обработка и отображение  Подготавливаем kernel  Отображение в память вызовом cuvidMapVideoFrame()  Вызов kernelа для обработки кадра вызовом сudaPostProcessFrame()  Отображение при помощи 3D API CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 52
  • 53. Only for Maxus  Пост-обработка и отображение #include “cudaModuleMgr.h” CUmoduleManager * g_pCudaModule; CUfunction g_mykernel; CUStream g_KernelSID; g_pCudaModule = new CUmoduleManager(“mykernel.ptx”, exec_path, nKernels, nGlobalMem, nTexRef); g_pCudaModule->GetCudaFunction(“my_main”, &g_mykernel); … GLuint gl_pbo = createPixelBufferObject(imageParams); cuGLRegisterBufferObject(gl_pbo); glutDisplayFunc(display); … void display(){ copyDecodedFrameToTexture(); render(); } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 53
  • 54. Only for Maxus  Пост-обработка и отображение void copyDecodedFrameToTexture() { CUdeviceptr pPBOData = 0; unsigned int nPBOPitch = 0; Cudeviceptr pDecodedFrame = 0; unsigned int nDecodedPitch = 0; CUVIDPARSERDISPINFO oDisplayInfo = queryImage(); CUVIDPROCPARAMS oVideoProcessingParameters = fillParameters(); cuvidMapVideoFrame(oDecoder, oDisplayInfo.picture_index, &pDecodedFrame , &nDecodedPitch , &oVideoProcessingParameters); cuGLMapBufferObject( &pPBOData, &nPBOPitch, gl_pbo); … CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 54
  • 55. Only for Maxus  Пост-обработка и отображение … cudaPostProcessFrame(&pDecodedFrame, nDecodedPitch, &pPBOData, nPBOPitch, g_pCudaModule->getModule(), g_mykernel, g_KernelSID); SetKernelParameters(g_mykernel); cuLaunchGridAsync( g_mykernel, grid.x, grid.y, g_KernelSID); cuGLUnmapBufferObject(gl_pbo); cuvidUnmapVideoFrame(oDecoder_, &pDecodedFrame); } void render(){ glBindBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB, gl_pbo); glBindTexture (GL_TEXTURE_2D, t_tex); glTexSubImage2D (… , 0); DrawImage(); } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 55
  • 56. Only for Maxus  NVCUVID Резюме  Гибкая система пост-обработки  Все производится внутри видеопамяти  Кросс-платформенность CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 56
  • 57. Only for Maxus  Содержание  Введение  Интерфейсы обработки видео  Аппаратная поддержка  Декодирование на CUDA  Выводы CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 57
  • 58. Only for Maxus  Выводы  Каковы бы ни были условия входящего видеопотока – производители GPU будут готовы  Готовые декодеры удовлетворяют большинству требований пользователя, для определенных нужд – можно запрограммировать свой CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 58
  • 59. Only for Maxus  Список литературы 1. http://www.freedesktop.org/wiki/Software/vaapi VA API 2. http://msdn.microsoft.com/en-us/library/ms798379.aspx DirectX Video Acceleration 3. http://msdn.microsoft.com/en-us/library/aa965263(VS.85).aspx DirectX Video Acceleration 2.0 4. http://forum.doom9.org/ Doom9's Forum 5. http://cbaoth.dk/~cbaoth/nvcuvid.pdf CUDA Video Decoder API 6. http://nvworld.ru/utilities/dxvacheck/ DXVA Checker 7. http://www.hardwareheaven.com/reviews.php?reviewid=552&pageid=14 UVD vs PureVideo CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 59
  • 60. Only for Maxus  Лаборатория компьютерной графики и мультимедиа Видеогруппа это:  Выпускники в аспирантурах Англии, Франции, Швейцарии (в России в МГУ и ИПМ им. Келдыша)  Выпускниками защищено 5 диссертаций  Наиболее популярные в мире сравнения видеокодеков  Более 3 миллионов скачанных фильтров обработки видео CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 60

×