From patchwork Thu Aug 5 14:16:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: jason@jasonfry.co.uk X-Patchwork-Id: 29297 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp446642ioh; Thu, 5 Aug 2021 07:17:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzu9jDc4HLi6M5n2G6X/GIIbGGEOzpg4pgwnAfAI37ruBFIfPQi9PrpQBnJVGaAR4B4FGIF X-Received: by 2002:a05:6402:254a:: with SMTP id l10mr7054422edb.258.1628173030547; Thu, 05 Aug 2021 07:17:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628173030; cv=none; d=google.com; s=arc-20160816; b=zhK/gUDmcnrS9/5bydEeKt8mR+qc3jcIMrLo09lThSNmVymA4+zRTAkgQaRDQcqOpM z80Y3A4Q6CspV/FHwQjhiGYjRswlYEwHPr5Pk9IXIBIXirDNkZz2BGaBYXfdT6oTI08U YWY1akJdZCyRHXeuVH67NHsbzNc7Se/f/pjoyYwsN/BxFt43HGc2H092KiWcSxQSKMzv ft9YlrWpHqVP4WFPX7CWXlzX/QDd0eeZNgWGNnFyam0W4IAteWoFfyb1lrCcyw2eXL2p EinPa00r/aQniJfQ4KXQLys8ZV1uYgzRGgTMh0GfJHzz34qjYK/ounjh4hsdSPY3Nx/g bzEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:to:from:date :dkim-signature:delivered-to; bh=56mlUIRL2ZcQtfBDqaGjj16nwjhzbxE1VuRmu5YoiBk=; b=CkNYSjWk7+hdvIJZVwmQgnzqvaf+/Se4ameIIzvVwo0ewnrI8OiqshOF61MG3z7kqB DUj1nizSCgDtaF70hp0/Ku5q5S2dbIK5LV2xs7iZ1xOpLYhQzcR4Z4g0icJCPUVj1WQm 0AgCcVJkdQhseb3IfqHtrB+ymb+2sXMvCY6hsHch4yytJ14tTmUjBsqGCCRUc05f1eV4 73v++lwINuO/ssyHD2Z+niZAu2e3L5j9HCCOeya5rN1iuxASCB41ZRsPZ2Yc0fO1jbyK vvTE5X060zabzc5llTRJXcfX98QMc4aTtlNaz6ySpMe+xmetz1VEiFoe2t4CQ98+CDGj xOag== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jasonfry.co.uk header.s=s1 header.b=i7NnfJ5x; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=jasonfry.co.uk Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f15si5840596eds.511.2021.08.05.07.17.00; Thu, 05 Aug 2021 07:17:10 -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=@jasonfry.co.uk header.s=s1 header.b=i7NnfJ5x; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=jasonfry.co.uk Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6D12868A4D1; Thu, 5 Aug 2021 17:16:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 360EA6809BA for ; Thu, 5 Aug 2021 17:16:51 +0300 (EEST) Received: from w3.tutanota.de (unknown [192.168.1.164]) by w4.tutanota.de (Postfix) with ESMTP id C0F3D10602DC for ; Thu, 5 Aug 2021 14:16:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1628173010; s=s1; d=jasonfry.co.uk; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:Sender; bh=QmtzEHpy82kUHWcH/sSvGlwIjtuGIRtDat/f23uLgUA=; b=i7NnfJ5xsmTzfN+3El/uhGfKQEMNtXdbnM2fUKvtT4FrkUImTDLstea3+ImfegpM +lWlqOAIR80/kUqxYDzfbVZgNmQ17SoXk0ypbYgKqmyiEbHHgxEi1JDNYwYFw8MW0TX XcNMyGs1g4ZtVEL2bmh2i/K4dOFxPbLRnzB145PpYpYGssCzCHb/B+30CN6+yjkWjHi fNMar0ctYAOwZlI+f4sWawh7EupvIMHEGEFyFVI9FL6h14ZRnPFhuWS5xG9u3yobUuc bFL1teZ3C31HS52IyLuLuyLhVyJ03QN0YbGMF9AR9NEfPoFRYyYgMkHMeNQFJtFUVda TuXUvrqe9Q== Date: Thu, 5 Aug 2021 16:16:50 +0200 (CEST) From: jason@jasonfry.co.uk To: Ffmpeg Devel Message-ID: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/audiotoolbox Support float sample format 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: 0jeieyjKGPFx From 9ee25b6b3002cd4c629ca9999f850b637877b7a3 Mon Sep 17 00:00:00 2001 From: Jason Fry Date: Thu, 5 Aug 2021 15:01:11 +0100 Subject: [PATCH] avcodec/audiotoolbox Support float sample format Signed-off-by: Jason Fry --- libavcodec/audiotoolboxdec.c | 19 +++++++++++++++---- libavcodec/audiotoolboxenc.c |  2 +- 2 files changed, 16 insertions(+), 5 deletions(-) -- 2.30.0 diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c index a222cde62e..f2a897c8c1 100644 --- a/libavcodec/audiotoolboxdec.c +++ b/libavcodec/audiotoolboxdec.c @@ -304,8 +304,16 @@ static av_cold int ffat_create_decoder(AVCodecContext *avctx,      OSStatus status;      int i; -    enum AVSampleFormat sample_fmt = (avctx->bits_per_raw_sample == 32) ? +    enum AVSampleFormat sample_fmt = avctx->sample_fmt; +    if (sample_fmt == AV_SAMPLE_FMT_NONE) { +      sample_fmt = (avctx->bits_per_raw_sample == 32) ?                                       AV_SAMPLE_FMT_S32 : AV_SAMPLE_FMT_S16; +      avctx->sample_fmt = sample_fmt; +    } else if (sample_fmt != AV_SAMPLE_FMT_S16 && +               sample_fmt != AV_SAMPLE_FMT_S32 && +               sample_fmt != AV_SAMPLE_FMT_FLT) { +      return AVERROR_UNKNOWN; +    }      AudioStreamBasicDescription in_format = {          .mFormatID = ffat_get_format_id(avctx->codec_id, avctx->profile), @@ -313,12 +321,13 @@ static av_cold int ffat_create_decoder(AVCodecContext *avctx,      };      AudioStreamBasicDescription out_format = {          .mFormatID = kAudioFormatLinearPCM, -        .mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked, +        .mFormatFlags = (sample_fmt == AV_SAMPLE_FMT_FLT) ? +                                    kAudioFormatFlagIsFloat : +                                    kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked,          .mFramesPerPacket = 1,          .mBitsPerChannel = av_get_bytes_per_sample(sample_fmt) * 8,      }; -    avctx->sample_fmt = sample_fmt;      if (ffat_usable_extradata(avctx)) {          UInt32 format_size = sizeof(in_format); @@ -468,8 +477,10 @@ static void ffat_copy_samples(AVCodecContext *avctx, AVFrame *frame)      ATDecodeContext *at = avctx->priv_data;      if (avctx->sample_fmt == AV_SAMPLE_FMT_S32) {          COPY_SAMPLES(int32_t); -    } else { +    } else if (avctx->sample_fmt == AV_SAMPLE_FMT_S16) {          COPY_SAMPLES(int16_t); +    } else { +        COPY_SAMPLES(float_t);      } } diff --git a/libavcodec/audiotoolboxenc.c b/libavcodec/audiotoolboxenc.c index 9245aa9dc4..fddbd390f6 100644 --- a/libavcodec/audiotoolboxenc.c +++ b/libavcodec/audiotoolboxenc.c @@ -632,7 +632,7 @@ static const AVOption options[] = {          .capabilities   = AV_CODEC_CAP_DELAY | \                            AV_CODEC_CAP_ENCODER_FLUSH __VA_ARGS__, \          .sample_fmts    = (const enum AVSampleFormat[]) { \ -            AV_SAMPLE_FMT_S16, \ +            AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, \              AV_SAMPLE_FMT_U8,  AV_SAMPLE_FMT_NONE \          }, \          .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE, \