libavcodec: v4l2: add support for v4l2 mem2mem codecs
This patchset enhances Alexis Ballier's original patch and validates it using Qualcomm's Venus hardware (driver recently landed upstream [1]). This has been tested on Qualcomm's DragonBoard 410c and 820c Configure/make scripts have been validated on Ubuntu 10.04 and 16.04. Tested decoders: - h264 - h263 - mpeg4 - vp8 - vp9 - hevc Tested encoders: - h264 - h263 - mpeg4 Tested transcoding (concurrent encoding/decoding) Some of the changes introduced: - v4l2: code cleanup and abstractions added - v4l2: follow the new encode/decode api. - v4l2: fix display size for NV12 output pool. - v4l2: handle EOS (EPIPE and draining) - v4l2: vp8 and mpeg4 decoding and encoding. - v4l2: hevc and vp9 support. - v4l2: generate EOF on dequeue errors. - v4l2: h264_mp4toannexb filtering. - v4l2: fixed make install and fate issues. - v4l2: codecs enabled/disabled depending on pixfmt defined - v4l2: pass timebase/framerate to the context - v4l2: runtime decoder reconfiguration. - v4l2: add more frame information - v4l2: free hardware resources on last reference being released - v4l2: encoding: disable b-frames for upstreaming (patch required) [1] https://lwn.net/Articles/697956/ System Level view: v42l_m2m_enc/dec --> v4l2_m2m --> v4l2_context --> v4l2_buffers Reviewed-by: Jorge Ramirez <jorge.ramirez-ortiz@linaro.org> Reviewed-by: Alexis Ballier <aballier@gentoo.org> Tested-by: Jorge Ramirez <jorge.ramirez-ortiz@linaro.org> Signed-off-by: wm4 <nfxjfg@googlemail.com>
This commit is contained in:
parent
afe674734b
commit
1ef7752d64
14 changed files with 2757 additions and 0 deletions
|
@ -208,8 +208,10 @@ static void register_all(void)
|
|||
REGISTER_ENCDEC (H263, h263);
|
||||
REGISTER_DECODER(H263I, h263i);
|
||||
REGISTER_ENCDEC (H263P, h263p);
|
||||
REGISTER_ENCDEC (H263_V4L2M2M, h263_v4l2m2m);
|
||||
REGISTER_DECODER(H264, h264);
|
||||
REGISTER_DECODER(H264_CRYSTALHD, h264_crystalhd);
|
||||
REGISTER_ENCDEC (H264_V4L2M2M, h264_v4l2m2m);
|
||||
REGISTER_DECODER(H264_MEDIACODEC, h264_mediacodec);
|
||||
REGISTER_DECODER(H264_MMAL, h264_mmal);
|
||||
REGISTER_DECODER(H264_QSV, h264_qsv);
|
||||
|
@ -220,6 +222,7 @@ static void register_all(void)
|
|||
REGISTER_ENCDEC (HAP, hap);
|
||||
REGISTER_DECODER(HEVC, hevc);
|
||||
REGISTER_DECODER(HEVC_QSV, hevc_qsv);
|
||||
REGISTER_ENCDEC (HEVC_V4L2M2M, hevc_v4l2m2m);
|
||||
REGISTER_DECODER(HNM4_VIDEO, hnm4_video);
|
||||
REGISTER_DECODER(HQ_HQA, hq_hqa);
|
||||
REGISTER_DECODER(HQX, hqx);
|
||||
|
@ -254,6 +257,7 @@ static void register_all(void)
|
|||
REGISTER_ENCDEC (MPEG2VIDEO, mpeg2video);
|
||||
REGISTER_ENCDEC (MPEG4, mpeg4);
|
||||
REGISTER_DECODER(MPEG4_CRYSTALHD, mpeg4_crystalhd);
|
||||
REGISTER_ENCDEC (MPEG4_V4L2M2M, mpeg4_v4l2m2m);
|
||||
REGISTER_DECODER(MPEG4_MMAL, mpeg4_mmal);
|
||||
#if FF_API_VDPAU
|
||||
REGISTER_DECODER(MPEG4_VDPAU, mpeg4_vdpau);
|
||||
|
@ -263,8 +267,10 @@ static void register_all(void)
|
|||
REGISTER_DECODER(MPEG_VDPAU, mpeg_vdpau);
|
||||
REGISTER_DECODER(MPEG1_VDPAU, mpeg1_vdpau);
|
||||
#endif
|
||||
REGISTER_DECODER(MPEG1_V4L2M2M, mpeg1_v4l2m2m);
|
||||
REGISTER_DECODER(MPEG2_MMAL, mpeg2_mmal);
|
||||
REGISTER_DECODER(MPEG2_CRYSTALHD, mpeg2_crystalhd);
|
||||
REGISTER_DECODER(MPEG2_V4L2M2M, mpeg2_v4l2m2m);
|
||||
REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
|
||||
REGISTER_DECODER(MPEG2_MEDIACODEC, mpeg2_mediacodec);
|
||||
REGISTER_DECODER(MSA1, msa1);
|
||||
|
@ -362,6 +368,7 @@ static void register_all(void)
|
|||
REGISTER_DECODER(VC1IMAGE, vc1image);
|
||||
REGISTER_DECODER(VC1_MMAL, vc1_mmal);
|
||||
REGISTER_DECODER(VC1_QSV, vc1_qsv);
|
||||
REGISTER_DECODER(VC1_V4L2M2M, vc1_v4l2m2m);
|
||||
REGISTER_ENCODER(VC2, vc2);
|
||||
REGISTER_DECODER(VCR1, vcr1);
|
||||
REGISTER_DECODER(VMDVIDEO, vmdvideo);
|
||||
|
@ -373,7 +380,9 @@ static void register_all(void)
|
|||
REGISTER_DECODER(VP6F, vp6f);
|
||||
REGISTER_DECODER(VP7, vp7);
|
||||
REGISTER_DECODER(VP8, vp8);
|
||||
REGISTER_ENCDEC (VP8_V4L2M2M, vp8_v4l2m2m);
|
||||
REGISTER_DECODER(VP9, vp9);
|
||||
REGISTER_DECODER(VP9_V4L2M2M, vp9_v4l2m2m);
|
||||
REGISTER_DECODER(VQA, vqa);
|
||||
REGISTER_DECODER(BITPACKED, bitpacked);
|
||||
REGISTER_DECODER(WEBP, webp);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue