avcodec/mediacodecenc: workaround the alignment requirement for H.265

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
release/7.0
Zhao Zhili 8 months ago
parent edc7b57e26
commit f0b747ef1a
  1. 11
      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 // Workaround the alignment requirement of mediacodec. We can't do it
// silently for AV_PIX_FMT_MEDIACODEC. // silently for AV_PIX_FMT_MEDIACODEC.
if (avctx->pix_fmt != 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->width = FFALIGN(avctx->width, 16);
s->height = FFALIGN(avctx->height, 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 { } else {
s->width = avctx->width; s->width = avctx->width;
s->height = avctx->height; s->height = avctx->height;

Loading…
Cancel
Save