diff options
author | Paul B Mahol <onemda@gmail.com> | 2020-09-10 00:39:47 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2020-09-13 16:05:01 +0200 |
commit | e1da139a331de753867dc3af2da0d8341f9d2ed5 (patch) | |
tree | c6d434094819b5a666ddaf419a31d5da4ffbbfc8 /libavformat | |
parent | 55af1807f7606225616e0a64a2142aa560232887 (diff) | |
download | ffmpeg-e1da139a331de753867dc3af2da0d8341f9d2ed5.tar.gz |
avcodec/cdgraphics: fix decoded output when seeking to start of file
Also in cdg demuxer do not skip packets data, and remove
private context which is not really needed.
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/cdg.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/libavformat/cdg.c b/libavformat/cdg.c index f933819d57..8fb287a998 100644 --- a/libavformat/cdg.c +++ b/libavformat/cdg.c @@ -26,10 +26,6 @@ #define CDG_COMMAND 0x09 #define CDG_MASK 0x3F -typedef struct CDGContext { - int got_first_packet; -} CDGContext; - static int read_header(AVFormatContext *s) { AVStream *vst; @@ -56,26 +52,16 @@ static int read_header(AVFormatContext *s) static int read_packet(AVFormatContext *s, AVPacket *pkt) { - CDGContext *priv = s->priv_data; int ret; - while (1) { - ret = av_get_packet(s->pb, pkt, CDG_PACKET_SIZE); - if (ret < 1 || (pkt->data[0] & CDG_MASK) == CDG_COMMAND) - break; - av_packet_unref(pkt); - } - - if (!priv->got_first_packet) { - pkt->flags |= AV_PKT_FLAG_KEY; - priv->got_first_packet = 1; - } - + ret = av_get_packet(s->pb, pkt, CDG_PACKET_SIZE); pkt->stream_index = 0; pkt->dts= pkt->pts= pkt->pos / CDG_PACKET_SIZE; - if(ret>5 && (pkt->data[0]&0x3F) == 9 && (pkt->data[1]&0x3F)==1 && !(pkt->data[2+2+1] & 0x0F)){ + if (!pkt->pos || (ret > 5 && + (pkt->data[0] & CDG_MASK) == CDG_COMMAND && + (pkt->data[1] & CDG_MASK) == 1 && !(pkt->data[2+2+1] & 0x0F))) { pkt->flags = AV_PKT_FLAG_KEY; } return ret; @@ -84,7 +70,6 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) AVInputFormat ff_cdg_demuxer = { .name = "cdg", .long_name = NULL_IF_CONFIG_SMALL("CD Graphics"), - .priv_data_size = sizeof(CDGContext), .read_header = read_header, .read_packet = read_packet, .flags = AVFMT_GENERIC_INDEX, |