summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2021-08-05 23:11:26 +0200
committerMathieu Duponchelle <mathieu@centricular.com>2021-08-05 23:12:32 +0200
commitc5d725652d7ac514505a3e653e0e41cbca202230 (patch)
treec3c854a4958bea960963edfcdf07e533cac9a720 /ext
parenta561b1bd8601ed8ae8769339cc8d93c2c23e2d84 (diff)
downloadgstreamer-plugins-bad-c5d725652d7ac514505a3e653e0e41cbca202230.tar.gz
mpeg2enc: fix interlace-mode detection
Previously, the code was always assuming progressive input, fix this by looking at the caps. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2455>
Diffstat (limited to 'ext')
-rw-r--r--ext/mpeg2enc/gstmpeg2encpicturereader.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc
index 2bdd23d3d..3641b613a 100644
--- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc
+++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc
@@ -61,6 +61,7 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm)
const GValue *par_val;
y4m_ratio_t fps;
y4m_ratio_t par;
+ const gchar *interlace_mode;
if (!gst_structure_get_int (structure, "width", &width))
width = -1;
@@ -90,7 +91,24 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm)
strm.horizontal_size = width;
strm.vertical_size = height;
- strm.interlacing_code = Y4M_ILACE_NONE;
+ interlace_mode = gst_structure_get_string (structure, "interlace-mode");
+
+ if (!g_strcmp0(interlace_mode, "interleaved")) {
+ const gchar *field_order = gst_structure_get_string(structure, "field-order");
+
+ if (!g_strcmp0(field_order, "bottom-field-first")) {
+ strm.interlacing_code = Y4M_ILACE_BOTTOM_FIRST;
+ } else if (!g_strcmp0(field_order, "top-field-first")) {
+ strm.interlacing_code = Y4M_ILACE_TOP_FIRST;
+ } else {
+ GST_WARNING ("No field-order in caps, assuming top field first");
+ strm.interlacing_code = Y4M_ILACE_TOP_FIRST;
+ }
+ } else if (!g_strcmp0(interlace_mode, "mixed")) {
+ strm.interlacing_code = Y4M_ILACE_MIXED;
+ } else {
+ strm.interlacing_code = Y4M_ILACE_NONE;
+ }
strm.aspect_ratio_code = mpeg_guess_mpeg_aspect_code (2, par,
strm.horizontal_size, strm.vertical_size);