diff mbox series

[FFmpeg-devel,7.0,2/2] avcodec/mediacodecenc: workaround the alignment requirement for H.265

Message ID tencent_E834B8B796714D3020174DF14F8D55152707@qq.com
State New
Headers show
Series [FFmpeg-devel,7.0,1/2] avcodec/mediacodecenc: workaround the alignment requirement only for H.264 | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Zhao Zhili May 23, 2024, 3:13 p.m. UTC
From: Zhao Zhili <zhilizhao@tencent.com>

---
The patchset for master branch isn't suitable for release branch, since it
implement a new feature in bsf.
https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=11882

 libavcodec/mediacodecenc.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c
index a898e335b5..d3bf27cb7f 100644
--- a/libavcodec/mediacodecenc.c
+++ b/libavcodec/mediacodecenc.c
@@ -201,9 +201,18 @@  static av_cold int mediacodec_init(AVCodecContext *avctx)
     // Workaround the alignment requirement of mediacodec. We can't do it
     // silently for AV_PIX_FMT_MEDIACODEC.
     if (avctx->pix_fmt != AV_PIX_FMT_MEDIACODEC &&
-        avctx->codec_id == AV_CODEC_ID_H264) {
+        (avctx->codec_id == AV_CODEC_ID_H264 ||
+         avctx->codec_id == AV_CODEC_ID_HEVC)) {
         s->width = FFALIGN(avctx->width, 16);
         s->height = FFALIGN(avctx->height, 16);
+        // If avctx video size is aligned to 16 already, we don't need to do
+        // anything. If align is needed for HEVC, we should use the maximum CTU
+        // size.
+        if (avctx->codec_id == AV_CODEC_ID_HEVC &&
+            (s->width != avctx->width || s->height != avctx->height)) {
+            s->width = FFALIGN(avctx->width, 64);
+            s->height = FFALIGN(avctx->height, 64);
+        }
     } else {
         s->width = avctx->width;
         s->height = avctx->height;