Commit 903ba1a1 authored by Adrian Grange's avatar Adrian Grange Committed by Gerrit Code Review

Merge "Change the strategy for deciding the display size"

parents 4f2a80f0 482c39c0
...@@ -453,6 +453,8 @@ int main_loop(int argc, const char **argv_) { ...@@ -453,6 +453,8 @@ int main_loop(int argc, const char **argv_) {
int num_external_frame_buffers = 0; int num_external_frame_buffers = 0;
int fb_lru_cache = 0; int fb_lru_cache = 0;
vpx_codec_frame_buffer_t *frame_buffers = NULL; vpx_codec_frame_buffer_t *frame_buffers = NULL;
int display_width = 0;
int display_height = 0;
struct VpxDecInputContext input = {0}; struct VpxDecInputContext input = {0};
struct VpxInputContext vpx_input_ctx = {0}; struct VpxInputContext vpx_input_ctx = {0};
...@@ -822,23 +824,31 @@ int main_loop(int argc, const char **argv_) { ...@@ -822,23 +824,31 @@ int main_loop(int argc, const char **argv_) {
out_put(out, (const unsigned char*)color, strlen(color), do_md5); out_put(out, (const unsigned char*)color, strlen(color), do_md5);
} }
if (do_scale) { if (img && do_scale) {
int stream_w = 0, stream_h = 0; if (frame_out == 1) {
if (img && frame_out == 1) { // If the output frames are to be scaled to a fixed display size then
int display_size[2]; // use the width and height specified in the container. If either of
if (vpx_codec_control(&decoder, VP9D_GET_DISPLAY_SIZE, // these is set to 0, use the display size set in the first frame
display_size)) { // header.
// Fallback to use raw image size if display size not available. display_width = vpx_input_ctx.width;
stream_w = img->d_w; display_height = vpx_input_ctx.height;
stream_h = img->d_h; if (!display_width || !display_height) {
} else { int display_size[2];
stream_w = display_size[0]; if (vpx_codec_control(&decoder, VP9D_GET_DISPLAY_SIZE,
stream_h = display_size[1]; display_size)) {
// As last resort use size of first frame as display size.
display_width = img->d_w;
display_height = img->d_h;
} else {
display_width = display_size[0];
display_height = display_size[1];
}
} }
scaled_img = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, scaled_img = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, display_width,
stream_w, stream_h, 16); display_height, 16);
} }
if (img && (img->d_w != stream_w || img->d_h != stream_h)) {
if (img->d_w != display_width || img->d_h != display_height) {
assert(img->fmt == VPX_IMG_FMT_I420); assert(img->fmt == VPX_IMG_FMT_I420);
I420Scale(img->planes[VPX_PLANE_Y], img->stride[VPX_PLANE_Y], I420Scale(img->planes[VPX_PLANE_Y], img->stride[VPX_PLANE_Y],
img->planes[VPX_PLANE_U], img->stride[VPX_PLANE_U], img->planes[VPX_PLANE_U], img->stride[VPX_PLANE_U],
...@@ -850,7 +860,7 @@ int main_loop(int argc, const char **argv_) { ...@@ -850,7 +860,7 @@ int main_loop(int argc, const char **argv_) {
scaled_img->stride[VPX_PLANE_U], scaled_img->stride[VPX_PLANE_U],
scaled_img->planes[VPX_PLANE_V], scaled_img->planes[VPX_PLANE_V],
scaled_img->stride[VPX_PLANE_V], scaled_img->stride[VPX_PLANE_V],
stream_w, stream_h, display_width, display_height,
kFilterBox); kFilterBox);
img = scaled_img; img = scaled_img;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment