From patchwork Mon Jul 4 14:13:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip-Dylan Gleonec X-Patchwork-Id: 36651 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp2860735pzh; Mon, 4 Jul 2022 07:14:42 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tElxvvDGYgaY6Lj3OP1seZeQ2rlKW8OHqvr8Tup0y5lUz+05fHuNSjbhu1nDVROUhlemi2 X-Received: by 2002:a05:6402:158b:b0:43a:6cae:a029 with SMTP id c11-20020a056402158b00b0043a6caea029mr3999792edv.201.1656944082492; Mon, 04 Jul 2022 07:14:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656944082; cv=none; d=google.com; s=arc-20160816; b=SrXTKz2gbMoEyYGL1Tx2hP4/wnysWTeIkHDzLe8EpEWGcH0sDx+wq911aXckRcLWNO fNXHqIv5gT+UE1KM93x/lZcU8X+2uc4RgoiDDKO7FHHCN2h0qYhHpMj/L0IhOgM4j2X5 rLNMt4XOPaMcS30iRLJy3dpoAG61KedmQZ3gOAxSBfikeIHVMLQ19o6QMf+q17betG4W vIwJWoU7NhsoBFedpB1ejkyfMvEsGQMRfYzLLL2atduL3v2n/7kJUebBqQYy/YVSj8No eWvkV7oXNhpUveAl+CkMaKgfb/XsBWqgRq8AAXyWUijILzhLQDIDwdsa8ElnRQaTChCz 0WpA== 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:references:in-reply-to :message-id:date:to:from:dkim-signature:dkim-filter:delivered-to; bh=pG3oEWrvqDVG8YPZFclzXqrOAA3OG4rxuMDwQndPrFg=; b=lOU737bk232rhyr3Bp10AzRCc0fwTCR+Qsvlsr9bBMlQFMJxm7FwAS+0my5u5npRR4 0zazxfTuiTJBdoyQNiDU3hATABS27bFw1Fv2ZYW/lDz9kjOIE7mSS5qBB6hCQmPQmlMU QmlBgUI/yFc4Fdh2AkPC/QEq/uWDz0Mh9ukBB4fYzegXe6ql+IVYit11TXixrx1s0oLV D0IiPt929GKrTEgJm03Wf0PkchJNNcb2M6lwd8/gpFHvwQNInaCLpjgbyOCjUJWzn4uU NDwbGRA1CAuUsVjW+2l8tCAp6DV832RJxUB+bRcacrdLnpIZ74e4SezR+8vCSzosqSCC fDSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=E9CzSVrt; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id mf21-20020a1709071a5500b0072ab8afaac1si5114843ejc.508.2022.07.04.07.14.42; Mon, 04 Jul 2022 07:14:42 -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=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=E9CzSVrt; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EFD4868B8C6; Mon, 4 Jul 2022 17:14:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E2CC268B8B4 for ; Mon, 4 Jul 2022 17:14:31 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 0BAF49C033B for ; Mon, 4 Jul 2022 10:14:31 -0400 (EDT) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 4IGSWmuQEnRe; Mon, 4 Jul 2022 10:14:30 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 879C39C034D; Mon, 4 Jul 2022 10:14:30 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 879C39C034D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1656944070; bh=ujiLSV5QIs8OZrOkEJFmZhXiwgeD2TaCTo7pjbQDhOk=; h=From:To:Date:Message-Id:MIME-Version; b=E9CzSVrtaa2nFGqlMXhEPdj8cAebVoxOEiURnnbAdT9FvSpxdRT8f2Lw3TV0iNqpP P9Emmabm3WfqTPgaKooTOwPNSJXzza26IfYjQs8Q5/R+AN0+9W8tbcZBCm5oNy88+M sT+2iezLCkoS8HXnUlexbtYEfvPFrRo5pab3XTALeyMWZ9pYaBaOeB/wO0yEvvLHcz FCjnysuzpuDvs4HiocRpc46I10Dam/icZV9An1vImv/O3ymWnAoazarEDvba/hYOyh 5QF15QzMF8C0N60y6gjcHfQa/2ofshDCaCzO6wnKj3SdYN8HzWl2LGdVR59DhIkka0 ObKF4/QVX06ew== X-Virus-Scanned: amavisd-new at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 2TTyAeB5_Kyk; Mon, 4 Jul 2022 10:14:30 -0400 (EDT) Received: from T14-AMD.biamp.com (lfbn-ren-1-676-174.w81-53.abo.wanadoo.fr [81.53.245.174]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id 0399A9C033B; Mon, 4 Jul 2022 10:14:29 -0400 (EDT) From: Philip-Dylan Gleonec To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Jul 2022 16:13:39 +0200 Message-Id: <20220704141340.493931-2-philip-dylan.gleonec@savoirfairelinux.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220704141340.493931-1-philip-dylan.gleonec@savoirfairelinux.com> References: <20220617162150.GW396728@pb2> <20220704141340.493931-1-philip-dylan.gleonec@savoirfairelinux.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/2] avcodec/libopusenc: reload packet loss at encode 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: Philip-Dylan Gleonec Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pDQbvrwsARlA An estimation of packet loss is required by libopus to compute its FEC data. Currently, this estimation is constant, and can not be changed after configuration. This means an application using libopus through ffmpeg can not adapt the packet loss estimation when the network quality degrades. This patch makes the encoder reload the packet_loss AVOption before encoding samples, if fec is enabled and the packet loss estimation set is different than the current one. This way an application can modify the packet loss estimation by changing the AVOption. Typical use-case is a RTP stream, where packet loss can be estimated from RTCP packets. Signed-off-by: Philip-Dylan Gleonec --- libavcodec/libopusenc.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c index c884075ffe..26d2082ffa 100644 --- a/libavcodec/libopusenc.c +++ b/libavcodec/libopusenc.c @@ -462,6 +462,23 @@ static int libopus_encode(AVCodecContext *avctx, AVPacket *avpkt, uint8_t *audio; int ret; int discard_padding; + int32_t opus_packet_loss = 0; + + ret = opus_multistream_encoder_ctl(opus->enc, + OPUS_GET_PACKET_LOSS_PERC(&opus_packet_loss)); + if (ret != OPUS_OK) + av_log(avctx, AV_LOG_WARNING, + "Unable to get expected packet loss percentage: %s\n", + opus_strerror(ret)); + + if (opus->opts.fec && (opus_packet_loss != opus->opts.packet_loss)) { + ret = opus_multistream_encoder_ctl(opus->enc, + OPUS_SET_PACKET_LOSS_PERC(opus->opts.packet_loss)); + if (ret != OPUS_OK) + av_log(avctx, AV_LOG_WARNING, + "Unable to set expected packet loss percentage: %s\n", + opus_strerror(ret)); + } if (frame) { ret = ff_af_queue_add(&opus->afq, frame);