From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id 1F3344BCEF
	for <ffmpegdev@gitmailbox.com>; Wed, 22 Jan 2025 02:55:11 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8A68768B87F;
	Wed, 22 Jan 2025 04:54:31 +0200 (EET)
Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com
 [209.85.214.178])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CCDFB68B7E7
 for <ffmpeg-devel@ffmpeg.org>; Wed, 22 Jan 2025 04:54:24 +0200 (EET)
Received: by mail-pl1-f178.google.com with SMTP id
 d9443c01a7336-21669fd5c7cso114308725ad.3
 for <ffmpeg-devel@ffmpeg.org>; Tue, 21 Jan 2025 18:54:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1737514462; x=1738119262; darn=ffmpeg.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:to:from:from:to:cc:subject:date:message-id
 :reply-to; bh=HqDsoCfqztGJ5OrbInkCBNCWTV4gLd19ckpaFDDLgeQ=;
 b=K2SbUHd5pc7DeW018Bx/MyF04UsIW8MBkB4yAk9NrBPmoPZ7BDVC9bJEzL+yKJtDJU
 XIGkLYF7NqUgW6LzF9xsit/ypub7KPhzaBDiAXVzAcDvmV888woUbrQidmo2RbxPqOn/
 H6QTQDr7BBorwjz61+GdMRvIeQrCkVxuyeWbHoYko7Yq598X7hWKvj4lWvJnwrQrpNqo
 gjV7wXr93kIs7+zrbvhYwkqImW6K/Vbu65DngYdWOEc56FxtyzHr5433oJVjj12oS6Mt
 xu2rhyQGq7SAAgQp3DbQy94vVfp9wEOd3wXinaNU1eFqaD2O1bZYTwWaaItB0050BaJ3
 8OiA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1737514462; x=1738119262;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=HqDsoCfqztGJ5OrbInkCBNCWTV4gLd19ckpaFDDLgeQ=;
 b=rYSVMc00Y6jipTSgTNqTwtayDzX8Nuy/O/j67hCTjaOdQ8XZAEwTAZx43SfqBByunh
 OwhmWYNlkZvPN+M4tMvhnc1EXFtivlLMv/EvVwPIqAh08m91Y2tQP6vdN/8evj8het4p
 NbqMhPahPleHXzHatjfZZnjvKEYQC75WC00SXBcK6C/M8takTwm90CHDJfRXbNN763Mu
 65pMK8UuOO1/iYia0dZ3irhKCKh/EuCMoEolDQYF2VI3d1x90iq7NFWkVW1r5arQo1Pa
 v5IDBajd0LSJO5xGwBttPaMlKJkqnrmVFfDnxYxC06OARChzEUj70Py3G9/L8Gxmzhgq
 +Eww==
X-Gm-Message-State: AOJu0Yw148+pAUtWFEyxWxiQQtuBr+cmYVgiKx/k8QrAtVCa3EbE5ur6
 ObrQatRxFXwc07T3lyg/eEov703Dx0eNTznQeszaYk0ITwAYDlqLiJUrBw==
X-Gm-Gg: ASbGncvPm1Ku3by7Y5Pf/H24xMbfm3VbSS7o+/Tj/JT0WjkExjLb1fAVuzELOmEuVCw
 zXGnoDkLIaDTrcFDDZ95SJtXjK05bqjFClquVUxd7Knt0ZrZTopelRQYaN9I0DfWJxX+HUHugFp
 KYxWZQLVc8EzyYxgDKMR6+VX2BmZ+wHVHwhKTZpIWkTw9OkUqcdAASnr4rI4D1ST8C7rC6JwgWU
 NpHSDI6jFVBilzV805GcAHju1rgQnZYRZCbwB7o8FpuvcVyCCK2krM1n57gpL4e7oUjvgs9pctF
 IdEFE5Y1cQ==
X-Google-Smtp-Source: AGHT+IHdYrP+qdnczBcbrN7JeOtOHgdNkY3VKRWpbuOr1uFBUXmVU8YSmDwb0UD5Z5sk9+NWDYnrng==
X-Received: by 2002:a17:902:f544:b0:21a:5501:9d5 with SMTP id
 d9443c01a7336-21c355db07fmr341741125ad.44.1737514462318; 
 Tue, 21 Jan 2025 18:54:22 -0800 (PST)
Received: from localhost.localdomain ([2800:2121:b040:c:5b7:a27f:554b:498a])
 by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-21c2d3efb4csm84817225ad.201.2025.01.21.18.54.21
 for <ffmpeg-devel@ffmpeg.org>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 21 Jan 2025 18:54:21 -0800 (PST)
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Tue, 21 Jan 2025 23:54:01 -0300
Message-ID: <20250122025403.14457-5-jamrial@gmail.com>
X-Mailer: git-send-email 2.48.1
In-Reply-To: <20250122025403.14457-1-jamrial@gmail.com>
References: <20250122025403.14457-1-jamrial@gmail.com>
MIME-Version: 1.0
Subject: [FFmpeg-devel] [PATCH 5/7] avcodec/encode: add a new param change
 side data value that takes a dictionary
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250122025403.14457-5-jamrial@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Allow the caller to pass a dictionary with key/value pairs to set encoder
private options for reinitialization.
AVCodecContext global options are not affected. For that, specific
AVSideDataParamChangeFlags should be used, as is currently the case for
dimensions and sample rate.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/encode.c | 21 +++++++++++++++++++++
 libavutil/defs.h    |  1 +
 2 files changed, 22 insertions(+)

diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index 187b4015f1..c14ab65509 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -20,12 +20,14 @@
 
 #include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/emms.h"
 #include "libavutil/frame.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/internal.h"
 #include "libavutil/mem.h"
+#include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/samplefmt.h"
 
@@ -101,6 +103,25 @@ static int apply_param_change(AVCodecContext *avctx, const AVFrame *frame)
         avctx->width  = frame->width;
         avctx->height = frame->height;
     }
+    if (flags & AV_SIDE_DATA_PARAM_CHANGE_DICT) {
+        AVDictionary *dict = NULL;
+        int left = av_strnlen(gbc.buffer, bytestream2_get_bytes_left(&gbc));
+        if (!left)
+            goto fail;
+        ret = av_dict_parse_string(&dict, gbc.buffer, "=", ":", 0);
+        if (ret < 0) {
+            av_log(avctx, AV_LOG_ERROR, "Invalid string");
+            goto fail2;
+        }
+        bytestream2_skip(&gbc, left + 1);
+
+        if (avctx->codec->priv_class) {
+            ret = av_opt_set_dict(avctx->priv_data, &dict);
+            if (ret < 0)
+                goto fail2;
+        }
+        av_dict_free(&dict);
+    }
 
     if (flags) {
         ret = 0;
diff --git a/libavutil/defs.h b/libavutil/defs.h
index f09fb5efd2..e1de680f2f 100644
--- a/libavutil/defs.h
+++ b/libavutil/defs.h
@@ -125,6 +125,7 @@ enum AVMediaType {
 enum AVSideDataParamChangeFlags {
     AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
     AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
+    AV_SIDE_DATA_PARAM_CHANGE_DICT           = 0x0016,
 };
 
 /**
-- 
2.48.1

_______________________________________________
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".