From patchwork Wed Sep 9 22:42:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 22243 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B429C44948F for ; Thu, 10 Sep 2020 01:43:18 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8605E68B956; Thu, 10 Sep 2020 01:43:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 20A2468B86E for ; Thu, 10 Sep 2020 01:43:12 +0300 (EEST) Received: by mail-ej1-f67.google.com with SMTP id p9so5872719ejf.6 for ; Wed, 09 Sep 2020 15:43:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=6sYar8Yqy6r8rAhsUlandU6ghgGBDIZrAsa021ezG88=; b=kcaPFQCHkvCXCfhx+yo1Ei5HJ7I41gXZJDGqUx6KpftxdiB+kYmQK5Ne4L16HcqJq8 NG4IlkFeiAmX13sOZmzlOZWNABiz2ZKFblWA1KyhLq6xnU83bX6xZzMxyM6E9Lj0eDWH CHqx0ksi2NZUVEyln5w+TDu1K5xj6V8un3a7B86+X2sUX1uQ45uxYD7co4UBHLEI9c/V BOw9+7t3hhhBJGBh1g9ta5tGk1nqOjb4eOfyD43kc+L03RAan9MK8QlxwN6/VNYUwNCh +C0ye+o4CminNhZManvqrkqz1QAKF5Yo0XLnSNfuWUN2CXuyB9hbfuvbN6EtEVtk3QDY qYsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=6sYar8Yqy6r8rAhsUlandU6ghgGBDIZrAsa021ezG88=; b=iZabh10MHyG3EKyTgqoURhSS2XiUWGGO7VIhV4ZdbD7AeHZP18HbKHbMghP6Jgs1th vnzgLqnQKh/hd+Jrp0Zb1tBNmSRLznPqdMkxR0jmA/rxSimK4D+oXziK423NnhAJB2aN +DWSdn3KUTW6457zL1erbklhZ9FR8D6LXYjyz4ibl/HxNpqySS/dn6Pa/tI4miuzzZoU smsFM8tQlLAodk7FXbbScQATPBhilVHjksZgEdQI63kAZ6j6Rz77EilRmeg3pV1J89Sn Riv9qHne4QWw5Q11oxxLnbw242yiQfr77+3fjH/4RIn71qzy3oOr7GcqX9frw9QHln5W 54/Q== X-Gm-Message-State: AOAM530ByVHg5hwnXX3gk8oESszSBMOb8d20n2iUFhHZvL1OZCoxbRMy a2lPia0/Ivu5oJNTlnXRP/0L/vRCRe9lYA== X-Google-Smtp-Source: ABdhPJyRudEk7clOv0XsMPk1zCWtXamEAjmZN8bOM8mRyl5qtYi5wga/4QzFmx9LsEFgAVtO3A/uHg== X-Received: by 2002:a17:906:390d:: with SMTP id f13mr5855215eje.86.1599691391344; Wed, 09 Sep 2020 15:43:11 -0700 (PDT) Received: from localhost.localdomain ([94.250.162.52]) by smtp.gmail.com with ESMTPSA id b6sm4134102eds.46.2020.09.09.15.43.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2020 15:43:10 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Sep 2020 00:42:57 +0200 Message-Id: <20200909224257.22775-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avcodec/cdgraphics: fix decoded output when seeking to start of file X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Also in cdg demuxer do not skip packets data, and remove private context which is not really needed. Signed-off-by: Paul B Mahol --- libavcodec/cdgraphics.c | 10 ++++++++++ libavformat/cdg.c | 23 ++++------------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/libavcodec/cdgraphics.c b/libavcodec/cdgraphics.c index 469128964c..965f43684a 100644 --- a/libavcodec/cdgraphics.c +++ b/libavcodec/cdgraphics.c @@ -365,6 +365,15 @@ static int cdg_decode_frame(AVCodecContext *avctx, return avpkt->size; } +static void cdg_decode_flush(AVCodecContext *avctx) +{ + CDGraphicsContext *cc = avctx->priv_data; + + memset(cc->frame->data[0], 0, cc->frame->linesize[0] * avctx->height); + if (!avctx->frame_number) + memset(cc->frame->data[1], 0, AVPALETTE_SIZE); +} + static av_cold int cdg_decode_end(AVCodecContext *avctx) { CDGraphicsContext *cc = avctx->priv_data; @@ -383,5 +392,6 @@ AVCodec ff_cdgraphics_decoder = { .init = cdg_decode_init, .close = cdg_decode_end, .decode = cdg_decode_frame, + .flush = cdg_decode_flush, .capabilities = AV_CODEC_CAP_DR1, }; diff --git a/libavformat/cdg.c b/libavformat/cdg.c index 05cac6e528..ed30c3c0f6 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,