|
|
@ -67,6 +67,12 @@ static int read_header(AVFormatContext *s) |
|
|
|
st->codec->width = avio_rb16(pb); |
|
|
|
st->codec->width = avio_rb16(pb); |
|
|
|
st->codec->height = avio_rb16(pb); |
|
|
|
st->codec->height = avio_rb16(pb); |
|
|
|
film->leading = avio_rb16(pb); |
|
|
|
film->leading = avio_rb16(pb); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (st->codec->width * 4LL * st->codec->height >= INT_MAX) { |
|
|
|
|
|
|
|
av_log(s, AV_LOG_ERROR, "dimensions too large\n"); |
|
|
|
|
|
|
|
return AVERROR_PATCHWELCOME; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
avpriv_set_pts_info(st, 64, 1, avio_rb16(pb)); |
|
|
|
avpriv_set_pts_info(st, 64, 1, avio_rb16(pb)); |
|
|
|
|
|
|
|
|
|
|
|
avio_seek(pb, 0, SEEK_SET); |
|
|
|
avio_seek(pb, 0, SEEK_SET); |
|
|
@ -82,7 +88,7 @@ static int read_packet(AVFormatContext *s, |
|
|
|
|
|
|
|
|
|
|
|
if (avio_feof(s->pb)) |
|
|
|
if (avio_feof(s->pb)) |
|
|
|
return AVERROR(EIO); |
|
|
|
return AVERROR(EIO); |
|
|
|
pkt->dts = avio_tell(s->pb) / (st->codec->width * (st->codec->height + film->leading) * 4); |
|
|
|
pkt->dts = avio_tell(s->pb) / (st->codec->width * (int64_t)(st->codec->height + film->leading) * 4); |
|
|
|
pkt->size = av_get_packet(s->pb, pkt, st->codec->width * st->codec->height * 4); |
|
|
|
pkt->size = av_get_packet(s->pb, pkt, st->codec->width * st->codec->height * 4); |
|
|
|
avio_skip(s->pb, st->codec->width * (int64_t) film->leading * 4); |
|
|
|
avio_skip(s->pb, st->codec->width * (int64_t) film->leading * 4); |
|
|
|
if (pkt->size < 0) |
|
|
|
if (pkt->size < 0) |
|
|
|