dashdemux: Suggestion for setting the framerate information.

Dashdemux has set the width and height information from MPD manifest.
Some embedded devices which are not insufficient H/W resources need more information such as framerate
to assign H/W resources. So I suggested that dashdemux also needs to set the framerate information from MDP manifest.

https://bugzilla.gnome.org/show_bug.cgi?id=758515
This commit is contained in:
suhwang.kim 2015-12-08 09:33:39 +09:00 committed by Sebastian Dröge
parent 6d8dd482c4
commit 6cbaec7593
3 changed files with 50 additions and 0 deletions

View file

@ -866,6 +866,8 @@ gst_dash_demux_get_video_input_caps (GstDashDemux * demux,
GstActiveStream * stream)
{
guint width = 0, height = 0;
gint fps_num = 0, fps_den = 1;
gboolean have_fps = FALSE;
GstCaps *caps = NULL;
if (stream == NULL)
@ -875,6 +877,8 @@ gst_dash_demux_get_video_input_caps (GstDashDemux * demux,
if (!gst_mpd_client_get_bitstream_switching_flag (stream)) {
width = gst_mpd_client_get_video_stream_width (stream);
height = gst_mpd_client_get_video_stream_height (stream);
have_fps =
gst_mpd_client_get_video_stream_framerate (stream, &fps_num, &fps_den);
}
caps = gst_mpd_client_get_stream_caps (stream);
if (caps == NULL)
@ -885,6 +889,11 @@ gst_dash_demux_get_video_input_caps (GstDashDemux * demux,
G_TYPE_INT, height, NULL);
}
if (have_fps) {
gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, fps_num,
fps_den, NULL);
}
return caps;
}

View file

@ -5635,6 +5635,46 @@ gst_mpd_client_get_video_stream_height (GstActiveStream * stream)
return height;
}
gboolean
gst_mpd_client_get_video_stream_framerate (GstActiveStream * stream,
gint * fps_num, gint * fps_den)
{
if (stream == NULL)
return FALSE;
if (stream->cur_adapt_set &&
stream->cur_adapt_set->RepresentationBase->frameRate != NULL) {
*fps_num = stream->cur_adapt_set->RepresentationBase->frameRate->num;
*fps_den = stream->cur_adapt_set->RepresentationBase->frameRate->den;
return TRUE;
}
if (stream->cur_adapt_set &&
stream->cur_adapt_set->RepresentationBase->maxFrameRate != NULL) {
*fps_num = stream->cur_adapt_set->RepresentationBase->maxFrameRate->num;
*fps_den = stream->cur_adapt_set->RepresentationBase->maxFrameRate->den;
return TRUE;
}
if (stream->cur_representation &&
stream->cur_representation->RepresentationBase->frameRate != NULL) {
*fps_num = stream->cur_representation->RepresentationBase->frameRate->num;
*fps_den = stream->cur_representation->RepresentationBase->frameRate->den;
return TRUE;
}
if (stream->cur_representation &&
stream->cur_representation->RepresentationBase->maxFrameRate != NULL) {
*fps_num =
stream->cur_representation->RepresentationBase->maxFrameRate->num;
*fps_den =
stream->cur_representation->RepresentationBase->maxFrameRate->den;
return TRUE;
}
return FALSE;
}
guint
gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream)
{

View file

@ -586,6 +586,7 @@ GstCaps * gst_mpd_client_get_stream_caps (GstActiveStream * stream);
gboolean gst_mpd_client_get_bitstream_switching_flag (GstActiveStream * stream);
guint gst_mpd_client_get_video_stream_width (GstActiveStream * stream);
guint gst_mpd_client_get_video_stream_height (GstActiveStream * stream);
gboolean gst_mpd_client_get_video_stream_framerate (GstActiveStream * stream, gint * fps_num, gint * fps_den);
guint gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream);
guint gst_mpd_client_get_audio_stream_num_channels (GstActiveStream * stream);