mpdparser: do not switch pads when bitstreamSwitching = true

This commit is contained in:
Gianluca Gennari 2012-12-17 15:39:10 +01:00 committed by Thiago Santos
parent e0c55050e1
commit 470c860ffa
3 changed files with 21 additions and 6 deletions

View file

@ -1502,15 +1502,18 @@ static GstCaps *
gst_dash_demux_get_video_input_caps (GstDashDemux * demux, gst_dash_demux_get_video_input_caps (GstDashDemux * demux,
GstActiveStream * stream) GstActiveStream * stream)
{ {
guint width, height; guint width = 0, height = 0;
const gchar *mimeType = NULL; const gchar *mimeType = NULL;
GstCaps *caps = NULL; GstCaps *caps = NULL;
if (stream == NULL) if (stream == NULL)
return NULL; return NULL;
width = gst_mpd_client_get_video_stream_width (stream); /* if bitstreamSwitching is true we dont need to swich pads on resolution change */
height = gst_mpd_client_get_video_stream_height (stream); 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);
}
mimeType = gst_mpd_client_get_stream_mimeType (stream); mimeType = gst_mpd_client_get_stream_mimeType (stream);
if (mimeType == NULL) if (mimeType == NULL)
return NULL; return NULL;
@ -1528,15 +1531,18 @@ static GstCaps *
gst_dash_demux_get_audio_input_caps (GstDashDemux * demux, gst_dash_demux_get_audio_input_caps (GstDashDemux * demux,
GstActiveStream * stream) GstActiveStream * stream)
{ {
guint rate, channels; guint rate = 0, channels = 0;
const gchar *mimeType; const gchar *mimeType;
GstCaps *caps = NULL; GstCaps *caps = NULL;
if (stream == NULL) if (stream == NULL)
return NULL; return NULL;
channels = gst_mpd_client_get_audio_stream_num_channels (stream); /* if bitstreamSwitching is true we dont need to swich pads on rate/channels change */
rate = gst_mpd_client_get_audio_stream_rate (stream); if (!gst_mpd_client_get_bitstream_switching_flag (stream)) {
channels = gst_mpd_client_get_audio_stream_num_channels (stream);
rate = gst_mpd_client_get_audio_stream_rate (stream);
}
mimeType = gst_mpd_client_get_stream_mimeType (stream); mimeType = gst_mpd_client_get_stream_mimeType (stream);
if (mimeType == NULL) if (mimeType == NULL)
return NULL; return NULL;

View file

@ -3196,6 +3196,14 @@ const gchar *gst_mpd_client_get_stream_mimeType (GstActiveStream * stream)
return gst_mpdparser_mimetype_to_caps (mimeType); return gst_mpdparser_mimetype_to_caps (mimeType);
} }
const gboolean gst_mpd_client_get_bitstream_switching_flag (GstActiveStream * stream)
{
if (stream == NULL || stream->cur_adapt_set == NULL)
return FALSE;
return stream->cur_adapt_set->bitstreamSwitching;
}
guint gst_mpd_client_get_video_stream_width (GstActiveStream * stream) guint gst_mpd_client_get_video_stream_width (GstActiveStream * stream)
{ {
guint width; guint width;

View file

@ -498,6 +498,7 @@ guint gst_mpd_client_get_segment_index (GstActiveStream * stream);
/* Get audio/video stream parameters (mimeType, width, height, rate, number of channels) */ /* Get audio/video stream parameters (mimeType, width, height, rate, number of channels) */
const gchar *gst_mpd_client_get_stream_mimeType (GstActiveStream * stream); const gchar *gst_mpd_client_get_stream_mimeType (GstActiveStream * stream);
const 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_width (GstActiveStream * stream);
guint gst_mpd_client_get_video_stream_height (GstActiveStream * stream); guint gst_mpd_client_get_video_stream_height (GstActiveStream * stream);
guint gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream); guint gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream);