[Libva] linux vaapi h.264 encoding haswell hd graphics 4600

Nik Orlov nikitos1550 at yandex.ru
Thu Mar 27 03:57:20 PDT 2014


Hello!

I have ubuntu-desktop 13.10 amd64 on core i7 4770 (Haswell, HD graphics 4600).
I have installed vaapi (libva from sources 1.3.0).

There is h264encode test. I have started it:

user at video-ubuntu:~/VAAPI/libva-1.3.0/test/encode$ ./h264encode -w 3840 -h 1080 -framecount 1 -f 25
Source frame is 3840x1080 and will code clip to 3840x1088 with crop


INPUT:Try to encode H264...
INPUT: RateControl  : VBR
INPUT: Resolution   : 3840x1080, 1 frames
INPUT: FrameRate    : 25
INPUT: Bitrate      : 24883200
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.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
Use profile VAProfileH264High
Support rate control mode (0x12):CBR CQP 
Support VAConfigAttribEncPackedHeaders
Support packed sequence headers
Support packed picture headers
Support packed misc headers
Support 1 RefPicList0 and 1 RefPicList1
Loading data into surface 15.....Complete surface loading
      |00000000(485835 bytes coded)

PERFORMANCE:   Frame Rate           : 0.06 fps (1 frames, 16500 ms (16500.00 ms per frame))
PERFORMANCE:   Compression ratio    : 12:1
PERFORMANCE:     UploadPicture      : 16444 ms (16444.00, 99.66% percent)
PERFORMANCE:     vaBeginPicture     : 0 ms (0.00, 0.00% percent)
PERFORMANCE:     vaRenderHeader     : 0 ms (0.00, 0.00% percent)
PERFORMANCE:     vaEndPicture       : 3 ms (3.00, 0.02% percent)
PERFORMANCE:     vaSyncSurface      : 32 ms (32.00, 0.19% percent)
PERFORMANCE:     SavePicture        : 0 ms (0.00, 0.00% percent)
PERFORMANCE:     Others             : 21 ms (21.00, 0.13% percent)
(Multithread enabled, the timing is only for reference)


And other way

user at video-ubuntu:~/VAAPI/libva-1.3.0/test/encode$ ./h264encode -w 3840 -h 1080 -framecount 2500 -f 25
Source frame is 3840x1080 and will code clip to 3840x1088 with crop


INPUT:Try to encode H264...
INPUT: RateControl  : VBR
INPUT: Resolution   : 3840x1080, 2500 frames
INPUT: FrameRate    : 25
INPUT: Bitrate      : 24883200
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.35.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
Use profile VAProfileH264High
Support rate control mode (0x12):CBR CQP 
Support VAConfigAttribEncPackedHeaders
Support packed sequence headers
Support packed picture headers
Support packed misc headers
Support 1 RefPicList0 and 1 RefPicList1
Loading data into surface 15.....Complete surface loading
      \00002499(719089 bytes coded)

PERFORMANCE:   Frame Rate           : 53.70 fps (2500 frames, 46555 ms (18.62 ms per frame))
PERFORMANCE:   Compression ratio    : 11:1
PERFORMANCE:     UploadPicture      : 16364 ms (6.55, 35.15% percent)
PERFORMANCE:     vaBeginPicture     : 2 ms (0.00, 0.00% percent)
PERFORMANCE:     vaRenderHeader     : 18 ms (0.01, 0.04% percent)
PERFORMANCE:     vaEndPicture       : 1098 ms (0.44, 2.36% percent)
PERFORMANCE:     vaSyncSurface      : 21385 ms (8.55, 45.93% percent)
PERFORMANCE:     SavePicture        : 8759 ms (3.50, 18.81% percent)
PERFORMANCE:     Others             : -1071 ms (1717986.49, 9225574.54% percent)
(Multithread enabled, the timing is only for reference)


So, when test encodes more frames time for encoding 1 frame is about 20ms.
Why it is so? 

My primary question, if I want to encode video in real time (It means camera sends me frame each 40ms), what time for encoding 1 frame I will get?
As I understand programm sends some data to GPU, GPU encodes video and then send me encoded data back.
How much time takes sending data to GPU and back? 

Maybe it will possible to encode each frame in real time, or maybe it isn`t possible, but It is possible to keep some buffer (for example for 25 frames - 1 sec of video) and than encode ot very fast.

-- 
Ник Орлов mailto:nikitos1550 at yandex.ru


More information about the Libva mailing list