summaryrefslogtreecommitdiff
path: root/ffmpeg/libavformat/oggparseskeleton.c
diff options
context:
space:
mode:
Diffstat (limited to 'ffmpeg/libavformat/oggparseskeleton.c')
-rw-r--r--ffmpeg/libavformat/oggparseskeleton.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/ffmpeg/libavformat/oggparseskeleton.c b/ffmpeg/libavformat/oggparseskeleton.c
index 307387d..d94b0c2 100644
--- a/ffmpeg/libavformat/oggparseskeleton.c
+++ b/ffmpeg/libavformat/oggparseskeleton.c
@@ -37,6 +37,9 @@ static int skeleton_header(AVFormatContext *s, int idx)
strcpy(st->codec->codec_name, "skeleton");
st->codec->codec_type = AVMEDIA_TYPE_DATA;
+ if ((os->flags & OGG_FLAG_EOS) && os->psize == 0)
+ return 1;
+
if (os->psize < 8)
return -1;
@@ -74,12 +77,16 @@ static int skeleton_header(AVFormatContext *s, int idx)
target_idx = ogg_find_stream(ogg, AV_RL32(buf+12));
start_granule = AV_RL64(buf+36);
+ if (target_idx < 0) {
+ av_log(s, AV_LOG_WARNING, "Serial number in fisbone doesn't match any stream\n");
+ return 1;
+ }
+ os = ogg->streams + target_idx;
if (os->start_granule != OGG_NOGRANULE_VALUE) {
- avpriv_report_missing_feature(s,
- "Multiple fisbone for the same stream");
+ av_log(s, AV_LOG_WARNING, "Multiple fisbone for the same stream\n");
return 1;
}
- if (target_idx >= 0 && start_granule != OGG_NOGRANULE_VALUE) {
+ if (start_granule != OGG_NOGRANULE_VALUE) {
os->start_granule = start_granule;
}
}