mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-24 02:20: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) {
|
switch (pix_fmt) {
|
||||||
case AV_PIX_FMT_GRAY8: return MPP_FMT_YUV400;
|
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_YUV420P: return MPP_FMT_YUV420P;
|
||||||
|
case AV_PIX_FMT_YUVJ422P:
|
||||||
case AV_PIX_FMT_YUV422P: return MPP_FMT_YUV422P;
|
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_YUV444P: return MPP_FMT_YUV444P;
|
||||||
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
||||||
case AV_PIX_FMT_NV21: return MPP_FMT_YUV420SP_VU;
|
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)
|
static MppFrameFormat rkmpp_get_mpp_fmt_mjpeg(enum AVPixelFormat pix_fmt)
|
||||||
{
|
{
|
||||||
switch (pix_fmt) {
|
switch (pix_fmt) {
|
||||||
|
case AV_PIX_FMT_YUVJ420P:
|
||||||
case AV_PIX_FMT_YUV420P: return MPP_FMT_YUV420P;
|
case AV_PIX_FMT_YUV420P: return MPP_FMT_YUV420P;
|
||||||
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
case AV_PIX_FMT_NV12: return MPP_FMT_YUV420SP;
|
||||||
case AV_PIX_FMT_YUYV422: return MPP_FMT_YUV422_YUYV;
|
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:colorspace", avctx->colorspace);
|
||||||
mpp_enc_cfg_set_s32(cfg, "prep:colorprim", avctx->color_primaries);
|
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:colortrc", avctx->color_trc);
|
||||||
|
|
||||||
mpp_enc_cfg_set_s32(cfg, "prep:colorrange", avctx->color_range);
|
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) {
|
if (is_afbc) {
|
||||||
const AVDRMLayerDescriptor *layer = &drm_desc->layers[0];
|
const AVDRMLayerDescriptor *layer = &drm_desc->layers[0];
|
||||||
|
|
@ -615,7 +625,9 @@ static MPPEncFrame *rkmpp_submit_frame(AVCodecContext *avctx, AVFrame *frame)
|
||||||
|
|
||||||
/* planar YUV quirks */
|
/* planar YUV quirks */
|
||||||
if ((r->pix_fmt == AV_PIX_FMT_YUV420P ||
|
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_YUV422P ||
|
||||||
|
r->pix_fmt == AV_PIX_FMT_YUVJ422P ||
|
||||||
r->pix_fmt == AV_PIX_FMT_NV24) && (drm_frame->width % 2)) {
|
r->pix_fmt == AV_PIX_FMT_NV24) && (drm_frame->width % 2)) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Unsupported width '%d', not 2-aligned\n",
|
av_log(avctx, AV_LOG_ERROR, "Unsupported width '%d', not 2-aligned\n",
|
||||||
drm_frame->width);
|
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_colorspace(mpp_frame, avctx->colorspace);
|
||||||
mpp_frame_set_color_primaries(mpp_frame, avctx->color_primaries);
|
mpp_frame_set_color_primaries(mpp_frame, avctx->color_primaries);
|
||||||
mpp_frame_set_color_trc(mpp_frame, avctx->color_trc);
|
mpp_frame_set_color_trc(mpp_frame, avctx->color_trc);
|
||||||
|
|
||||||
mpp_frame_set_color_range(mpp_frame, avctx->color_range);
|
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];
|
layer = &drm_desc->layers[0];
|
||||||
plane0 = &layer->planes[0];
|
plane0 = &layer->planes[0];
|
||||||
|
|
|
||||||
|
|
@ -186,8 +186,11 @@ static const AVOption mjpeg_options[] = {
|
||||||
static const enum AVPixelFormat rkmpp_enc_pix_fmts_h26x[] = {
|
static const enum AVPixelFormat rkmpp_enc_pix_fmts_h26x[] = {
|
||||||
AV_PIX_FMT_GRAY8,
|
AV_PIX_FMT_GRAY8,
|
||||||
AV_PIX_FMT_YUV420P,
|
AV_PIX_FMT_YUV420P,
|
||||||
|
AV_PIX_FMT_YUVJ420P,
|
||||||
AV_PIX_FMT_YUV422P,
|
AV_PIX_FMT_YUV422P,
|
||||||
|
AV_PIX_FMT_YUVJ422P,
|
||||||
AV_PIX_FMT_YUV444P,
|
AV_PIX_FMT_YUV444P,
|
||||||
|
AV_PIX_FMT_YUVJ444P,
|
||||||
AV_PIX_FMT_NV12,
|
AV_PIX_FMT_NV12,
|
||||||
AV_PIX_FMT_NV21,
|
AV_PIX_FMT_NV21,
|
||||||
AV_PIX_FMT_NV16,
|
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[] = {
|
static const enum AVPixelFormat rkmpp_enc_pix_fmts_mjpeg[] = {
|
||||||
AV_PIX_FMT_YUV420P,
|
AV_PIX_FMT_YUV420P,
|
||||||
|
AV_PIX_FMT_YUVJ420P,
|
||||||
AV_PIX_FMT_NV12,
|
AV_PIX_FMT_NV12,
|
||||||
AV_PIX_FMT_YUYV422,
|
AV_PIX_FMT_YUYV422,
|
||||||
AV_PIX_FMT_UYVY422,
|
AV_PIX_FMT_UYVY422,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue