video-sink: get PAR from caps and set to render lib. [1/2]
PD#SWPL-149833
Problem:
No pixel_aspect_ratio be set to render lib
Solution:
get PAR from caps and set to render lib
Verify:
AH212
Change-Id: I1382dde0b95e8068dc057e97f382b97878023622
Signed-off-by: sheng.liu <sheng.liu@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index fdf3680..da232d8 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -420,6 +420,8 @@
sink->frame_rate_denom = 0;
sink->frame_rate_changed = FALSE;
sink->frame_rate = 0.0;
+ sink->pixel_aspect_ratio_changed = FALSE;
+ sink->pixel_aspect_ratio = 1.0;
g_mutex_init(&sink->eos_lock);
g_cond_init(&sink->eos_cond);
@@ -1075,6 +1077,12 @@
render_set_value(sink_priv->render_device_handle, KEY_VIDEO_FRAME_RATE, &sink->default_sync);
}
+ if (sink->pixel_aspect_ratio_changed)
+ {
+ sink->pixel_aspect_ratio_changed = FALSE;
+ render_set_value(sink_priv->render_device_handle, KEY_PIXEL_ASPECT_RATIO, &sink->pixel_aspect_ratio);
+ }
+
if (!gst_aml_video_sink_check_buf(sink, buffer))
{
GST_ERROR_OBJECT(sink, "buf out of segment return");
@@ -1249,6 +1257,16 @@
sink->frame_rate_denom = denom;
sink->frame_rate_changed = TRUE;
}
+
+ if ( gst_structure_get_fraction( structure, "pixel-aspect-ratio", &num, &denom ) )
+ {
+ if ( (num <= 0) || (denom <= 0))
+ {
+ num = denom = 1;
+ }
+ sink->pixel_aspect_ratio = (double)num/(double)denom;
+ sink->pixel_aspect_ratio_changed = TRUE;
+ }
}
}
} break;
diff --git a/src/gstamlvideosink.h b/src/gstamlvideosink.h
index 2b7e30e..804f780 100644
--- a/src/gstamlvideosink.h
+++ b/src/gstamlvideosink.h
@@ -71,6 +71,8 @@
gboolean video_playing;
gboolean secure_mode;
+ gboolean pixel_aspect_ratio_changed;
+ double pixel_aspect_ratio;
GstAmlVideoSinkPrivate *priv;
};