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 ESMTP id E9DC74B1DA for ; Thu, 30 May 2024 19:44:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E51FF68D4ED; Thu, 30 May 2024 22:43:57 +0300 (EEST) Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 721F568D463 for ; Thu, 30 May 2024 22:43:50 +0300 (EEST) Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-35dc984b3d2so811347f8f.1 for ; Thu, 30 May 2024 12:43:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717098230; x=1717703030; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=f3Tzej92HGcSZDK4MpZ8SuzXRAZTE1rwsfuVQhDzbUw=; b=U+ObnCex97BUsjlfwr+cStsvXPqbjCPsJAta4Ccsv96pvL2PvWJ645eMFdXMGQZ2Xk SQ/rsiiiFdkUtHUzAgUotfabz2pB7v2IRNmY7tXUMUAUhd0KN54CvlPhOU3wTEnPFHqu S4Z7bzes5yeogRI+Tgtj+NjCNNTBlhtPaMH8r9L5ZboLVNJ634eh2u3nni/XUahgUjgh TnLwhPymRF42vYq8Ldc5QLm+BFbroW5Qg6ez/10/ahwY7YqfKp3ehl8H5YDm/LmVD1+W lEGQLKOCogqOC2rmrj8koafykN/dFpNnuN8lHqgtwKfER+NNz4AUSnktnLVlEvrzTT2r q1wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717098230; x=1717703030; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f3Tzej92HGcSZDK4MpZ8SuzXRAZTE1rwsfuVQhDzbUw=; b=kC5XMr6Fjx61xb4Uk4pY+82Z8oGcCU16b4Pq3ei2MBij1j2wxLw9hqA0FLAqbDvRaT Nm9YJmZ44wKSns7BBtiGcUh+PAvdg+mTxfgdlluChGLzyNJZJkwTwhEy9HTOyDgFohCz TfcM3mo5td8skOd0n0n6TiT55+STcNpRNJ/aiwl4Q9YXXudr43l0vgdpJdxDca1ajn9W mdI/AX7Jo8GiqlTVTbVNAaV8Y3WiFKSBzGMCKnp75OVZAeG/tSLX/UPY6nj8q1POvVCp 9wM+C9GJXxS3kWzrHHHQmDyhsLHzynHieqlBnimPqQpO6n8REr0vqPDVBsl4uRZYz0s5 2LXg== X-Gm-Message-State: AOJu0YwkCx+9/RVQxzgRT9BBvGRmMr8P2Qsoms+fYKPAr13o1fQNjR9y K2OQ30sJtfMp/ekqHqPmfM3v/lK+xeMqSUlXhud3p14qzcO+/wA+/ipmQg== X-Google-Smtp-Source: AGHT+IETcj0K2qezxm29/z9QQMluA65v5+w/SGaXv2cMNykVr+MmlvR5e1kp0w93LHk3rgqFOHUdVQ== X-Received: by 2002:a05:6000:4c6:b0:355:161:b7ec with SMTP id ffacd0b85a97d-35dc0087e81mr2911667f8f.14.1717098229594; Thu, 30 May 2024 12:43:49 -0700 (PDT) Received: from fractale.lan ([2001:861:5102:3290:f88d:fc8b:a14:3fcb]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-35dd04c0de3sm225126f8f.9.2024.05.30.12.43.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 May 2024 12:43:49 -0700 (PDT) From: averne To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 May 2024 21:43:03 +0200 Message-ID: X-Mailer: git-send-email 2.45.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/16] avutil/buffer: add helper to allocate aligned memory 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: averne 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: This is useful eg. for memory-mapped buffers that need page-aligned memory, when dealing with hardware devices Signed-off-by: averne --- libavutil/buffer.c | 31 +++++++++++++++++++++++++++++++ libavutil/buffer.h | 7 +++++++ 2 files changed, 38 insertions(+) diff --git a/libavutil/buffer.c b/libavutil/buffer.c index e4562a79b1..b8e357f540 100644 --- a/libavutil/buffer.c +++ b/libavutil/buffer.c @@ -16,9 +16,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "config.h" + #include #include #include +#if HAVE_MALLOC_H +#include +#endif #include "avassert.h" #include "buffer_internal.h" @@ -100,6 +105,32 @@ AVBufferRef *av_buffer_allocz(size_t size) return ret; } +AVBufferRef *av_buffer_aligned_alloc(size_t size, size_t align) +{ + AVBufferRef *ret = NULL; + uint8_t *data = NULL; + +#if HAVE_POSIX_MEMALIGN + if (posix_memalign((void **)&data, align, size)) + return NULL; +#elif HAVE_ALIGNED_MALLOC + data = aligned_alloc(align, size); +#elif HAVE_MEMALIGN + data = memalign(align, size); +#else + return NULL; +#endif + + if (!data) + return NULL; + + ret = av_buffer_create(data, size, av_buffer_default_free, NULL, 0); + if (!ret) + av_freep(&data); + + return ret; +} + AVBufferRef *av_buffer_ref(const AVBufferRef *buf) { AVBufferRef *ret = av_mallocz(sizeof(*ret)); diff --git a/libavutil/buffer.h b/libavutil/buffer.h index e1ef5b7f07..8422ec3453 100644 --- a/libavutil/buffer.h +++ b/libavutil/buffer.h @@ -107,6 +107,13 @@ AVBufferRef *av_buffer_alloc(size_t size); */ AVBufferRef *av_buffer_allocz(size_t size); +/** + * Allocate an AVBuffer of the given size and alignment. + * + * @return an AVBufferRef of given size or NULL when out of memory + */ +AVBufferRef *av_buffer_aligned_alloc(size_t size, size_t align); + /** * Always treat the buffer as read-only, even when it has only one * reference. -- 2.45.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".