From patchwork Fri Sep 18 10:10:30 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: 22466 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 552A244ADA3 for ; Fri, 18 Sep 2020 13:10:50 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3540968BB23; Fri, 18 Sep 2020 13:10:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6E38168BA1B for ; Fri, 18 Sep 2020 13:10:43 +0300 (EEST) Received: by mail-wr1-f67.google.com with SMTP id z1so5037425wrt.3 for ; Fri, 18 Sep 2020 03:10:43 -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=DSas/aJRnIhqDHKDjJ8LN7mhGGh/roO1PdoCHNR3I9c=; b=sIatirqb9iECgINSBbWpcWnqPFrXTCBxqUGNJZn+Gxfv5xvPz2gzaOE86itywHRcL9 D/Md+XYgeAOuo1Oyk4TqdxXP3DcT8bMKgfvWw03ZTmlUI5uel/D8QKtNPR6KsmdBgHSP VN4pvttbtaH7QFgVMZ6znUIvfGLywx6+tL/3VxWHHYHdzZ+7ZtSWZy/Cb35/qyB3Lg18 1xsW7CSx1js2NfyPNcv0q85AMiyNG4mLspvu3hVQNBcwJpeQJyiJofXbyZf62wsCtptx XoE30BFjGRPFMnXTnH2VcHyJc4WuYmU/blob8fehP2O6XhOHBBLhPpwAzoj+3zHAGMyN NwXg== 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=DSas/aJRnIhqDHKDjJ8LN7mhGGh/roO1PdoCHNR3I9c=; b=dSlmoW2NrIB1RuoZp1sJdVXqi+F1gVfLgANDV8QCyuPtZ3C194w21blvjHQbzB3i7Y JYt38dqG9Jl5hXFpXb77ql8cVg0EqXrG2HhnY1cZIKdVbtv8CtiDsWn3KJUI+IyNp9Gt +ttEtJsQhrTkgdswEJEsL3bAlzD4imonINPzzEeQJuXxIx8scNeragaFlhLJ+MWL5Gce wzmgbfjYcyO7tVnj8uszYq0U9q5m0H5L4JRQRhwBGIV8WOlZoDZoPGArXESxBvbY3RcT J/3kaDO7ZxsrOKv5NFaICanPuhR2Jjhod/QpEHddIiLAPXsmnR6A1bb4sXYrlgMkl6tH KRgw== X-Gm-Message-State: AOAM531P//c/JM9pPtGjEZ7tqpdYzpW4K3bzMR3vlmR99JCu/o/LClfU oT0EtivZIYiZ/5Iyzy4d8D1QPLx+B8z68g== X-Google-Smtp-Source: ABdhPJwQnzrfFvx2YXTFfgo7nn+TqYrzwsWM/4ZfR7WXmXVR5erikaX+PorRmsY74hhVYJELwkSeNA== X-Received: by 2002:a05:6000:1152:: with SMTP id d18mr36591961wrx.173.1600423842544; Fri, 18 Sep 2020 03:10:42 -0700 (PDT) Received: from localhost.localdomain ([94.250.162.52]) by smtp.gmail.com with ESMTPSA id u126sm5255895wmu.9.2020.09.18.03.10.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2020 03:10:41 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Sep 2020 12:10:30 +0200 Message-Id: <20200918101030.20626-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/adxdec: demux multiple blocks at once 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" Improves decoding speed by 24x Signed-off-by: Paul B Mahol --- libavformat/adxdec.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libavformat/adxdec.c b/libavformat/adxdec.c index ccd5049acd..0e4c251cfc 100644 --- a/libavformat/adxdec.c +++ b/libavformat/adxdec.c @@ -53,6 +53,9 @@ static int adx_read_packet(AVFormatContext *s, AVPacket *pkt) AVCodecParameters *par = s->streams[0]->codecpar; int ret, size; + if (avio_feof(s->pb)) + return AVERROR_EOF; + if (par->channels <= 0) { av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", par->channels); return AVERROR_INVALIDDATA; @@ -63,16 +66,20 @@ static int adx_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->pos = avio_tell(s->pb); pkt->stream_index = 0; - ret = av_get_packet(s->pb, pkt, size); - if (ret != size) { - return ret < 0 ? ret : AVERROR(EIO); - } - if (AV_RB16(pkt->data) & 0x8000) { - return AVERROR_EOF; + ret = av_get_packet(s->pb, pkt, size * 128); + if (ret < 0) + return ret; + if ((ret % size) && ret >= size) { + size = ret - (ret % size); + av_shrink_packet(pkt, size); + pkt->flags &= ~AV_PKT_FLAG_CORRUPT; + } else { + size = ret; } + pkt->size = size; - pkt->duration = 1; - pkt->pts = (pkt->pos - c->header_size) / size; + pkt->duration = size / (BLOCK_SIZE * par->channels); + pkt->pts = (pkt->pos - c->header_size) / (BLOCK_SIZE * par->channels); return 0; }