From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 231FD4B208 for ; Sat, 19 Jul 2025 16:27:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 35B9568C44C; Sat, 19 Jul 2025 19:27:05 +0300 (EEST) Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id C97B168B80B for ; Sat, 19 Jul 2025 19:26:57 +0300 (EEST) Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4560add6cd2so24571105e9.0 for ; Sat, 19 Jul 2025 09:26:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752942417; x=1753547217; 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=H6MeQQiIdhy2Lx1eaqSTvQodyzd4YAhCY51crT18vHo=; b=QbpacY3VlWYwmxA7d7OD5WPQNWfz1QLppp0oZhtvC2ButQ+MMU1fktvIiUA9mB8uGz 1348fDi5c0w+J/UfXteLVRAWI/62r66sl+1eBaBdvjsA2bHBP2gxMPbXdYXbw2/muTay 0nZmiLhnUUeGP0qaqmdrCdQt+Fr2ZyPAxLBSdp8HKOsfqIohqJ7fHO8xzs82ncrvpgmO DEj2j8O2IvjYEerdJyLRMseaU++XZo11GkXFS1XbsiLcJvbGeNDNJDgUSUQHsaUJj7nM tXKv2inFrPAmXWpQy3kcFTS1HDE5EUryjayayq3wnaPB1RQ+kg1xa+4Qf+GoaEgfpQHR KOMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752942417; x=1753547217; 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=H6MeQQiIdhy2Lx1eaqSTvQodyzd4YAhCY51crT18vHo=; b=ACW46O8uU30447qvgaiAXu42jnI/+qLVgbQHPeoPiSyRV6dt+fjfPIMk9D8mQIrFRn iMBx3FXtOBbh2a/vLJeKDpNC2717eBzgEyowo9Ar3/qM+S8HzVyH+3doYQKjinjSso2N APXAo05H5uJayfGPUlmIJ9ZdslWHCcYE4hw0wdLkNSuBZ7AKDOFzwiwDtCG3pqIT9zaC 4r/3t4DWo1Ddrd7gTmEyh6QLv1zZRvLzU96enTRGdVze4/T/PxhX4sUzRHqd2KDunGLa MBp6ffYZTkTP+05lrMwB7Zw8eKME5Mq7nU6PiB47CIfylKBbTkDF9uuRMqu8AO/VoA5P Iprw== X-Gm-Message-State: AOJu0Yy2Ui476ffQXuOK2O1SOzJM+KuLSR1ZFJfXjSWa25a3kIK1OEba ZfD31WaJDTMvg8WQR3dO9/2eA/ZYIaw7TwHePQNUq0X/bCp2/5sjQ0bXByBdeg== X-Gm-Gg: ASbGnctWiLsX/LpM+7l9jgJQOYgY5FG6TuH6lkvLBTojk+g9rUqdZ2WIw8iawdxHxdB pgEwHOAbmV6mFLDXrJgEsZywN+FZRKk+PXoKA2W//vcZlWOFFGKrjwXccsDEQrkXne7AnvMxn/e K+A2QRkv92wbBVSVbd6R1ImUkAtf+NcY62/mTrFRkhKUoSBRA8foxepkHM8e4UBARzGCxwIchRL RPPtjpv92ECTBbVW5hND+8qUBbx4N0uF3jCCmJ24mfRI62Tzkez9StBLqbVkC66G1LHE0+D3f2f IOmjmDNWddqzkAXZFHowpY+EwKtL6aXtfz+oN8mqxlyTBE6Xzrme5MC2spcgRhePQutzQJcY9md en8L1aTQlfDc4GFRC3fOAPrRFqq/GGnQB X-Google-Smtp-Source: AGHT+IEYK+GB8Tpc+Y8O5Ph1oYkZ4PVwEjyIy/ERYdAokYg1d/UFoO7n8xZUDt6dUHyzRvHoVMBGng== X-Received: by 2002:a05:600c:c113:b0:456:15be:d113 with SMTP id 5b1f17b1804b1-4563a4fdc81mr61391445e9.1.1752942416738; Sat, 19 Jul 2025 09:26:56 -0700 (PDT) Received: from batiste ([139.47.8.127]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4563f7c88a0sm40632595e9.2.2025.07.19.09.26.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 09:26:56 -0700 (PDT) Received: from bernat by batiste with local (Exim 4.96) (envelope-from ) id 1udAOk-005BDZ-32; Sat, 19 Jul 2025 18:26:54 +0200 From: bernat.arlandis@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Jul 2025 18:26:53 +0200 Message-Id: <20250719162653.1234750-1-bernat.arlandis@gmail.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libtheoraenc: Add encoding speed level option 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: Bernat Arlandis Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Bernat Arlandis --- libavcodec/libtheoraenc.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index eb94458639..de2b913634 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -37,6 +37,7 @@ #include "libavutil/pixdesc.h" #include "libavutil/log.h" #include "libavutil/base64.h" +#include "libavutil/opt.h" #include "avcodec.h" #include "codec_internal.h" #include "encode.h" @@ -45,6 +46,7 @@ #include typedef struct TheoraContext { + AVClass *av_class; /**< class for AVOptions */ th_enc_ctx *t_state; uint8_t *stats; int stats_size; @@ -52,8 +54,21 @@ typedef struct TheoraContext { int uv_hshift; int uv_vshift; int keyframe_mask; + int speed_level; } TheoraContext; +static const AVOption options[] = { + { "speed_level", "Sets the encoding speed level", offsetof(TheoraContext, speed_level), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, + { NULL } +}; + +static const AVClass theora_class = { + .class_name = "libtheora", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + /** Concatenate an ogg_packet into the extradata. */ static int concatenate_packet(unsigned int* offset, AVCodecContext* avc_context, @@ -244,6 +259,17 @@ static av_cold int encode_init(AVCodecContext* avc_context) return AVERROR_EXTERNAL; } + // Set encoding speed level + if (h->speed_level != -1) { + int max_speed_level; + int speed_level = h->speed_level; + th_encode_ctl(h->t_state, TH_ENCCTL_GET_SPLEVEL_MAX, &max_speed_level, sizeof(max_speed_level)); + if (speed_level > max_speed_level) { + speed_level = max_speed_level; + } + th_encode_ctl(h->t_state, TH_ENCCTL_SET_SPLEVEL, &speed_level, sizeof(speed_level)); + } + // need to enable 2 pass (via TH_ENCCTL_2PASS_) before encoding headers if (avc_context->flags & AV_CODEC_FLAG_PASS1) { if ((ret = get_stats(avc_context, 0)) < 0) @@ -389,6 +415,7 @@ const FFCodec ff_libtheora_encoder = { .close = encode_close, FF_CODEC_ENCODE_CB(encode_frame), CODEC_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P), + .p.priv_class = &theora_class, .color_ranges = AVCOL_RANGE_MPEG, .p.wrapper_name = "libtheora", }; base-commit: bedfb6eca402037f5cbb115fa767d106b8c14f1c -- 2.39.5 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".