diff options
author | Aman Gupta <aman@tmm1.net> | 2018-03-19 16:29:45 -0700 |
---|---|---|
committer | Aman Gupta <aman@tmm1.net> | 2018-03-20 15:52:23 -0700 |
commit | 2ddc6b439226a7dffb740d6e50bdd835a27d10ea (patch) | |
tree | d34278b7ef833feb08b35f3e2816f3e69fb2b663 | |
parent | 9e67447a4ffacf28af8bace33faf3ea432ddc43e (diff) | |
download | ffmpeg-2ddc6b439226a7dffb740d6e50bdd835a27d10ea.tar.gz |
avcodec/mediacodecdec: propagate SAR to h/w frames
Allows consumers who are converting hardware buffers
to OpenGL textures to render the frames at the intended
display resolution.
Signed-off-by: Aman Gupta <aman@tmm1.net>
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
-rw-r--r-- | libavcodec/mediacodecdec_common.c | 11 | ||||
-rw-r--r-- | libavcodec/mediacodecdec_common.h | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 635ee73486..e31adb487c 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -205,6 +205,7 @@ static int mediacodec_wrap_hw_buffer(AVCodecContext *avctx, frame->width = avctx->width; frame->height = avctx->height; frame->format = avctx->pix_fmt; + frame->sample_aspect_ratio = avctx->sample_aspect_ratio; if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) { frame->pts = av_rescale_q(info->presentationTimeUs, @@ -414,6 +415,16 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte width = s->crop_right + 1 - s->crop_left; height = s->crop_bottom + 1 - s->crop_top; + AMEDIAFORMAT_GET_INT32(s->display_width, "display-width", 0); + AMEDIAFORMAT_GET_INT32(s->display_height, "display-height", 0); + + if (s->display_width && s->display_height) { + AVRational sar = av_div_q( + (AVRational){ s->display_width, s->display_height }, + (AVRational){ width, height }); + ff_set_sar(avctx, sar); + } + av_log(avctx, AV_LOG_INFO, "Output crop parameters top=%d bottom=%d left=%d right=%d, " "resulting dimensions width=%d height=%d\n", diff --git a/libavcodec/mediacodecdec_common.h b/libavcodec/mediacodecdec_common.h index 4f3b4f9fa5..023d4c5fa7 100644 --- a/libavcodec/mediacodecdec_common.h +++ b/libavcodec/mediacodecdec_common.h @@ -61,6 +61,8 @@ typedef struct MediaCodecDecContext { int crop_bottom; int crop_left; int crop_right; + int display_width; + int display_height; uint64_t output_buffer_count; |