Всем привет. Я решил попробовать аппаратное кодирование в H264 с помощью VAAPI. У меня Optimus: Intel HD 4000 и NVIDIA GeForce 650M. Установил gstreamer-devel из репозитория и gstreamer-vaapi вручную. Пробую кодировать:
$ LD_LIBRARY_PATH=/usr/local/lib64 LIBVA_DRIVER_NAME=i965 gst-launch-1.0 -f ximagesrc use-damage=0 ! videoconvert ! video/x-raw,format=NV12,framerate=24/1 ! vaapiencode_h264 ! progressreport ! avimux ! filesink location=/media/disk-1/desktop/test.avi
Установка конвейера в состояние PAUSED…
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
gst-launch-1.0: intel_driver.c:80: intel_driver_init: Проверочное утверждение «(((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI1)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI2)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_CUSTOM))» не выполнено.
Аварийный останов
$ LIBVA_DRIVER_NAME=i965 h264encode
INPUT:Try to encode H264...
INPUT: RateControl : VBR
INPUT: Resolution : 176x144, 60 frames
INPUT: FrameRate : 30
INPUT: Bitrate : 182476
INPUT: Slieces : 1
INPUT: IntraPeriod : 30
INPUT: IDRPeriod : 60
INPUT: IpPeriod : 1
INPUT: Initial QP : 26
INPUT: Min QP : 0
INPUT: Source YUV : AUTO generated
INPUT: Coded Clip : /tmp/test.264
INPUT: Rec Clip : Not save reconstructed frame
libva info: VA-API version 0.34.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_34
h264encode: intel_driver.c:80: intel_driver_init: Assertion `(((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI1)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_DRI2)) || (((struct drm_state *)(ctx)->drm_state)->auth_type == (VA_DRM_AUTH_CUSTOM))' failed.
Аварийный останов
А это обязательно - поднять иксы на видеокарте, на которой будет осуществляться кодирование? Просто когда на NVIDIA не подняты иксы, CUDA спокойно работает. На Intel сейчас работает драйвер modesetting вместо intel, я думаю многие узнали в моей конфигурации официальный Optimus от NVIDIA. Неужели придётся менять его на Bumblebee?