mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
h264parse: Move PAR calcs, and use them for stereoscopic half-aspect
Move the pixel-aspect-ratio calculations higher up in caps determination, so the results are available for a call to gst_video_multiview_guess_half_aspect() when stereoscopic video is detected.
This commit is contained in:
parent
3ea9f51dd7
commit
b77f8e172a
1 changed files with 21 additions and 12 deletions
|
@ -1696,6 +1696,7 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
|
||||||
} else {
|
} else {
|
||||||
gint crop_width, crop_height;
|
gint crop_width, crop_height;
|
||||||
gint fps_num, fps_den;
|
gint fps_num, fps_den;
|
||||||
|
gint par_n, par_d;
|
||||||
|
|
||||||
if (sps->frame_cropping_flag) {
|
if (sps->frame_cropping_flag) {
|
||||||
crop_width = sps->crop_rect_width;
|
crop_width = sps->crop_rect_width;
|
||||||
|
@ -1760,14 +1761,32 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
|
||||||
else
|
else
|
||||||
height = h264parse->height;
|
height = h264parse->height;
|
||||||
|
|
||||||
|
if (s == NULL ||
|
||||||
|
!gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n,
|
||||||
|
&par_d)) {
|
||||||
|
gst_h264_parse_get_par (h264parse, &par_n, &par_d);
|
||||||
|
if (par_n != 0 && par_d != 0) {
|
||||||
|
GST_INFO_OBJECT (h264parse, "PAR %d/%d", par_n, par_d);
|
||||||
|
gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
|
||||||
|
par_n, par_d, NULL);
|
||||||
|
} else {
|
||||||
|
/* Assume par_n/par_d of 1/1 for calcs below, but don't set into caps */
|
||||||
|
par_n = par_d = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Pass through or set output stereo/multiview config */
|
/* Pass through or set output stereo/multiview config */
|
||||||
if (s && gst_structure_has_field (s, "multiview-mode")) {
|
if (s && gst_structure_has_field (s, "multiview-mode")) {
|
||||||
caps_mview_mode = gst_structure_get_string (s, "multiview-mode");
|
caps_mview_mode = gst_structure_get_string (s, "multiview-mode");
|
||||||
mview_mode =
|
mview_mode =
|
||||||
gst_video_multiview_mode_from_caps_string (caps_mview_mode);
|
gst_video_multiview_mode_from_caps_string (caps_mview_mode);
|
||||||
gst_structure_get_flagset (s, "multiview-flags", &mview_flags, NULL);
|
gst_structure_get_flagset (s, "multiview-flags", &mview_flags, NULL);
|
||||||
}
|
} else if (mview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) {
|
||||||
if (mview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) {
|
if (gst_video_multiview_guess_half_aspect (mview_mode,
|
||||||
|
width, height, par_n, par_d)) {
|
||||||
|
mview_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
|
||||||
|
}
|
||||||
|
|
||||||
caps_mview_mode = gst_video_multiview_mode_to_caps_string (mview_mode);
|
caps_mview_mode = gst_video_multiview_mode_to_caps_string (mview_mode);
|
||||||
gst_caps_set_simple (caps, "multiview-mode", G_TYPE_STRING,
|
gst_caps_set_simple (caps, "multiview-mode", G_TYPE_STRING,
|
||||||
caps_mview_mode, "multiview-flags",
|
caps_mview_mode, "multiview-flags",
|
||||||
|
@ -1798,22 +1817,12 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caps) {
|
if (caps) {
|
||||||
gint par_n, par_d;
|
|
||||||
|
|
||||||
gst_caps_set_simple (caps, "parsed", G_TYPE_BOOLEAN, TRUE,
|
gst_caps_set_simple (caps, "parsed", G_TYPE_BOOLEAN, TRUE,
|
||||||
"stream-format", G_TYPE_STRING,
|
"stream-format", G_TYPE_STRING,
|
||||||
gst_h264_parse_get_string (h264parse, TRUE, h264parse->format),
|
gst_h264_parse_get_string (h264parse, TRUE, h264parse->format),
|
||||||
"alignment", G_TYPE_STRING,
|
"alignment", G_TYPE_STRING,
|
||||||
gst_h264_parse_get_string (h264parse, FALSE, h264parse->align), NULL);
|
gst_h264_parse_get_string (h264parse, FALSE, h264parse->align), NULL);
|
||||||
|
|
||||||
gst_h264_parse_get_par (h264parse, &par_n, &par_d);
|
|
||||||
if (par_n != 0 && par_d != 0 &&
|
|
||||||
(!s || !gst_structure_has_field (s, "pixel-aspect-ratio"))) {
|
|
||||||
GST_INFO_OBJECT (h264parse, "PAR %d/%d", par_n, par_d);
|
|
||||||
gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
|
|
||||||
par_n, par_d, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set profile and level in caps */
|
/* set profile and level in caps */
|
||||||
if (sps) {
|
if (sps) {
|
||||||
const gchar *profile, *level;
|
const gchar *profile, *level;
|
||||||
|
|
Loading…
Reference in a new issue