avcodec/mediacodecenc: workaround the alignment requirement for H.265
Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
parent
2a68b2d643
commit
7d46ab9e12
@ -154,8 +154,12 @@ static int mediacodec_init_bsf(AVCodecContext *avctx)
|
|||||||
ret = snprintf(str, sizeof(str), "h264_metadata=crop_right=%d:crop_bottom=%d",
|
ret = snprintf(str, sizeof(str), "h264_metadata=crop_right=%d:crop_bottom=%d",
|
||||||
crop_right, crop_bottom);
|
crop_right, crop_bottom);
|
||||||
else if (avctx->codec_id == AV_CODEC_ID_HEVC)
|
else if (avctx->codec_id == AV_CODEC_ID_HEVC)
|
||||||
ret = snprintf(str, sizeof(str), "hevc_metadata=crop_right=%d:crop_bottom=%d",
|
/* Encoder can use CTU size larger than 16x16, so the real crop
|
||||||
crop_right, crop_bottom);
|
* 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))
|
if (ret >= sizeof(str))
|
||||||
return AVERROR_BUFFER_TOO_SMALL;
|
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
|
// 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);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user