From patchwork Fri Aug 6 13:29:49 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: 29313 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp525787ioh; Fri, 6 Aug 2021 06:30:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy08y5/ufOZp3EzRKmcd8rvIRmHhBz8Ti8Jd4JUHOZS/2WjbopujdPnKdF8UfGeiPD/PA/m X-Received: by 2002:a17:906:3888:: with SMTP id q8mr9593368ejd.269.1628256602209; Fri, 06 Aug 2021 06:30:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628256602; cv=none; d=google.com; s=arc-20160816; b=pDnqCLXpqYRCuFpqEXSKsydaTC/+3rWhBXBhh5/OZ2VDv+J9JHMqzARKODZY+06DKR p2f/B8HTgR8ihzPoWAof/mNv0dzWudDLqj7R0quGUvUhCXDGlAZFzzxz8HwywCZrkjls g3as4h1+EugD58kDz2QhSB7EDgTVSsjAuf/QToqf/ISf4pFziBtq/D75TS1Furf2ERqA muxTQ8vKbyiW9J7MTnBBINGUcLwqvQuiFxn1YmejBnvBtMZ/KcXQ2os1f/J7IuH8xO+X dOZwwk4m1rOjEGjwZXzdVjLC8M86fmAE1x1DAKRQBsyZQlaqL9X9pM7sJ1Xf1M/HAFxN ll9A== 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=FyPFWATRwhbANpXs8PCV+PlWWZ6ml7/qacZN6CYEIUc=; b=MECqqQ61+iqdhnF2TERKSga9mR29speV8yfeY2XqVrJmDko3wp9tNyEj9roV3pDLm5 W9f/R6uzThsqXpk+qgTt1JKfbUfKJz9SZLiC3IuEa5FIZRBZK6/KA8qnxZ95sJw2U/R7 OSsm2rGktTnfGNz7VW9QXfusGervpJinSUM3i8nDwponwBYwwBjMmnTOtNjr6EOY1WWU MxpaV2xFqVXKGH6qoPDmUTLXZyKfuzhnt1GYELCWny2KJFhMZfOitFSJDEdYXpOsopjQ s0NVEuJn+sv/HkBR74cnJu4XNwz0ug6i0iLWkn5u8Ga2Nx0NKpsAGPBPFQK+ViXCMZEc WszQ== 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=Grzp4Mz9; 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 v22si8613147ejr.421.2021.08.06.06.30.01; Fri, 06 Aug 2021 06:30:02 -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=Grzp4Mz9; 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 3DABF6881B5; Fri, 6 Aug 2021 16:29: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 B16B76808B2 for ; Fri, 6 Aug 2021 16:29:50 +0300 (EEST) Received: from w3.tutanota.de (unknown [192.168.1.164]) by w4.tutanota.de (Postfix) with ESMTP id EEB62106032B for ; Fri, 6 Aug 2021 13:29:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1628256589; 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=suGSbThT0XMxwzrupI/XtAkzpsFuvxRfn1P9lkoATfI=; b=Grzp4Mz9Nq0H5VavZ/xNzgOtumbXWDQFnVKlSGscQPPOut+FbirG85wPTyFwinPl 5RY09HbBx6FMvOH3CRuwJQmRa85u0CPoTDG3eZGiwbo1a/0QPCYtWjr2leYptxceybC /AcQEDVSRgv9lQx6wpJNgfybdbr+gYvYnYjH1Q7R102k1VH+gsLz5azAJ2QvdE79BLM FZr8LRzFu6ou0sYbOYnRdO4hZ6Dxq3KxIdGOxPr5EcRjHA2EkrgOzFflopOzxPNdQQO Ql66MNuIJbzAGxsE67cxK3cQE24qFdPTCf5WiszsmUbv5mji7o3U40wABnDqwkcxckf 6qKbeKOvxw== Date: Fri, 6 Aug 2021 15:29:49 +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: 6PBpSVE/EdOO 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, \