aboutsummaryrefslogtreecommitdiff
path: root/gst/avi
diff options
context:
space:
mode:
Diffstat (limited to 'gst/avi')
-rw-r--r--gst/avi/Makefile.in2
-rw-r--r--gst/avi/gstavi.c1
-rw-r--r--gst/avi/gstavidemux.c16
3 files changed, 14 insertions, 5 deletions
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index 2e98e17a..4e975d99 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.13.3 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/gst/avi/gstavi.c b/gst/avi/gstavi.c
index e2569b06..b4cf0ad4 100644
--- a/gst/avi/gstavi.c
+++ b/gst/avi/gstavi.c
@@ -35,7 +35,6 @@ plugin_init (GstPlugin * plugin)
gst_riff_init ();
#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
#endif /* ENABLE_NLS */
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index d4aa1d6f..a3a1b5dc 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -2596,10 +2596,11 @@ gst_avi_demux_index_for_time (GstAviDemux * avi,
} else {
index = avi_stream_convert_time_to_frames_unchecked (stream, time);
}
- } else {
+ } else if (stream->strh->type == GST_RIFF_FCC_auds) {
/* constant rate stream */
total = avi_stream_convert_time_to_bytes_unchecked (stream, time);
- }
+ } else
+ return -1;
if (index == -1) {
GstAviIndexEntry *entry;
@@ -2716,7 +2717,8 @@ gst_avi_demux_parse_index (GstAviDemux * avi, GstBuffer * buf)
if (stream->strh->type == GST_RIFF_FCC_auds) {
/* all audio frames are keyframes */
ENTRY_SET_KEYFRAME (&entry);
- } else if (stream->strf.vids->compression == GST_RIFF_DXSB) {
+ } else if (stream->strh->type == GST_RIFF_FCC_vids &&
+ stream->strf.vids->compression == GST_RIFF_DXSB) {
/* all xsub frames are keyframes */
ENTRY_SET_KEYFRAME (&entry);
} else {
@@ -4124,6 +4126,8 @@ gst_avi_demux_do_seek (GstAviDemux * avi, GstSegment * segment)
/* get the entry index for the requested position */
index = gst_avi_demux_index_for_time (avi, stream, seek_time);
GST_DEBUG_OBJECT (avi, "Got entry %u", index);
+ if (index == -1)
+ return FALSE;
/* check if we are already on a keyframe */
if (!ENTRY_IS_KEYFRAME (&stream->index[index])) {
@@ -4175,6 +4179,8 @@ gst_avi_demux_do_seek (GstAviDemux * avi, GstSegment * segment)
/* get the entry index for the requested position */
index = gst_avi_demux_index_for_time (avi, ostream, seek_time);
+ if (index == -1)
+ continue;
/* move to previous keyframe */
if (!ENTRY_IS_KEYFRAME (&ostream->index[index]))
@@ -4402,6 +4408,8 @@ avi_demux_handle_seek_push (GstAviDemux * avi, GstPad * pad, GstEvent * event)
index = gst_avi_demux_index_for_time (avi, stream, cur);
GST_DEBUG_OBJECT (avi, "str %u: Found entry %u for %" GST_TIME_FORMAT,
str_num, index, GST_TIME_ARGS (cur));
+ if (index == -1)
+ return -1;
/* check if we are already on a keyframe */
if (!ENTRY_IS_KEYFRAME (&stream->index[index])) {
@@ -4452,6 +4460,8 @@ avi_demux_handle_seek_push (GstAviDemux * avi, GstPad * pad, GstEvent * event)
idx = gst_avi_demux_index_for_time (avi, str, cur);
GST_DEBUG_OBJECT (avi, "str %u: Found entry %u for %" GST_TIME_FORMAT, n,
idx, GST_TIME_ARGS (cur));
+ if (idx == -1)
+ continue;
/* check if we are already on a keyframe */
if (!ENTRY_IS_KEYFRAME (&str->index[idx])) {