[FFmpeg-cvslog] avcodec/mediacodecenc: workaround the alignment requirement for H.265
Zhao Zhili
git at videolan.org
Fri Jun 7 09:40:52 EEST 2024
ffmpeg | branch: master | Zhao Zhili <zhilizhao at tencent.com> | Thu May 23 15:08:56 2024 +0800| [7d46ab9e1206b09ebe1a94ecac49cc99d9b3522e] | 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=7d46ab9e1206b09ebe1a94ecac49cc99d9b3522e
---
libavcodec/mediacodecenc.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c
index bfff149039..a42270551b 100644
--- a/libavcodec/mediacodecenc.c
+++ b/libavcodec/mediacodecenc.c
@@ -154,8 +154,12 @@ static int mediacodec_init_bsf(AVCodecContext *avctx)
ret = snprintf(str, sizeof(str), "h264_metadata=crop_right=%d:crop_bottom=%d",
crop_right, crop_bottom);
else if (avctx->codec_id == AV_CODEC_ID_HEVC)
- ret = snprintf(str, sizeof(str), "hevc_metadata=crop_right=%d:crop_bottom=%d",
- crop_right, crop_bottom);
+ /* Encoder can use CTU size larger than 16x16, so the real crop
+ * margin can be larger than crop_right/crop_bottom. Let bsf figure
+ * out the real crop margin.
+ */
+ ret = snprintf(str, sizeof(str), "hevc_metadata=width=%d:height=%d",
+ avctx->width, avctx->height);
if (ret >= sizeof(str))
return AVERROR_BUFFER_TOO_SMALL;
}
@@ -235,7 +239,8 @@ 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);
} else {
More information about the ffmpeg-cvslog
mailing list