diff options
author | James Almer <jamrial@gmail.com> | 2020-08-14 00:43:17 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2020-08-15 13:01:30 -0300 |
commit | a72d5290c5b70780fe7132c68498c0aa1456908f (patch) | |
tree | ac83ef868d554fb7ac91f867b03c6abad32483e9 /libavformat/av1dec.c | |
parent | 0de01da1d2d912d3cebf528b188dc5b89d6b7d69 (diff) | |
download | ffmpeg-a72d5290c5b70780fe7132c68498c0aa1456908f.tar.gz |
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>
Diffstat (limited to 'libavformat/av1dec.c')
-rw-r--r-- | libavformat/av1dec.c | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c index 0693e40ac1..c06f5303f5 100644 --- a/libavformat/av1dec.c +++ b/libavformat/av1dec.c @@ -382,60 +382,46 @@ static int obu_read_header(AVFormatContext *s) 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; + uint8_t header[MAX_OBU_HEADER_SIZE]; + int64_t obu_size; int size = av_fifo_space(c->fifo); + int ret, len, type; + av_fifo_generic_write(c->fifo, s->pb, size, (int (*)(void*, void*, int))avio_read); size = av_fifo_size(c->fifo); - if (size > 0) { - av_fifo_generic_peek(c->fifo, dest, size, NULL); + if (!size) + return 0; + + av_fifo_generic_peek(c->fifo, header, size, NULL); + + len = read_obu_with_size(header, size, &obu_size, &type); + if (len < 0) { + av_log(c, AV_LOG_ERROR, "Failed to read obu\n"); + return len; } - return size; -} -static int obu_read_data(AVFormatContext *s, AVPacket *pkt, int len) -{ - int size, left; - ObuContext *c = s->priv_data; - int ret = av_new_packet(pkt, len); + ret = av_new_packet(pkt, len); if (ret < 0) { av_log(c, AV_LOG_ERROR, "Failed to allocate packet for obu\n"); return ret; } - size = FFMIN(av_fifo_size(c->fifo), len); + size = FFMIN(size, len); av_fifo_generic_read(c->fifo, pkt->data, size, NULL); - left = len - size; - if (left > 0) { - ret = avio_read(s->pb, pkt->data + size, left); - if (ret != left) { - av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", left); + len -= size; + if (len > 0) { + ret = avio_read(s->pb, pkt->data + size, len); + if (ret != len) { + av_log(c, AV_LOG_ERROR, "Failed to read %d frome file\n", len); return ret < 0 ? ret : AVERROR_INVALIDDATA; } } 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) { ObuContext *c = s->priv_data; |