From patchwork Tue Mar 26 14:20:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Adenot X-Patchwork-Id: 47492 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c889:b0:1a3:b6bb:3029 with SMTP id hb9csp162582pzb; Tue, 26 Mar 2024 07:20:44 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWndBgJJtAsg2mWs65AbjXODMTJHi19m7d5j3CZPI15JQaLpnR9+eM4GS4BZdREjV2UW9UKjGBT7wJ8Q2trtkNJVqmaGT3+RlYoJg== X-Google-Smtp-Source: AGHT+IGEBsr78M5uHU0ZzpdmbwRUQqAef5ASWzi2LylCQWJ4R0teyD0gBQQEjKTh6q60wHeWT3gQ X-Received: by 2002:a17:907:7289:b0:a47:4951:7415 with SMTP id dt9-20020a170907728900b00a4749517415mr7748847ejc.0.1711462844204; Tue, 26 Mar 2024 07:20:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1711462844; cv=none; d=google.com; s=arc-20160816; b=wTFR57shA2cvc6/9H7bNXJF1LladglbwUjJkNwCXai6eE+IKWjQ3mC4/gnh0T0IlEz KzX1rlJtaDJBgY6idJbb8bJRo552LtgY26UHW+XGzntuCXDpJz1KagEl9x49GK8a7/jf 1AUD3V64pf/+0LyYIei9YFUYJxK6Z/pSSufNi9WnZzObcz/cIO/XhpnJU+/oSI3FKJ/3 jc7/wVEgrSFqHc87/mQSZXyr+h/XizSJz8BgDrtfHIduQ3TbCjH6p/QYPhGlOHMdsQtP cjSRre/NFn5t4vUmnYb2WN+kxpg52hWvojxx8U+hNHXW7Cmko/eBA4xel7d0xtjck7IC iKIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=v/FAAqQ6XKMDn+flvu03xkGAG2jv+LQqDtih8KgA1Ew=; fh=/4knGUKsA4Bi2i/Cw7yGpJ0o63mn3tI3atDWce7eNic=; b=nmWe3Iy3ZHjGbii9XTCXYaPTh+ZY+uCVYg4b/UCdJ3wiI8xfFXZ2fK2LOoJ8bAHe+e knADoxKTbeHJrfKrmsYd940hwssvXwB69aVPWn/MHKVUO23YPBjCSu1JBsCz/kWLIjBV d4AuLumwGMWqnDZcmK6kEHfI1Njlwp7pizPxeo5YErX89HDYcoEd7hVCr47RGwBzj/ZB VyppOBkuWO+IlGPxuFpkiDdxBHoO0XojxV/BM5M0Rn9T+oGoPpK9X5ETgQBsYpUBibLO FtjitumBSl00k3vfo3oDuWw9BoRXFZWBHiXlT+SBMlNtYN1ABQyjm0b/5tgVls9vx6qq ahgg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mozilla.com header.s=google header.b=ccqeEbVc; 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=NONE dis=NONE) header.from=mozilla.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gb25-20020a170907961900b00a4df4650bacsi699330ejc.1041.2024.03.26.07.20.43; Tue, 26 Mar 2024 07:20:44 -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=@mozilla.com header.s=google header.b=ccqeEbVc; 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=NONE dis=NONE) header.from=mozilla.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0DE4E68D52B; Tue, 26 Mar 2024 16:20:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BC91568D014 for ; Tue, 26 Mar 2024 16:20:32 +0200 (EET) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4148cbc5b01so7083335e9.1 for ; Tue, 26 Mar 2024 07:20:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mozilla.com; s=google; t=1711462831; x=1712067631; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=0B3r2aCFdoanxHl2iKRgNf7vaG1kAbciH+ADnvh1pSY=; b=ccqeEbVckvR70/WjcT+dl5W+QSvuSgDMFVYr/koQ+M7fdG1wzJEdZhHryb/mw4tTWK 28qedHls1ygInjpJ6PF7ftbUApWy2OOUOQmRKUsEQeHXvnE8fIXbvvi0JA4PAv93am9n vpAI+++LHcA2aspEUK2tJAfWjFYg/uEqrV8NQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711462831; x=1712067631; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=0B3r2aCFdoanxHl2iKRgNf7vaG1kAbciH+ADnvh1pSY=; b=A4R8cT3rXZ+SKNF88homuM068RaQxfQMpytjyJa/5b+JFGgWG2cPLWvCR/2b2T7rXN KuV0q4r+kDi94yPeU/6lSEojpIhh05N70EDfTvtYNu8j5ZM6up5/nN8g+NwhndNC93Di QvvqYVJdPqDEm7wF2kgM5SJk6p1YNSnihvDT5QRP1j/v/iZIiUtE7af6KPHV0ns4CwTh GK+2DiYaCxWPJ/WSka5hsjywUCAIbLKPjbobQoJ5DZXVJh4px81JQTttxklmWEKQCldk URI05GCF9gxI3Ise/3V0SR4GIRN3hWWjseDWn+077UplYvOELp+tVx91L/9YBZqWX7nQ Vwsw== X-Gm-Message-State: AOJu0Yww+5SEv2vmeGRjnOw0zqquRHE90rP6HkZBlYwrevS/a3vIcD1B vlwlXl0FQRr8RI2KDE/h6uv1MIo5P9xTgB8G28jkJTFHaYNWFz4X4zYJ4KM61eM/hqpGeuevIqU = X-Received: by 2002:a05:600c:1c8d:b0:412:f015:6fa6 with SMTP id k13-20020a05600c1c8d00b00412f0156fa6mr7871736wms.28.1711462831490; Tue, 26 Mar 2024 07:20:31 -0700 (PDT) Received: from padenot-box.tailfe02.ts.net ([83.167.39.250]) by smtp.gmail.com with ESMTPSA id hg9-20020a05600c538900b004101f27737asm11628931wmb.29.2024.03.26.07.20.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Mar 2024 07:20:31 -0700 (PDT) From: Paul Adenot X-Google-Original-From: Paul Adenot To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Mar 2024 15:20:29 +0100 Message-Id: <20240326142029.1715497-1-paul@paul.cx> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec: Allow enabling DTX in libopusenc 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 Cc: Paul Adenot Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +997YltAe74X From: Paul Adenot --- doc/encoders.texi | 4 ++++ libavcodec/libopusenc.c | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index 7c223ed74c..d459b2865f 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -1000,6 +1000,10 @@ Other values include 0 for mono and stereo, 1 for surround sound with masking and LFE bandwidth optimizations, and 255 for independent streams with an unspecified channel layout. +@item dtx (N.A.) +Allow discontinuous transmission when set to 1. The default value is 0 +(disabled). + @item apply_phase_inv (N.A.) (requires libopus >= 1.2) If set to 0, disables the use of phase inversion for intensity stereo, improving the quality of mono downmixes, but slightly reducing normal stereo diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c index af25f27f74..e727448cdd 100644 --- a/libavcodec/libopusenc.c +++ b/libavcodec/libopusenc.c @@ -42,6 +42,7 @@ typedef struct LibopusEncOpts { int packet_size; int max_bandwidth; int mapping_family; + int dtx; #ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST int apply_phase_inv; #endif @@ -159,6 +160,13 @@ static int libopus_configure_encoder(AVCodecContext *avctx, OpusMSEncoder *enc, "Unable to set inband FEC: %s\n", opus_strerror(ret)); + ret = opus_multistream_encoder_ctl(enc, + OPUS_SET_DTX(opts->dtx)); + if (ret != OPUS_OK) + av_log(avctx, AV_LOG_WARNING, + "Unable to set DTX: %s\n", + opus_strerror(ret)); + if (avctx->cutoff) { ret = opus_multistream_encoder_ctl(enc, OPUS_SET_MAX_BANDWIDTH(opts->max_bandwidth)); @@ -556,6 +564,7 @@ static const AVOption libopus_options[] = { { "on", "Use variable bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, FLAGS, .unit = "vbr" }, { "constrained", "Use constrained VBR", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, FLAGS, .unit = "vbr" }, { "mapping_family", "Channel Mapping Family", OFFSET(mapping_family), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, FLAGS, .unit = "mapping_family" }, + { "dtx", "Enable DTX (Discontinuous transmission)", OFFSET(dtx), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, #ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST { "apply_phase_inv", "Apply intensity stereo phase inversion", OFFSET(apply_phase_inv), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FLAGS }, #endif