From patchwork Mon Jan 28 14:13:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 11906 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 5E76044C1E1 for ; Mon, 28 Jan 2019 16:13:31 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7AEF468AB8B; Mon, 28 Jan 2019 16:13:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it1-f194.google.com (mail-it1-f194.google.com [209.85.166.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A46E68A9F1 for ; Mon, 28 Jan 2019 16:13:13 +0200 (EET) Received: by mail-it1-f194.google.com with SMTP id b5so19498069iti.2 for ; Mon, 28 Jan 2019 06:13:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=UF8x8Qc2L4++9VTz+Be4kMtC4sZmAiEacYNyRsDzk1k=; b=eOMMagghSJh+iQ7xt+5ecOb9GKD+aopA85EOd0g+yuFfcg5IWbEyrAVJCEVt2sCIts x+FNB3+nV5qbd37L4/0HNy1dxRZ/VgUdj1piBeAB6Bzi/1WaFaYZS2yZhrzl+Bgufut9 EwGSjKXHPa0p7Y0PTdBIVNWZfPEZSv0C+yC2oH1WJZaMiTEkPaW7fqVmkNH3seDeXQRh XlXPFzEHw8wbeWgzz0846EZ6NDdOOAUEVA8rNe8QTad1srEGWRkvXUmVKyKPW1dAJJOd ajyojtr3ufdNn3AzP/Rx3NLaKvfKbncEbMB8cW7s7i2QZj7G7Utk7i+E4EnGC+Ex8Knh 3YHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=UF8x8Qc2L4++9VTz+Be4kMtC4sZmAiEacYNyRsDzk1k=; b=lm//g7jBRESWsybLURfWr6sm81MhkLL+/dG1d5sm4Wtp9Q/y3Fnv7zYpXmXtnHyUVs TbGDYfGN3t2FeyO19SmyjvYDG9Y0znWaaihgnTziDidlv+X8iTWr+Mq7Qg/co7DSOI3W KGN7GranrhZlS579Du94AfKXrQ7XYboMNcdpW7B906MeEk9PuQ6I6/BUFJ2g0lbA02od 58iwtvvxTlMoPbjrZ22k+6dB1LzVVHQmN+0ihSsdYfgR2KB2l0goY+Pe8+S/q50681s2 Nop0KjbAbuTVmMHwXNxZwgzIG3gHSZdCPXmd6jNUJFJmCpzHpj0KYeUaBxMOP1zsPO/L RU6Q== X-Gm-Message-State: AJcUukfRKfl7ll/nLEzShLEbr9L6aUmwjjrT80li9bof0lmS4PEA4yBQ UG/FlyZzLrVMW/wJoRHuuv4I0pZq+cbCsoaeUcGyuQ== X-Google-Smtp-Source: ALg8bN42+cJjVK7+3IvZQ+sAHRCny08gRwUcya1soNg7WFXn/ETitiiZ6vEiPGKZCi1rjdcsp6UTj+8hKqR76r5i7qU= X-Received: by 2002:a02:48c6:: with SMTP id p189mr12231394jaa.89.1548684811908; Mon, 28 Jan 2019 06:13:31 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a02:5f11:0:0:0:0:0 with HTTP; Mon, 28 Jan 2019 06:13:31 -0800 (PST) From: Carl Eugen Hoyos Date: Mon, 28 Jan 2019 15:13:31 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavc/amrwbdec: Do not ignore NO_DATA frames 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Hi! Attached patch fixes the actual output duration for AMR-WB samples with NO_DATA frames. A follow-up patch also skips corrupted frames, making the output of the sample in ticket #7113 very similar to the reference decoder. Please comment, Carl Eugen From ab817b2c8fc96ddabc8238c9be2beed04cd54512 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Mon, 28 Jan 2019 15:10:13 +0100 Subject: [PATCH] lavc/amrwbdec: Do not ignore NO_DATA frames. Fixes the actual output duration of the sample in ticket #7113. --- libavcodec/amrwbdata.h | 2 +- libavcodec/amrwbdec.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libavcodec/amrwbdata.h b/libavcodec/amrwbdata.h index 8a8cbfd..95c0aaa 100644 --- a/libavcodec/amrwbdata.h +++ b/libavcodec/amrwbdata.h @@ -1884,7 +1884,7 @@ static const float lpf_7_coef[31] = { // low pass, 7kHz cutoff /** Core frame sizes in each mode */ static const uint16_t cf_sizes_wb[] = { 132, 177, 253, 285, 317, 365, 397, 461, 477, - 40 /// SID/comfort noise frame + 40, 0, 0, 0, 0, 0, 0 }; #endif /* AVCODEC_AMRWBDATA_H */ diff --git a/libavcodec/amrwbdec.c b/libavcodec/amrwbdec.c index 47fe7eb..997b3e8 100644 --- a/libavcodec/amrwbdec.c +++ b/libavcodec/amrwbdec.c @@ -1119,12 +1119,17 @@ static int amrwb_decode_frame(AVCodecContext *avctx, void *data, buf_out = (float *)frame->data[0]; header_size = decode_mime_header(ctx, buf); + expected_fr_size = ((cf_sizes_wb[ctx->fr_cur_mode] + 7) >> 3) + 1; + + if (ctx->fr_cur_mode == NO_DATA) { + *got_frame_ptr = 1; + return expected_fr_size; + } if (ctx->fr_cur_mode > MODE_SID) { av_log(avctx, AV_LOG_ERROR, "Invalid mode %d\n", ctx->fr_cur_mode); return AVERROR_INVALIDDATA; } - expected_fr_size = ((cf_sizes_wb[ctx->fr_cur_mode] + 7) >> 3) + 1; if (buf_size < expected_fr_size) { av_log(avctx, AV_LOG_ERROR, -- 1.7.10.4