[FFmpeg-cvslog] avcodec/mediacodecenc: workaround the alignment requirement for H.265
Zhao Zhili
git at videolan.org
Fri May 31 15:13:40 EEST 2024
ffmpeg | branch: release/7.0 | Zhao Zhili <zhilizhao at tencent.com> | Thu May 23 23:13:39 2024 +0800| [f0b747ef1a9b9bfd0942a6d459f642b4b993b378] | committer: Zhao Zhili
avcodec/mediacodecenc: workaround the alignment requirement for H.265
Signed-off-by: Zhao Zhili <zhilizhao at tencent.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f0b747ef1a9b9bfd0942a6d459f642b4b993b378
---
libavcodec/mediacodecenc.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
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;
More information about the ffmpeg-cvslog
mailing list