dtshd: fix seeking
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
73ad355d23
commit
ee109c6bc2
@ -38,7 +38,7 @@
|
||||
#define TIMECODE 0x54494D45434F4445
|
||||
|
||||
typedef struct DTSHDDemuxContext {
|
||||
uint64_t left;
|
||||
uint64_t data_end;
|
||||
} DTSHDDemuxContext;
|
||||
|
||||
static int dtshd_probe(AVProbeData *p)
|
||||
@ -79,7 +79,9 @@ static int dtshd_read_header(AVFormatContext *s)
|
||||
|
||||
switch (chunk_type) {
|
||||
case STRMDATA:
|
||||
dtshd->left = chunk_size;
|
||||
dtshd->data_end = chunk_size + avio_tell(pb);
|
||||
if (dtshd->data_end <= chunk_size)
|
||||
return AVERROR_INVALIDDATA;
|
||||
return 0;
|
||||
break;
|
||||
case FILEINFO:
|
||||
@ -107,11 +109,12 @@ skip:
|
||||
static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
DTSHDDemuxContext *dtshd = s->priv_data;
|
||||
uint64_t size;
|
||||
int64_t size, left;
|
||||
int ret;
|
||||
|
||||
size = FFMIN(dtshd->left, 1024);
|
||||
if (size == 0)
|
||||
left = dtshd->data_end - avio_tell(s->pb);
|
||||
size = FFMIN(left, 1024);
|
||||
if (size <= 0)
|
||||
return AVERROR_EOF;
|
||||
|
||||
ret = av_get_packet(s->pb, pkt, size);
|
||||
@ -119,7 +122,6 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
return ret;
|
||||
|
||||
pkt->stream_index = 0;
|
||||
dtshd->left -= ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user