From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 1F3344BCEF for ; 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 ; Wed, 22 Jan 2025 04:54:24 +0200 (EET) Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-21669fd5c7cso114308725ad.3 for ; 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 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jan 2025 18:54:21 -0800 (PST) From: James Almer 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches 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: 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 --- 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".