[FFmpeg-devel] [PATCH] Add support for RockChip Media Process Platform

James Almer jamrial at gmail.com
Thu Sep 14 00:06:13 EEST 2017


On 9/11/2017 5:21 AM, LongChair . wrote:
> 
> 
> Le 10/09/2017 à 19:13, James Almer a écrit :
>> On 9/9/2017 4:00 AM, LongChair . wrote:
>>> From: LongChair <LongChair at hotmail.com>
>>>
>>> This adds hardware decoding for h264 / HEVC / VP8 using MPP Rockchip API.
>>> Will return frames holding an AVDRMFrameDescriptor struct in buf[0] that allows drm / dmabuf usage.
>>> Was tested on RK3288 (TinkerBoard) and RK3328.
>>>
>>> Changes from Previous patch :
>>> - Frame colorspace info is now filled.
>>> - Frame interlacing is now filled (Note : currently had a bug in mpp which will be fixed soon by rockchip, will set the frame to progressive).
>>> - hw_frame_context returns none as format for the rockchip specific 10 bits.
>>> - Added support for MPEG4 codec
>>> - Added support for VP9 codec.
>>> - the ION format has been kept for MPP init (rather than DRM) as this is the only one working right, using DRM format will cause assertions upon close.
>>> - Other minor comments have been taken into account
>>> ---
>>>  Changelog              |   1 +
>>>  configure              |  16 ++
>>>  libavcodec/Makefile    |   5 +
>>>  libavcodec/allcodecs.c |   5 +
>>>  libavcodec/rkmppdec.c  | 584 +++++++++++++++++++++++++++++++++++++++++++++++++
>>>  5 files changed, 611 insertions(+)
>>>  create mode 100644 libavcodec/rkmppdec.c
>>> +#define RKMPP_DEC(NAME, ID, BSFS) \
>>> +    RKMPP_DEC_CLASS(NAME) \
>>> +    AVCodec ff_##NAME##_rkmpp_decoder = { \
>>> +        .name           = #NAME "_rkmpp", \
>>> +        .long_name      = NULL_IF_CONFIG_SMALL(#NAME " (rkmpp)"), \
>>> +        .type           = AVMEDIA_TYPE_VIDEO, \
>>> +        .id             = ID, \
>>> +        .priv_data_size = sizeof(RKMPPDecodeContext), \
>>> +        .init           = rkmpp_init_decoder, \
>>> +        .close          = rkmpp_close_decoder, \
>>> +        .receive_frame  = rkmpp_receive_frame, \
>>> +        .flush          = rkmpp_flush, \
>>> +        .priv_class     = &rkmpp_##NAME##_dec_class, \
>>> +        .capabilities   = AV_CODEC_CAP_DELAY, \
>> Add AV_CODEC_CAP_AVOID_PROBING as well.
> What would that flag change ?

Avoids using this decoder for probing. Read the flag's doxy in avcodec.h
for the rationale.

>>
>>> +        .caps_internal  = FF_CODEC_CAP_SETS_PKT_DTS, \
>> It doesn't look like you're setting pkt_dts anywhere?
> True, I can remove that one.
>>
>>> +        .pix_fmts       = (const enum AVPixelFormat[]) { AV_PIX_FMT_DRM_PRIME, \
>>> +                                                         AV_PIX_FMT_NONE}, \
>>> +        .bsfs           = BSFS, \
>>> +    };
>>> +
>>> +RKMPP_DEC(h264,  AV_CODEC_ID_H264,          "h264_mp4toannexb")
>>> +RKMPP_DEC(hevc,  AV_CODEC_ID_HEVC,          "hevc_mp4toannexb")
>>> +RKMPP_DEC(mpeg4, AV_CODEC_ID_MPEG4,         NULL)
>>> +RKMPP_DEC(vp8,   AV_CODEC_ID_VP8,           NULL)
>>> +RKMPP_DEC(vp9,   AV_CODEC_ID_VP9,           NULL)
>>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 



More information about the ffmpeg-devel mailing list