You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avformat/av1dec: fix setting AVPacket->pos in Annex-B demuxer
This demuxers reads encapsulation bytes before reading codec data into the output packets, so take such offset into consideration. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@ -36,6 +36,7 @@ typedef struct AV1DemuxContext {
|
||||
AVRational framerate;
|
||||
uint32_t temporal_unit_size;
|
||||
uint32_t frame_unit_size;
|
||||
int64_t pos;
|
||||
} AV1DemuxContext;
|
||||
|
||||
//return < 0 if we need more data
|
||||
@ -96,6 +97,8 @@ static int av1_read_header(AVFormatContext *s)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
c->pos = avio_tell(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -224,6 +227,7 @@ static int annexb_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
AV1DemuxContext *const c = s->priv_data;
|
||||
uint32_t obu_unit_size;
|
||||
int64_t pos = c->pos;
|
||||
int ret, len;
|
||||
|
||||
retry:
|
||||
@ -234,6 +238,7 @@ retry:
|
||||
}
|
||||
|
||||
if (!c->temporal_unit_size) {
|
||||
c->pos = avio_tell(s->pb);
|
||||
len = leb(s->pb, &c->temporal_unit_size, 1);
|
||||
if (len == AVERROR_EOF) goto end;
|
||||
else if (len < 0) return len;
|
||||
@ -279,6 +284,9 @@ end:
|
||||
if (ret == AVERROR(EAGAIN))
|
||||
goto retry;
|
||||
|
||||
if (!ret)
|
||||
pkt->pos = pos;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user