mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 18:10:56 +01:00
fixup! lavc/rkmppenc: add RKMPP H264 and HEVC encoder
enable some YUVJ formats. Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
parent
ea8a622db1
commit
37d4c2129b
2 changed files with 22 additions and 0 deletions
|
|
@ -41,8 +41,11 @@ static MppFrameFormat rkmpp_get_mpp_fmt_h26x(enum AVPixelFormat pix_fmt)
|
|||
{
|
||||
switch (pix_fmt) {
|
||||
case AV_PIX_FMT_GRAY8: return MPP_FMT_YUV400;
|
||||
case AV_PIX_FMT_YUVJ420P:
|
||||
case AV_PIX_FMT_YUV420P: return MPP_FMT_YUV420P;
|
||||
case AV_PIX_FMT_YUVJ422P:
|
||||
case AV_PIX_FMT_YUV422P: return MPP_FMT_YUV422P;
|
||||
case AV_PIX_FMT_YUVJ444P:
|
||||
case AV_PIX_FMT_YUV444P: return MPP_FMT_YUV444P;
|
||||
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
||||
case AV_PIX_FMT_NV21: return MPP_FMT_YUV420SP_VU;
|
||||
|
|
@ -68,6 +71,7 @@ static MppFrameFormat rkmpp_get_mpp_fmt_h26x(enum AVPixelFormat pix_fmt)
|
|||
static MppFrameFormat rkmpp_get_mpp_fmt_mjpeg(enum AVPixelFormat pix_fmt)
|
||||
{
|
||||
switch (pix_fmt) {
|
||||
case AV_PIX_FMT_YUVJ420P:
|
||||
case AV_PIX_FMT_YUV420P: return MPP_FMT_YUV420P;
|
||||
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
||||
case AV_PIX_FMT_YUYV422: return MPP_FMT_YUV422_YUYV;
|
||||
|
|
@ -292,7 +296,13 @@ static int rkmpp_set_enc_cfg_prep(AVCodecContext *avctx, AVFrame *frame)
|
|||
mpp_enc_cfg_set_s32(cfg, "prep:colorspace", avctx->colorspace);
|
||||
mpp_enc_cfg_set_s32(cfg, "prep:colorprim", avctx->color_primaries);
|
||||
mpp_enc_cfg_set_s32(cfg, "prep:colortrc", avctx->color_trc);
|
||||
|
||||
mpp_enc_cfg_set_s32(cfg, "prep:colorrange", avctx->color_range);
|
||||
if (r->pix_fmt == AV_PIX_FMT_YUVJ420P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ422P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ444P) {
|
||||
mpp_enc_cfg_set_s32(cfg, "prep:colorrange", AVCOL_RANGE_JPEG);
|
||||
}
|
||||
|
||||
if (is_afbc) {
|
||||
const AVDRMLayerDescriptor *layer = &drm_desc->layers[0];
|
||||
|
|
@ -615,7 +625,9 @@ static MPPEncFrame *rkmpp_submit_frame(AVCodecContext *avctx, AVFrame *frame)
|
|||
|
||||
/* planar YUV quirks */
|
||||
if ((r->pix_fmt == AV_PIX_FMT_YUV420P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ420P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUV422P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ422P ||
|
||||
r->pix_fmt == AV_PIX_FMT_NV24) && (drm_frame->width % 2)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unsupported width '%d', not 2-aligned\n",
|
||||
drm_frame->width);
|
||||
|
|
@ -636,7 +648,13 @@ static MPPEncFrame *rkmpp_submit_frame(AVCodecContext *avctx, AVFrame *frame)
|
|||
mpp_frame_set_colorspace(mpp_frame, avctx->colorspace);
|
||||
mpp_frame_set_color_primaries(mpp_frame, avctx->color_primaries);
|
||||
mpp_frame_set_color_trc(mpp_frame, avctx->color_trc);
|
||||
|
||||
mpp_frame_set_color_range(mpp_frame, avctx->color_range);
|
||||
if (r->pix_fmt == AV_PIX_FMT_YUVJ420P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ422P ||
|
||||
r->pix_fmt == AV_PIX_FMT_YUVJ444P) {
|
||||
mpp_frame_set_color_range(mpp_frame, AVCOL_RANGE_JPEG);
|
||||
}
|
||||
|
||||
layer = &drm_desc->layers[0];
|
||||
plane0 = &layer->planes[0];
|
||||
|
|
|
|||
|
|
@ -186,8 +186,11 @@ static const AVOption mjpeg_options[] = {
|
|||
static const enum AVPixelFormat rkmpp_enc_pix_fmts_h26x[] = {
|
||||
AV_PIX_FMT_GRAY8,
|
||||
AV_PIX_FMT_YUV420P,
|
||||
AV_PIX_FMT_YUVJ420P,
|
||||
AV_PIX_FMT_YUV422P,
|
||||
AV_PIX_FMT_YUVJ422P,
|
||||
AV_PIX_FMT_YUV444P,
|
||||
AV_PIX_FMT_YUVJ444P,
|
||||
AV_PIX_FMT_NV12,
|
||||
AV_PIX_FMT_NV21,
|
||||
AV_PIX_FMT_NV16,
|
||||
|
|
@ -211,6 +214,7 @@ static const enum AVPixelFormat rkmpp_enc_pix_fmts_h26x[] = {
|
|||
|
||||
static const enum AVPixelFormat rkmpp_enc_pix_fmts_mjpeg[] = {
|
||||
AV_PIX_FMT_YUV420P,
|
||||
AV_PIX_FMT_YUVJ420P,
|
||||
AV_PIX_FMT_NV12,
|
||||
AV_PIX_FMT_YUYV422,
|
||||
AV_PIX_FMT_UYVY422,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue