avformat/av1dec: inline obu_read_data() and obu_prefetch() into obu_get_packet()

They don't really help making the demuxer more readable.

Reviewed-by: Guangxin Xu <oddstone@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer 2020-08-14 00:43:17 -03:00
parent 0de01da1d2
commit a72d5290c5
1 changed files with 22 additions and 36 deletions

View File

@ -382,60 +382,46 @@ static int obu_read_header(AVFormatContext *s)
return read_header(s, &c->framerate, &c->bsf, c); return read_header(s, &c->framerate, &c->bsf, c);
} }
static int obu_prefetch(AVFormatContext *s, uint8_t* dest) static int obu_get_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ObuContext *c = s->priv_data; ObuContext *c = s->priv_data;
uint8_t header[MAX_OBU_HEADER_SIZE];
int64_t obu_size;
int size = av_fifo_space(c->fifo); int size = av_fifo_space(c->fifo);
int ret, len, type;
av_fifo_generic_write(c->fifo, s->pb, size, av_fifo_generic_write(c->fifo, s->pb, size,
(int (*)(void*, void*, int))avio_read); (int (*)(void*, void*, int))avio_read);
size = av_fifo_size(c->fifo); size = av_fifo_size(c->fifo);
if (size > 0) { if (!size)
av_fifo_generic_peek(c->fifo, dest, size, NULL); return 0;
}
return size;
}
static int obu_read_data(AVFormatContext *s, AVPacket *pkt, int len) av_fifo_generic_peek(c->fifo, header, size, NULL);
{
int size, left; len = read_obu_with_size(header, size, &obu_size, &type);
ObuContext *c = s->priv_data; if (len < 0) {
int ret = av_new_packet(pkt, len); av_log(c, AV_LOG_ERROR, "Failed to read obu\n");
return len;
}
ret = av_new_packet(pkt, len);
if (ret < 0) { if (ret < 0) {
av_log(c, AV_LOG_ERROR, "Failed to allocate packet for obu\n"); av_log(c, AV_LOG_ERROR, "Failed to allocate packet for obu\n");
return ret; return ret;
} }
size = FFMIN(av_fifo_size(c->fifo), len); size = FFMIN(size, len);
av_fifo_generic_read(c->fifo, pkt->data, size, NULL); av_fifo_generic_read(c->fifo, pkt->data, size, NULL);
left = len - size; len -= size;
if (left > 0) { if (len > 0) {
ret = avio_read(s->pb, pkt->data + size, left); ret = avio_read(s->pb, pkt->data + size, len);
if (ret != left) { if (ret != len) {
av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", left); av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", len);
return ret < 0 ? ret : AVERROR_INVALIDDATA; return ret < 0 ? ret : AVERROR_INVALIDDATA;
} }
} }
return 0; return 0;
} }
static int obu_get_packet(AVFormatContext *s, AVPacket *pkt)
{
ObuContext *c = s->priv_data;
int64_t obu_size;
int ret, type;
uint8_t header[MAX_OBU_HEADER_SIZE];
ret = obu_prefetch(s, header);
if (!ret)
return 0;
ret = read_obu_with_size(header, ret, &obu_size, &type);
if (ret < 0) {
av_log(c, AV_LOG_ERROR, "Failed to read obu\n");
return ret;
}
return obu_read_data(s, pkt, ret);
}
static int obu_read_packet(AVFormatContext *s, AVPacket *pkt) static int obu_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ObuContext *c = s->priv_data; ObuContext *c = s->priv_data;