Commit ef801bb0 authored by bcoudurier's avatar bcoudurier

resync ffm if error in stream

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@18065 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 8af98fb0
...@@ -87,13 +87,26 @@ static int ffm_is_avail_data(AVFormatContext *s, int size) ...@@ -87,13 +87,26 @@ static int ffm_is_avail_data(AVFormatContext *s, int size)
return AVERROR(EAGAIN); return AVERROR(EAGAIN);
} }
static int ffm_resync(AVFormatContext *s, int state)
{
av_log(s, AV_LOG_ERROR, "resyncing\n");
while (state != PACKET_ID) {
if (url_feof(s->pb)) {
av_log(s, AV_LOG_ERROR, "cannot find FFM syncword\n");
return -1;
}
state = (state << 8) | get_byte(s->pb);
}
return 0;
}
/* first is true if we read the frame header */ /* first is true if we read the frame header */
static int ffm_read_data(AVFormatContext *s, static int ffm_read_data(AVFormatContext *s,
uint8_t *buf, int size, int header) uint8_t *buf, int size, int header)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
ByteIOContext *pb = s->pb; ByteIOContext *pb = s->pb;
int len, fill_size, size1, frame_offset; int len, fill_size, size1, frame_offset, id;
size1 = size; size1 = size;
while (size > 0) { while (size > 0) {
...@@ -107,7 +120,10 @@ static int ffm_read_data(AVFormatContext *s, ...@@ -107,7 +120,10 @@ static int ffm_read_data(AVFormatContext *s,
if (url_ftell(pb) == ffm->file_size) if (url_ftell(pb) == ffm->file_size)
url_fseek(pb, ffm->packet_size, SEEK_SET); url_fseek(pb, ffm->packet_size, SEEK_SET);
retry_read: retry_read:
get_be16(pb); /* PACKET_ID */ id = get_be16(pb); /* PACKET_ID */
if (id != PACKET_ID)
if (ffm_resync(s, id) < 0)
return -1;
fill_size = get_be16(pb); fill_size = get_be16(pb);
ffm->dts = get_be64(pb); ffm->dts = get_be64(pb);
frame_offset = get_be16(pb); frame_offset = get_be16(pb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment