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;
|
AVRational framerate;
|
||||||
uint32_t temporal_unit_size;
|
uint32_t temporal_unit_size;
|
||||||
uint32_t frame_unit_size;
|
uint32_t frame_unit_size;
|
||||||
|
int64_t pos;
|
||||||
} AV1DemuxContext;
|
} AV1DemuxContext;
|
||||||
|
|
||||||
//return < 0 if we need more data
|
//return < 0 if we need more data
|
||||||
@ -96,6 +97,8 @@ static int av1_read_header(AVFormatContext *s)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
c->pos = avio_tell(s->pb);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,6 +227,7 @@ static int annexb_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
{
|
{
|
||||||
AV1DemuxContext *const c = s->priv_data;
|
AV1DemuxContext *const c = s->priv_data;
|
||||||
uint32_t obu_unit_size;
|
uint32_t obu_unit_size;
|
||||||
|
int64_t pos = c->pos;
|
||||||
int ret, len;
|
int ret, len;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
@ -234,6 +238,7 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!c->temporal_unit_size) {
|
if (!c->temporal_unit_size) {
|
||||||
|
c->pos = avio_tell(s->pb);
|
||||||
len = leb(s->pb, &c->temporal_unit_size, 1);
|
len = leb(s->pb, &c->temporal_unit_size, 1);
|
||||||
if (len == AVERROR_EOF) goto end;
|
if (len == AVERROR_EOF) goto end;
|
||||||
else if (len < 0) return len;
|
else if (len < 0) return len;
|
||||||
@ -279,6 +284,9 @@ end:
|
|||||||
if (ret == AVERROR(EAGAIN))
|
if (ret == AVERROR(EAGAIN))
|
||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
pkt->pos = pos;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user