|
|
|
@ -110,15 +110,12 @@ static int threedostr_read_header(AVFormatContext *s) |
|
|
|
|
|
|
|
|
|
static int threedostr_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
{ |
|
|
|
|
unsigned chunk, size, found_ssmp = 0; |
|
|
|
|
unsigned chunk, size; |
|
|
|
|
AVStream *st = s->streams[0]; |
|
|
|
|
int64_t pos; |
|
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
|
while (!found_ssmp) { |
|
|
|
|
if (avio_feof(s->pb)) |
|
|
|
|
return AVERROR_EOF; |
|
|
|
|
|
|
|
|
|
while (!avio_feof(s->pb)) { |
|
|
|
|
pos = avio_tell(s->pb); |
|
|
|
|
chunk = avio_rl32(s->pb); |
|
|
|
|
size = avio_rb32(s->pb); |
|
|
|
@ -143,9 +140,7 @@ static int threedostr_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
pkt->pos = pos; |
|
|
|
|
pkt->stream_index = 0; |
|
|
|
|
pkt->duration = size / st->codecpar->channels; |
|
|
|
|
size = 0; |
|
|
|
|
found_ssmp = 1; |
|
|
|
|
break; |
|
|
|
|
return ret; |
|
|
|
|
default: |
|
|
|
|
av_log(s, AV_LOG_DEBUG, "skipping unknown chunk: %X\n", chunk); |
|
|
|
|
break; |
|
|
|
@ -154,7 +149,7 @@ static int threedostr_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
avio_skip(s->pb, size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
return AVERROR_EOF; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AVInputFormat ff_threedostr_demuxer = { |
|
|
|
|