From c6507559fbebf31bd24a063eb8312be59a545e14 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Sun, 3 Feb 2008 18:22:18 +0000 Subject: ext/mpeg2enc/gstmpeg2encpicturereader.cc: Use the incoming pixel-aspect-ratio if provided to infer a default aspect r... Original commit message from CVS: * ext/mpeg2enc/gstmpeg2encpicturereader.cc: Use the incoming pixel-aspect-ratio if provided to infer a default aspect ratio, which can be overridden using the 'aspect' property. Fixes: #499008 --- ext/mpeg2enc/gstmpeg2encpicturereader.cc | 38 ++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'ext/mpeg2enc') diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc index 57f95ccd..7b6cfbb7 100644 --- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc +++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc @@ -61,21 +61,45 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm) GstStructure *structure = gst_caps_get_structure (caps, 0); gint width, height; const GValue *fps_val; + const GValue *par_val; y4m_ratio_t fps; + y4m_ratio_t par; + + if (!gst_structure_get_int (structure, "width", &width)) + width = -1; + + if (!gst_structure_get_int (structure, "height", &height)) + height = -1; - gst_structure_get_int (structure, "width", &width); - gst_structure_get_int (structure, "height", &height); fps_val = gst_structure_get_value (structure, "framerate"); - fps.n = gst_value_get_fraction_numerator (fps_val); - fps.d = gst_value_get_fraction_denominator (fps_val); + if (fps_val != NULL) { + fps.n = gst_value_get_fraction_numerator (fps_val); + fps.d = gst_value_get_fraction_denominator (fps_val); + + strm.frame_rate_code = mpeg_framerate_code (fps); + } else + strm.frame_rate_code = 0; + + par_val = gst_structure_get_value (structure, "pixel-aspect-ratio"); + if (par_val != NULL) { + par.n = gst_value_get_fraction_numerator (par_val); + par.d = gst_value_get_fraction_denominator (par_val); + } else { + /* By default, assume square pixels */ + par.n = 1; + par.d = 1; + } strm.horizontal_size = width; strm.vertical_size = height; - strm.frame_rate_code = mpeg_framerate_code (fps); + strm.interlacing_code = Y4M_ILACE_NONE; - /* FIXME perhaps involve pixel-aspect-ratio for 'better' sar */ - strm.aspect_ratio_code = mpeg_guess_mpeg_aspect_code (2, y4m_sar_SQUARE, + + strm.aspect_ratio_code = mpeg_guess_mpeg_aspect_code (2, par, strm.horizontal_size, strm.vertical_size); + GST_DEBUG_OBJECT (element, "Guessing aspect ratio code for PAR %d/%d " + "MPEG version %d yielded: %d", par.n, par.d, mpeg_version, + strm.aspect_ratio_code); } /* -- cgit v1.2.1