diff mbox

[FFmpeg-devel] amf: fix wrong profile level after auto-correction in H264 and HEVC

Message ID CY4PR12MB1477E7AA73A90902E7E4E7C9FE300@CY4PR12MB1477.namprd12.prod.outlook.com
State Accepted
Commit f20c8f6ec9ec982d15a8acc0a38103919780b48a
Headers show

Commit Message

mmironov Dec. 8, 2017, 7:23 p.m. UTC
Moved bitrate parameters set before Init() call because bitrate is used in 
profile level correction code inside Init().

Signed-off-by: Mikhail Mironov <mikhail.mironov@amd.com>
---
 libavcodec/amfenc_h264.c | 10 +++++-----
 libavcodec/amfenc_hevc.c |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

Comments

Michael Niedermayer Dec. 9, 2017, 10:14 p.m. UTC | #1
On Fri, Dec 08, 2017 at 07:23:38PM +0000, Mironov, Mikhail wrote:
> Moved bitrate parameters set before Init() call because bitrate is used in 
> profile level correction code inside Init().
> 
> Signed-off-by: Mikhail Mironov <mikhail.mironov@amd.com>
> ---
>  libavcodec/amfenc_h264.c | 10 +++++-----
>  libavcodec/amfenc_hevc.c |  8 ++++----
>  2 files changed, 9 insertions(+), 9 deletions(-)

will apply

thx

[...]
diff mbox

Patch

diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c
index 3cacf32..96e4e95 100644
--- a/libavcodec/amfenc_h264.c
+++ b/libavcodec/amfenc_h264.c
@@ -213,7 +213,6 @@  static av_cold int amf_encode_init_h264(AVCodecContext *avctx)
         }
     }
 
-
     if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP) {
         AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_RATE_CONTROL_PREANALYSIS_ENABLE, AMF_VIDEO_ENCODER_PREENCODE_DISABLED);
         if (ctx->preanalysis)
@@ -224,10 +223,6 @@  static av_cold int amf_encode_init_h264(AVCodecContext *avctx)
 
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_QUALITY_PRESET, ctx->quality);
 
-    // Initialize Encoder
-    res = ctx->encoder->pVtbl->Init(ctx->encoder, ctx->format, avctx->width, avctx->height);
-    AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_BUG, "encoder->Init() failed with error %d\n", res);
-
     // Dynamic parmaters
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD, ctx->rate_control_mode);
 
@@ -279,6 +274,11 @@  static av_cold int amf_encode_init_h264(AVCodecContext *avctx)
     } else if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR) {
         av_log(ctx, AV_LOG_WARNING, "rate control mode is PEAK_CONSTRAINED_VBR but rc_max_rate is not set\n");
     }
+
+    // Initialize Encoder
+    res = ctx->encoder->pVtbl->Init(ctx->encoder, ctx->format, avctx->width, avctx->height);
+    AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_BUG, "encoder->Init() failed with error %d\n", res);
+
     // Enforce HRD, Filler Data, VBAQ, Frame Skipping, Deblocking Filter
     AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_ENFORCE_HRD, !!ctx->enforce_hrd);
     AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_FILLER_DATA_ENABLE, !!ctx->filler_data);
diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c
index ced57b1..3956b2d 100644
--- a/libavcodec/amfenc_hevc.c
+++ b/libavcodec/amfenc_hevc.c
@@ -204,10 +204,6 @@  static av_cold int amf_encode_init_hevc(AVCodecContext *avctx)
     AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_MOTION_HALF_PIXEL, ctx->me_half_pel);
     AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_MOTION_QUARTERPIXEL, ctx->me_quarter_pel);
 
-    // init encoder
-    res = ctx->encoder->pVtbl->Init(ctx->encoder, ctx->format, avctx->width, avctx->height);
-    AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_BUG, "encoder->Init() failed with error %d\n", res);
-
     // init dynamic rate control params
     if (ctx->max_au_size)
         ctx->enforce_hrd = 1;
@@ -225,6 +221,10 @@  static av_cold int amf_encode_init_hevc(AVCodecContext *avctx)
         av_log(ctx, AV_LOG_WARNING, "rate control mode is PEAK_CONSTRAINED_VBR but rc_max_rate is not set\n");
     }
 
+    // init encoder
+    res = ctx->encoder->pVtbl->Init(ctx->encoder, ctx->format, avctx->width, avctx->height);
+    AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_BUG, "encoder->Init() failed with error %d\n", res);
+
     // init dynamic picture control params
     AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_HEVC_MAX_AU_SIZE, ctx->max_au_size);