From patchwork Sat Sep 3 16:24:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 37630 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp1652871pzh; Sat, 3 Sep 2022 09:21:57 -0700 (PDT) X-Google-Smtp-Source: AA6agR6xbqQ6rKLhAPAd2OcXW2wPlHDiMLtsEJzviYGZx8FFIRurZq4jCQD1/pSECL+MHy4VGHi2 X-Received: by 2002:a17:907:2c74:b0:741:657a:89de with SMTP id ib20-20020a1709072c7400b00741657a89demr21860917ejc.58.1662222116837; Sat, 03 Sep 2022 09:21:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662222116; cv=none; d=google.com; s=arc-20160816; b=F7/yGGqX5FJcjEsylSQXin8oDDHoYeou4NXP8M0X7D8xptXitAKT8uFB7XuYRqBhkO vzVy0CQq3/CncvGTo/MEIyuJv0UWEQoBAvawtToMPHubgr+aP03HIBVh/SBeSJYIzjI9 X//pM5Oc7a6X/2CPohytuBGktiZRAEQ5Nxjf61WyCuHf9gSF6/sQrb0ewP0wKkoInGMs 6yWxOkQdPaHX2Krrqv30lFNVNlnDSw1EEqmF/DsLZncLXDi6vgk+CjIoYb8obzIQWibF Oyri16W2Hn8YvuIoSoHoYutTpE6pqY7MH2c8rlEu0dT9awu5+SJzCgwm+k4/iQfLBJ/+ iXTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=ggIv+H4kwpxSD8X9ciC1UUdDu3FOpbY/nhfI1jFYqBE=; b=KQRH9biuSHHuizf3LlrO3Ja5xb3hu4lKpU/cLvqd2tptxRrp7pW3+IZtYnhFLs6HY8 obHDGBsOospkN+9YRKsEC3Pk6kvAxU9T5bAcLJT/XbwSaD74bKHXaY7vQpphNmb/axsY shcZCVZmzIhX167uYFV0Ditd9ehNNJ4V67ABlyv6WoXAnn92VyyyEZhl6bd4VEh3VDpI yQJSfQDFEvHc5dkkglsjQBo5XFxVtjdOpGokeDpwZwxmcHB9+IxG383c3vJfDcc5230g yjahCtpmpgeAN9w+7i5YSK5L0HE2h3YCguJKrb/YAaihmR/MPYATSDzQSCFBXKyaZefS whRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Mq4H99Yx; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q11-20020a1709064ccb00b00741a19b63b3si3664755ejt.167.2022.09.03.09.21.56; Sat, 03 Sep 2022 09:21:56 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Mq4H99Yx; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 340B568B3FD; Sat, 3 Sep 2022 19:21:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb1-f172.google.com (mail-yb1-f172.google.com [209.85.219.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C81168B556 for ; Sat, 3 Sep 2022 19:21:45 +0300 (EEST) Received: by mail-yb1-f172.google.com with SMTP id 193so7189629ybc.10 for ; Sat, 03 Sep 2022 09:21:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date; bh=DXXF0jy+d22Cirswf7NF0nB+sOIp0ibeo+b62qHoDB0=; b=Mq4H99YxZE+i8CgTvZOBPJ+3DXAx9Tza4TFDNY1qEC99DqWGCefr5TW4nYLo/bI4W+ zl1X++IibbOPw8BYRyQRkARTnYp0NxiM0ya0bx+keWzF5HEliz1+GpbT2gIKABfITwhc v01+UCbab9LTF93q2Tqe8Mx78kOYGNK8asknvyFLJX8iv6xTErcAMrHaaBlrQEwlsTpE fmD5F7KPhiwILpl8EXpE+97pfHxzbMWeUe1VA3OMGzF7FVDg8flYBuCHUFsPMSoWlm+B /VZItAJDZiDiePCXDp1I/ca089HU6iZ6V3sSTWn3K2SZcGFalX/NYpxaY+nE4BOD9rO8 I7oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date; bh=DXXF0jy+d22Cirswf7NF0nB+sOIp0ibeo+b62qHoDB0=; b=nm62n92QBNuElJ/ISAwWTxMiAvGs66HYJV6FvpTTKbCHzUy/9Ip+wWkfg7rF2BaDyP e42r3KWdNL8WwA+bswXwX1CLQMp0MdMgMgKMm6rSq9ID5zOmecVnsEKh3kGI0f40DmHR r6Z5aNR2ZOwwOMKewVZJu1gzBNg4DXQlFRkUyYJ9RP86WzOMnosrrkGhZrMeaD6QarV/ Pe/fLO+pk25frqKamWPetfiir5/mQk2GqjGxqtK3QGTLAeiHRWM2tN0OCEHUJUBvpMLh CSush1EZ8GvzvEoEltDd43Ve2DfSib5NnsUlYALU1YWksSBea3DtgEQaObjZjRnQaCOK rcTQ== X-Gm-Message-State: ACgBeo0SklEy5egH/XqryKa76r7a2h+gwzGuDC4WPMjjscaRDWyyQjge VC0Na7CtI27e8vy7NnBGS+5nQORTksRfRyF+Z6SOkizT X-Received: by 2002:a05:6902:10c3:b0:69a:ae8:1600 with SMTP id w3-20020a05690210c300b0069a0ae81600mr24166327ybu.227.1662222100816; Sat, 03 Sep 2022 09:21:40 -0700 (PDT) MIME-Version: 1.0 From: Paul B Mahol Date: Sat, 3 Sep 2022 18:24:51 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] speexdec fix X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: y9H5xs4OBlAu Patch attached. From 6a90e5d582ba2fc3a08fb08fb1b5f3f38d315b3f Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 3 Sep 2022 18:17:23 +0200 Subject: [PATCH] avcodec/speexdec: improve support for speex in non-ogg Signed-off-by: Paul B Mahol --- libavcodec/speexdec.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libavcodec/speexdec.c b/libavcodec/speexdec.c index 83981fc454..9793d939fc 100644 --- a/libavcodec/speexdec.c +++ b/libavcodec/speexdec.c @@ -1462,7 +1462,7 @@ static av_cold int speex_decode_init(AVCodecContext *avctx) default: s->mode = 2; } - s->frames_per_packet = 1; + s->frames_per_packet = 64; s->frame_size = NB_FRAME_SIZE << s->mode; } @@ -1537,6 +1537,7 @@ static int speex_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) { SpeexContext *s = avctx->priv_data; + int frames_per_packet = s->frames_per_packet; const float scale = 1.f / 32768.f; int buf_size = avpkt->size; float *dst; @@ -1547,26 +1548,31 @@ static int speex_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = init_get_bits8(&s->gb, avpkt->data, buf_size)) < 0) return ret; - frame->nb_samples = FFALIGN(s->frame_size * s->frames_per_packet, 4); + frame->nb_samples = FFALIGN(s->frame_size * frames_per_packet, 4); if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; dst = (float *)frame->extended_data[0]; - for (int i = 0; i < s->frames_per_packet; i++) { + for (int i = 0; i < frames_per_packet; i++) { ret = speex_modes[s->mode].decode(avctx, &s->st[s->mode], &s->gb, dst + i * s->frame_size); if (ret < 0) return ret; if (avctx->ch_layout.nb_channels == 2) speex_decode_stereo(dst + i * s->frame_size, s->frame_size, &s->stereo); + if (get_bits_left(&s->gb) < 5 || + show_bits(&s->gb, 5) == 15) { + frames_per_packet = i + 1; + break; + } } dst = (float *)frame->extended_data[0]; s->fdsp->vector_fmul_scalar(dst, dst, scale, frame->nb_samples * frame->ch_layout.nb_channels); - frame->nb_samples = s->frame_size * s->frames_per_packet; + frame->nb_samples = s->frame_size * frames_per_packet; *got_frame_ptr = 1; - return buf_size; + return (get_bits_count(&s->gb) + 7) >> 3; } static av_cold int speex_decode_close(AVCodecContext *avctx) -- 2.37.2