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
|
#define TIMECODE 0x54494D45434F4445
|
||||||
|
|
||||||
typedef struct DTSHDDemuxContext {
|
typedef struct DTSHDDemuxContext {
|
||||||
uint64_t left;
|
uint64_t data_end;
|
||||||
} DTSHDDemuxContext;
|
} DTSHDDemuxContext;
|
||||||
|
|
||||||
static int dtshd_probe(AVProbeData *p)
|
static int dtshd_probe(AVProbeData *p)
|
||||||
@ -79,7 +79,9 @@ static int dtshd_read_header(AVFormatContext *s)
|
|||||||
|
|
||||||
switch (chunk_type) {
|
switch (chunk_type) {
|
||||||
case STRMDATA:
|
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;
|
return 0;
|
||||||
break;
|
break;
|
||||||
case FILEINFO:
|
case FILEINFO:
|
||||||
@ -107,11 +109,12 @@ skip:
|
|||||||
static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
DTSHDDemuxContext *dtshd = s->priv_data;
|
DTSHDDemuxContext *dtshd = s->priv_data;
|
||||||
uint64_t size;
|
int64_t size, left;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
size = FFMIN(dtshd->left, 1024);
|
left = dtshd->data_end - avio_tell(s->pb);
|
||||||
if (size == 0)
|
size = FFMIN(left, 1024);
|
||||||
|
if (size <= 0)
|
||||||
return AVERROR_EOF;
|
return AVERROR_EOF;
|
||||||
|
|
||||||
ret = av_get_packet(s->pb, pkt, size);
|
ret = av_get_packet(s->pb, pkt, size);
|
||||||
@ -119,7 +122,6 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
pkt->stream_index = 0;
|
pkt->stream_index = 0;
|
||||||
dtshd->left -= ret;
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user