From patchwork Thu Apr 18 15:06:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Sayers X-Patchwork-Id: 48156 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c906:b0:1a9:af23:56c1 with SMTP id gx6csp39589pzb; Thu, 18 Apr 2024 08:06:45 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXInsV2KE+98v7OpYLZkYkOmwRVAfotH442NVJS3xmwfwITg3pLh0TWjpzbyg0nC5M1Kzcgn5S2VuL2xDg3qGiu/3LVpui2vO0ZsA== X-Google-Smtp-Source: AGHT+IHzdL+JVjxpFBYs+k/xQQUzbkhFm7xYozrIRUeJIjUA0uD5ih1mP4OTNqFmHT06D3uPkqPq X-Received: by 2002:a05:6512:1ce:b0:513:cfb8:8cb3 with SMTP id f14-20020a05651201ce00b00513cfb88cb3mr1729151lfp.1.1713452804993; Thu, 18 Apr 2024 08:06:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713452804; cv=none; d=google.com; s=arc-20160816; b=Gm5qSA5JKInB+y9dT4VNHPCmYc1WRUnAq5zfqwbzXG9rdHJvaIN7CLTSF0v39pafJh ORtn/m8NU8j/nGbo+/BDArA7iaeNP5NxGIodQVZED4rtu3uXNNSt/UTRe8SW1PcqgVAQ ZCLKXlT7Z6Im7xsGmkDOPujeCxel3pIywomhePtkkxhEjuBozzI/ldw4RZgzx9VzY4Uw Q7Z/gBeLSQORKK7DJ+h7cErpqEr4MKMgnQ3xe9uF9LnoscGA4ggr4/DGBlyVJpmKYot9 HJ0nzj9EKUPNyKmko24gP7YvZ1gSfAGcGasJfn9RBG5MGJvgdd6WifWYNGOMNsZN2NJd HTMw== 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:message-id:date:to:from :delivered-to; bh=Om5SUkMyJ2npNxn/H3hgK1jEmTfX0ltB9TZYo4tJMDM=; fh=73ExZnkQ8FYbu/qeQNmI0dtHCfShNh8/NmZJs1umltM=; b=Qg8BCZ/+owzwwj+19akXuT9069kh9eTywkpDY4kSbgDjlQhmqZtOlJSAdFFTnHZ/vV ByCuA7TKOKK0HGlfO2t1rMN2Dyaeapw4YmXSvWPb/yP7CLgAn9ligPqhWnHnr6IYeDJe psotXU8UCMO4necJMY48Y+4vYc+Nfg7TsOoHdHRQmSb9zN+Xz1T9ZBdefrLqnrHIgcrl /uruW6qNPx0aPyT76lq/bLy8807oGEwminak+1wEZcap1i2gu7yl7MYYODlatKxtKF4F 59yjDE3TPPzcXYuoOtFe0adYL5Vg8WWKiZdZRQVBIVGvo8TaXoYNfVkaECQHEz6AvBN+ triw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 l10-20020a1709065a8a00b00a52263580a7si938104ejq.377.2024.04.18.08.06.44; Thu, 18 Apr 2024 08:06:44 -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; 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 557A668CEEE; Thu, 18 Apr 2024 18:06:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from b-painless.mh.aa.net.uk (b-painless.mh.aa.net.uk [81.187.30.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 63E3768CA4D for ; Thu, 18 Apr 2024 18:06:31 +0300 (EEST) Received: from 0.b.4.b.7.4.0.8.c.4.a.5.d.8.b.2.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:2b8d:5a4c:8047:b4b0] helo=andrews-2024-laptop.lan) by painless-b.tch.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1rxTLJ-000wcu-35; Thu, 18 Apr 2024 16:06:30 +0100 From: Andrew Sayers To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Apr 2024 16:06:12 +0100 Message-ID: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] doc: Explain what "context" means 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: Andrew Sayers Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: O6ARzi9T2uCC Based largely on the explanation by Stefano Sabatini: https://ffmpeg.org/pipermail/ffmpeg-devel/2024-April/325854.html --- doc/jargon.md | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 doc/jargon.md diff --git a/doc/jargon.md b/doc/jargon.md new file mode 100644 index 0000000000..3b78ffb61f --- /dev/null +++ b/doc/jargon.md @@ -0,0 +1,96 @@ +# Jargon + +Terms used throughout the code that developers may need to know. + +@anchor context + +## Context + +A design pattern that stores the context (e.g. configuration) for a series +of operations in a "context" structure, and moves other information elsewhere. + +Consider a trivial program to print uppercase text: + +```c +/* + * Contextual information about where to print a series of messages + */ +struct UpperCasePrinterContext { + FILE* out; +}; + +/* + * Extra information about messages to print. + * This could be used multiple times in a single context, + * or reused several times across multiple contexts. + */ +struct PrintInfo { + char* str; +}; + +void print( + struct UpperCasePrinterContext * ctx, + struct PrintInfo * info +) { + for ( char* c = info->str; *c; ++c ) { + char C = toupper(*c); + fwrite( &C, 1, 1, ctx->out ); + } +} + +int main() +{ + struct PrintInfo hello, world; + struct UpperCasePrinterContext ctx; + + hello.str = "hello, "; + world.str = "world!\n"; + + ctx.out = stdout; + + print( &ctx, &hello ); + print( &ctx, &world ); + + return 0; +} +``` + +The `UpperCasePrinterContext` object contains the information that's about +the context of the current job (i.e. printing things to standard output). +Information with a lifetime different than that of the context is moved +to the `PrintInfo` object. + +FFmpeg's main context structures all happen to face some common problems: + +- querying, setting and getting options +- handling "private" internal context, including options for + a particular instance of the generic context +- configuring log message verbosity and content + +FFmpeg gradually converged on the AVClass struct to store this information, +then converged on the @ref avoptions "AVOptions" system to manipulate it, +so modern code often uses the terms "context", "AVClass context structure" +and "AVOptions-enabled struct" interchangeably. But it is occasionally +necessary to distinguish between them - for example, AVMediaCodecContext +is a context that does not use AVClass. + +To understand how this all works, consider some requirements for the +`libx264` encoder: + +- it has to support common encoder options like "bitrate" +- it has to support encoder-specific options like "profile" +- it has to provide useful feedback about unsupported options + +Common encoder options like "bitrate" are stored in the AVCodecContext class, +while encoder-specific options like "profile" are stored in an X264Context +instance in AVCodecContext::priv_data. These options are then exposed to +users through a tree of AVOption objects, which include user-visible help +text and machine-readable information about the memory location to read/write +each option. Common @ref avoptions "AVOptions" functionality lets you get +and set those values, and provides readable feedback about errors. Although +X264Context can be set by users, it is not part of the public interface, +so new releases can modify it without affecting the API version. + +FFmpeg itself uses context structures to handle FFmpeg-specific problems, +but the design pattern, as well as the AVClass and @ref avoptions "AVOptions" +implementations, are general solutions you can use for any purpose. From patchwork Thu Apr 18 15:06:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Sayers X-Patchwork-Id: 48158 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c906:b0:1a9:af23:56c1 with SMTP id gx6csp39977pzb; Thu, 18 Apr 2024 08:07:12 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVM4ZszylYO2o7AlxAKYx9npu3vJip4UVe46Zng3/iOGoEDTQ6AWzC9FrRKfpks7qnocPwGlJPgxQYV716UytmKDwnBhfXr3kKPJA== X-Google-Smtp-Source: AGHT+IGLJLlPR3FIFfejpchjgi85WAqttS3xUHe5BKDHuv17QHKU/Mu4SZCerGtewH1WuS5a1yH5 X-Received: by 2002:a05:6512:2399:b0:519:6c2d:9bcb with SMTP id c25-20020a056512239900b005196c2d9bcbmr2753688lfv.31.1713452831729; Thu, 18 Apr 2024 08:07:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713452831; cv=none; d=google.com; s=arc-20160816; b=zIX4KRq83B6QsIOpfLGRfu7EvWnPyA5iGxzPdUUjTc6xipacwCppswPmUaqHZGrwN/ SSulGvKRZXmTmXJSWY9j+utcAdgn5PWiyZiIj4f65Cg2am8wFmDU9Up9+T63KuCu/FM2 1AYBo8dhqOAvXuPmfqm37ZGItk/J6uUaHxzgwzX+7cuNtjl32Jua1OBzGwJXvT+Jo1ZO LJ0yo1oAdLpsKszQnHNnU/Vbmp7B+GNi0JQegRkpDvRB4LaEfMlosMp5F9GcsOjv88uU 9wnDgXDHj0O61AmA4tdf6ZlQBGwu1zi/qh2KyAnBCj9CvXPeuV6Rwj8D5XIuo1weBkh7 FW8w== 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:delivered-to; bh=mVBqIVbgAEy6v8llddqWMLXE2LLeNC+eGeXqwrq0PZ0=; fh=73ExZnkQ8FYbu/qeQNmI0dtHCfShNh8/NmZJs1umltM=; b=R0seV1y8heMaQcGgC9jaxKhVDP5+o3qRImXrNf0xYIrQhpo697pOO+YCqtjzUuUwp+ iIl2jvoOk3t89QVtkZ61/1WRdyXuE0bwDOlvThfbscPBR61ACjLwZqoIAAZVomReh0we w5dgRRByb7UECHGW5n9TlODHZYUnHpXJ3IVgEkToYzyWxy/8RbLdfVkIDasLM4eVGMw/ 6xWD6GYN7aio1I/eNWAhuVrOchMPdZ1kSPnuPeMw4OJMAdg9dwu1y1ajaUwMSbwjs1Q5 963neki3VfiuMM+VMI8YJ2kX6tCGEU1EXTkXAFw0O8aQZvVzoqV8Vge3/Q3hQNkjWUc6 ryfw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 t12-20020a1709063e4c00b00a524e64fb99si882876eji.579.2024.04.18.08.06.57; Thu, 18 Apr 2024 08:07:11 -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; 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 CA09A68CF40; Thu, 18 Apr 2024 18:06:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from b-painless.mh.aa.net.uk (b-painless.mh.aa.net.uk [81.187.30.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 66F4C68CD13 for ; Thu, 18 Apr 2024 18:06:31 +0300 (EEST) Received: from 0.b.4.b.7.4.0.8.c.4.a.5.d.8.b.2.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:2b8d:5a4c:8047:b4b0] helo=andrews-2024-laptop.lan) by painless-b.tch.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1rxTLK-000wcu-0p; Thu, 18 Apr 2024 16:06:30 +0100 From: Andrew Sayers To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Apr 2024 16:06:13 +0100 Message-ID: <20240418150614.3952107-2-ffmpeg-devel@pileofstuff.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> References: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] lavu: Clarify relationship between AVClass, AVOption and context 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: Andrew Sayers Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: K7F1SXzKB18Q --- libavutil/log.h | 11 ++++++++--- libavutil/opt.h | 7 ++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libavutil/log.h b/libavutil/log.h index ab7ceabe22..b5c739dab1 100644 --- a/libavutil/log.h +++ b/libavutil/log.h @@ -59,9 +59,14 @@ typedef enum { struct AVOptionRanges; /** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). + * Metadata about an arbitrary data structure + * + * A @ref context "context struct" whose first member is a pointer + * to an AVClass object is called an "AVClass context structure" + * (e.g. AVCodecContext, AVFormatContext etc.). + * + * AVClass is often combined with @ref avoptions "AVOptions" to create + * "AVOptions-enabled structs" that can be easily configured by users. */ typedef struct AVClass { /** diff --git a/libavutil/opt.h b/libavutil/opt.h index e6013662f6..b817d15554 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -39,9 +39,10 @@ * @defgroup avoptions AVOptions * @ingroup lavu_data * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. + * Builds on AVClass, adding a generic system to declare options. + * + * An option can have a help text, a type and a range of possible values. + * Options may then be enumerated, read and written to. * * There are two modes of access to members of AVOption and its child structs. * One is called 'native access', and refers to access from the code that From patchwork Thu Apr 18 15:06:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Sayers X-Patchwork-Id: 48157 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c906:b0:1a9:af23:56c1 with SMTP id gx6csp39969pzb; Thu, 18 Apr 2024 08:07:11 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXn2LfM2M7IpBDrV5yt+dhP1T5MMm47vwNfipCu7/HjJxF2JhTh0rLnopa9IvEmtIP/WLZVowi3Jlqm09NJZb4ZPQtxOOO3HMJ3jA== X-Google-Smtp-Source: AGHT+IHjK+k7nEAAm3xBZKrv6omfq8LLfbtjX2ZH+xBMWeqgsxZQTsiEvh+ez4ksvVsL81Ho0jrX X-Received: by 2002:a50:9f43:0:b0:56f:ec04:b4f9 with SMTP id b61-20020a509f43000000b0056fec04b4f9mr1911286edf.1.1713452830996; Thu, 18 Apr 2024 08:07:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713452830; cv=none; d=google.com; s=arc-20160816; b=dbltLU48pyJzDuj1EVHsSIHtBJXLGv0Chgn/j5evRUFYFIub4g8xsK7HP084DYN77z yV7n7Fbs2SWO4//CBbms3yLairCOVdzdN8UgwSJNO2kiOCG0jzCUQ6ptFdVPGbojMjQ6 tDiMeQFKmmnVXMNQzopdqG2928pol7tsfEPNz74A+lfiajL1nTOVjFLRfBacB9aP7KCm Ld4ae8xJI7NBst95tzhLjX7Q3zKZHOoH/WxNbG9P2qg4CfTwdHzB7oQqd+KnRIz44PfL sbgL6F46TFY71IMtROnk+GXs6f9rzwC5u6Qm2sbkKgs3w4GFXVv+oykqtnr+S89cgpuP JpDw== 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:delivered-to; bh=4ueq0dOfxwkbsl3WqHBW6XXyL+0u5Qzl31LwZ+zaqtw=; fh=73ExZnkQ8FYbu/qeQNmI0dtHCfShNh8/NmZJs1umltM=; b=IeH4AxGiwxQ/Uwe0kkK8jRJUDwMsQrphhKlHJgnFQR/OG6w2pDCNc64f3lCP6f4CcL MzkzdqrD6bSsqDR+t4AwXoj1dGzJvvCPHWOMNG1FxV7hclNj9em5r00rEqmIpSDKOQFH 7ijW+zgFzrlccEQapEZKS+LXv8iEmYOVRKjOtOiS6mQaJEAAbzEU2n45a34aVW5P9IsF ycz6nZWY/kxsnMi/1AQReQ7LDNEx0ogVQk8YjgBP9jPtvf3ah2lOwTibdNnuIHrE0UKx xIx4nF7FSOyKBbmmjlBwvGxdY6JfVW0FNYZ3tYmtSoKrH+0Vc567aL6kAdlWe9DjBdfr Awcw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 c15-20020aa7c98f000000b00568b831c482si937260edt.567.2024.04.18.08.07.10; Thu, 18 Apr 2024 08:07:10 -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; 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 1F6A268CECF; Thu, 18 Apr 2024 18:06:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from b-painless.mh.aa.net.uk (b-painless.mh.aa.net.uk [81.187.30.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6FDA168CD92 for ; Thu, 18 Apr 2024 18:06:31 +0300 (EEST) Received: from 0.b.4.b.7.4.0.8.c.4.a.5.d.8.b.2.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:2b8d:5a4c:8047:b4b0] helo=andrews-2024-laptop.lan) by painless-b.tch.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1rxTLK-000wcu-1n; Thu, 18 Apr 2024 16:06:30 +0100 From: Andrew Sayers To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Apr 2024 16:06:14 +0100 Message-ID: <20240418150614.3952107-3-ffmpeg-devel@pileofstuff.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> References: <20240418150614.3952107-1-ffmpeg-devel@pileofstuff.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] all: Link to "context" from all contexts with documentation 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: Andrew Sayers Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: zE2gJibOaLCg Some headings needed to be rewritten to accomodate the text, (hopefully) without changing the meaning. --- libavcodec/aacdec.h | 2 +- libavcodec/aacenc.h | 2 +- libavcodec/ac3enc.h | 2 +- libavcodec/amfenc.h | 2 +- libavcodec/atrac.h | 2 +- libavcodec/avcodec.h | 3 ++- libavcodec/bsf.h | 2 +- libavcodec/d3d11va.h | 3 +-- libavcodec/mediacodec.h | 2 +- libavcodec/qsv.h | 6 ++++-- libavcodec/sbr.h | 2 +- libavcodec/vdpau.h | 3 ++- libavcodec/videotoolbox.h | 5 +++-- libavfilter/avfilter.h | 2 +- libavformat/avformat.h | 3 ++- libavformat/avio.h | 3 ++- libavutil/hwcontext.h | 21 ++++++++++++--------- libavutil/hwcontext_cuda.h | 2 +- libavutil/hwcontext_d3d11va.h | 4 ++-- libavutil/hwcontext_d3d12va.h | 6 +++--- libavutil/hwcontext_drm.h | 2 +- libavutil/hwcontext_dxva2.h | 4 ++-- libavutil/hwcontext_mediacodec.h | 2 +- libavutil/hwcontext_opencl.h | 4 ++-- libavutil/hwcontext_qsv.h | 4 ++-- libavutil/hwcontext_vaapi.h | 6 +++--- libavutil/hwcontext_vdpau.h | 2 +- libavutil/hwcontext_vulkan.h | 4 ++-- 28 files changed, 57 insertions(+), 48 deletions(-) diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h index 1b245f9258..3a5317cd54 100644 --- a/libavcodec/aacdec.h +++ b/libavcodec/aacdec.h @@ -181,7 +181,7 @@ typedef struct DynamicRangeControl { } DynamicRangeControl; /** - * main AAC decoding context + * main AAC decoding @ref context "context" */ typedef struct AACDecContext { const struct AVClass *class; diff --git a/libavcodec/aacenc.h b/libavcodec/aacenc.h index 8899f90ac7..c91f99bc6c 100644 --- a/libavcodec/aacenc.h +++ b/libavcodec/aacenc.h @@ -193,7 +193,7 @@ typedef struct AACPCEInfo { } AACPCEInfo; /** - * AAC encoder context + * AAC encoder @ref context "context" */ typedef struct AACEncContext { AVClass *av_class; diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 227744d27f..68d8736f7a 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -151,7 +151,7 @@ typedef struct AC3Block { } AC3Block; /** - * AC-3 encoder private context. + * AC-3 encoder private @ref context "context" */ typedef struct AC3EncodeContext { AVClass *av_class; ///< AVClass used for AVOption diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 2dbd378ef8..71138e7f76 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -43,7 +43,7 @@ typedef struct AmfTraceWriter { } AmfTraceWriter; /** -* AMF encoder context +* AMF encoder @ref context "context" */ typedef struct AmfContext { diff --git a/libavcodec/atrac.h b/libavcodec/atrac.h index 05208bbee6..acdd0a741a 100644 --- a/libavcodec/atrac.h +++ b/libavcodec/atrac.h @@ -39,7 +39,7 @@ typedef struct AtracGainInfo { } AtracGainInfo; /** - * Gain compensation context structure. + * Gain compensation @ref context "context" */ typedef struct AtracGCContext { float gain_tab1[16]; ///< gain compensation level table diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 968009a192..a1f1430dde 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -430,7 +430,8 @@ typedef struct RcOverride{ #define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) /** - * main external API structure. + * @ref context "Context" for an encode or decode session + * * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. diff --git a/libavcodec/bsf.h b/libavcodec/bsf.h index a09c69f242..23c3cc87e4 100644 --- a/libavcodec/bsf.h +++ b/libavcodec/bsf.h @@ -56,7 +56,7 @@ */ /** - * The bitstream filter state. + * Bitstream filter @ref context "context" * * This struct must be allocated with av_bsf_alloc() and freed with * av_bsf_free(). diff --git a/libavcodec/d3d11va.h b/libavcodec/d3d11va.h index 27f40e5519..087c99f161 100644 --- a/libavcodec/d3d11va.h +++ b/libavcodec/d3d11va.h @@ -46,8 +46,7 @@ */ /** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. + * @ref context "Context" for the Direct3D11 FFmpeg HWAccel implementation * * The application must make it available as AVCodecContext.hwaccel_context. * diff --git a/libavcodec/mediacodec.h b/libavcodec/mediacodec.h index 4e9b56a618..d983e7ff1a 100644 --- a/libavcodec/mediacodec.h +++ b/libavcodec/mediacodec.h @@ -26,7 +26,7 @@ #include "libavcodec/avcodec.h" /** - * This structure holds a reference to a android/view/Surface object that will + * @ref context "Context" for the android/view/Surface object that will * be used as output by the decoder. * */ diff --git a/libavcodec/qsv.h b/libavcodec/qsv.h index c156b08d07..e75351ae27 100644 --- a/libavcodec/qsv.h +++ b/libavcodec/qsv.h @@ -26,8 +26,10 @@ #include "libavutil/buffer.h" /** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to + * @ref context "Context" for communicating QSV parameters between libavcodec + * and the caller. + * + * It is managed by the caller and must be assigned to * AVCodecContext.hwaccel_context. * - decoding: hwaccel_context must be set on return from the get_format() * callback diff --git a/libavcodec/sbr.h b/libavcodec/sbr.h index fe3a39603a..65f7a6da8f 100644 --- a/libavcodec/sbr.h +++ b/libavcodec/sbr.h @@ -116,7 +116,7 @@ typedef struct SBRData { typedef struct SpectralBandReplication SpectralBandReplication; /** - * aacsbr functions pointers + * aacsbr functions pointer @ref context "context" */ typedef struct AACSBRContext { int (*sbr_lf_gen)(SpectralBandReplication *sbr, diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h index 8021c25761..a9ff8b5f47 100644 --- a/libavcodec/vdpau.h +++ b/libavcodec/vdpau.h @@ -64,8 +64,9 @@ typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, const VdpBitstreamBuffer *); /** - * This structure is used to share data between the libavcodec library and + * @ref context "Context" to share data between the libavcodec library and * the client video application. + * * This structure will be allocated and stored in AVCodecContext.hwaccel_context * by av_vdpau_bind_context(). Members can be set by the user once * during initialization or through each AVCodecContext.get_buffer() diff --git a/libavcodec/videotoolbox.h b/libavcodec/videotoolbox.h index d68d76e400..ece008157c 100644 --- a/libavcodec/videotoolbox.h +++ b/libavcodec/videotoolbox.h @@ -49,8 +49,9 @@ #include "libavutil/attributes.h" /** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. + * @ref context "Context" for information passed between the caller and libavcodec + * for initializing Videotoolbox decoding. + * * Its size is not a part of the public ABI, it must be allocated with * av_videotoolbox_alloc_context() and freed with av_free(). */ diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index a34e61f23c..41bdc30d89 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -403,7 +403,7 @@ unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output); */ #define AVFILTER_THREAD_SLICE (1 << 0) -/** An instance of a filter */ +/** @ref context "Context" for a filter */ struct AVFilterContext { const AVClass *av_class; ///< needed for av_log() and filters common options diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 8afdcd9fd0..6bb08a0b0c 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1241,7 +1241,8 @@ enum AVDurationEstimationMethod { }; /** - * Format I/O context. + * Format I/O @ref context "context" + * * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. diff --git a/libavformat/avio.h b/libavformat/avio.h index ebf611187d..e18d542377 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -146,7 +146,8 @@ enum AVIODataMarkerType { }; /** - * Bytestream IO Context. + * Bytestream I/O @ref context "context" + * * New public fields can be added with minor version bumps. * Removal, reordering and changes to existing public fields require * a major version bump. diff --git a/libavutil/hwcontext.h b/libavutil/hwcontext.h index bac30debae..f94f44906c 100644 --- a/libavutil/hwcontext.h +++ b/libavutil/hwcontext.h @@ -41,12 +41,13 @@ enum AVHWDeviceType { }; /** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. + * @ref context "Context" for (hardware/vendor-specific) "high-level" state. + * + * "High-level state" is anything that is not tied to a concrete processing + * configuration. E.g., in an API that supports hardware-accelerated encoding + * and decoding, this struct will (if possible) wrap the state that is common + * to both encoding and decoding and from which specific instances of encoders + * or decoders can be derived. * * This struct is reference-counted with the AVBuffer mechanism. The * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field @@ -103,9 +104,11 @@ typedef struct AVHWDeviceContext { } AVHWDeviceContext; /** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. + * @ref context "context" for a pool of "hardware" frames (those with + * data not located in normal system memory) + * + * All the frames in the pool are assumed to be allocated in the same way and + * interchangeable. * * This struct is reference-counted with the AVBuffer mechanism and tied to a * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor diff --git a/libavutil/hwcontext_cuda.h b/libavutil/hwcontext_cuda.h index cbad434fea..befa978cf9 100644 --- a/libavutil/hwcontext_cuda.h +++ b/libavutil/hwcontext_cuda.h @@ -37,7 +37,7 @@ typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; /** - * This struct is allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVCUDADeviceContext { CUcontext cuda_ctx; diff --git a/libavutil/hwcontext_d3d11va.h b/libavutil/hwcontext_d3d11va.h index 77d2d72f1b..eac7d6062a 100644 --- a/libavutil/hwcontext_d3d11va.h +++ b/libavutil/hwcontext_d3d11va.h @@ -40,7 +40,7 @@ #include /** - * This struct is allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVD3D11VADeviceContext { /** @@ -126,7 +126,7 @@ typedef struct AVD3D11FrameDescriptor { } AVD3D11FrameDescriptor; /** - * This struct is allocated as AVHWFramesContext.hwctx + * This @ref context "context" is allocated as AVHWFramesContext.hwctx */ typedef struct AVD3D11VAFramesContext { /** diff --git a/libavutil/hwcontext_d3d12va.h b/libavutil/hwcontext_d3d12va.h index ff06e6f2ef..d170f74b4d 100644 --- a/libavutil/hwcontext_d3d12va.h +++ b/libavutil/hwcontext_d3d12va.h @@ -37,7 +37,7 @@ #include /** - * @brief This struct is allocated as AVHWDeviceContext.hwctx + * @brief This @ref context "context" is allocated as AVHWDeviceContext.hwctx * */ typedef struct AVD3D12VADeviceContext { @@ -78,7 +78,7 @@ typedef struct AVD3D12VADeviceContext { } AVD3D12VADeviceContext; /** - * @brief This struct is used to sync d3d12 execution + * @brief This @ref context "context" is used to sync d3d12 execution * */ typedef struct AVD3D12VASyncContext { @@ -120,7 +120,7 @@ typedef struct AVD3D12VAFrame { } AVD3D12VAFrame; /** - * @brief This struct is allocated as AVHWFramesContext.hwctx + * @brief This @ref context "context" is allocated as AVHWFramesContext.hwctx * */ typedef struct AVD3D12VAFramesContext { diff --git a/libavutil/hwcontext_drm.h b/libavutil/hwcontext_drm.h index 42709f215e..b7b1bad171 100644 --- a/libavutil/hwcontext_drm.h +++ b/libavutil/hwcontext_drm.h @@ -152,7 +152,7 @@ typedef struct AVDRMFrameDescriptor { /** * DRM device. * - * Allocated as AVHWDeviceContext.hwctx. + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx. */ typedef struct AVDRMDeviceContext { /** diff --git a/libavutil/hwcontext_dxva2.h b/libavutil/hwcontext_dxva2.h index e1b79bc0de..b77b7293ab 100644 --- a/libavutil/hwcontext_dxva2.h +++ b/libavutil/hwcontext_dxva2.h @@ -34,14 +34,14 @@ #include /** - * This struct is allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVDXVA2DeviceContext { IDirect3DDeviceManager9 *devmgr; } AVDXVA2DeviceContext; /** - * This struct is allocated as AVHWFramesContext.hwctx + * This @ref context "context" is allocated as AVHWFramesContext.hwctx */ typedef struct AVDXVA2FramesContext { /** diff --git a/libavutil/hwcontext_mediacodec.h b/libavutil/hwcontext_mediacodec.h index fc0263cabc..39381b56c5 100644 --- a/libavutil/hwcontext_mediacodec.h +++ b/libavutil/hwcontext_mediacodec.h @@ -22,7 +22,7 @@ /** * MediaCodec details. * - * Allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVMediaCodecDeviceContext { /** diff --git a/libavutil/hwcontext_opencl.h b/libavutil/hwcontext_opencl.h index ef54486c95..fc5b1bb24f 100644 --- a/libavutil/hwcontext_opencl.h +++ b/libavutil/hwcontext_opencl.h @@ -58,7 +58,7 @@ typedef struct AVOpenCLFrameDescriptor { /** * OpenCL device details. * - * Allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVOpenCLDeviceContext { /** @@ -84,7 +84,7 @@ typedef struct AVOpenCLDeviceContext { /** * OpenCL-specific data associated with a frame pool. * - * Allocated as AVHWFramesContext.hwctx. + * This @ref context "context" is allocated as AVHWFramesContext.hwctx. */ typedef struct AVOpenCLFramesContext { /** diff --git a/libavutil/hwcontext_qsv.h b/libavutil/hwcontext_qsv.h index e2dba8ad83..c7cc88627b 100644 --- a/libavutil/hwcontext_qsv.h +++ b/libavutil/hwcontext_qsv.h @@ -30,7 +30,7 @@ */ /** - * This struct is allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVQSVDeviceContext { mfxSession session; @@ -48,7 +48,7 @@ typedef struct AVQSVDeviceContext { } AVQSVDeviceContext; /** - * This struct is allocated as AVHWFramesContext.hwctx + * This @ref context "context" is allocated as AVHWFramesContext.hwctx */ typedef struct AVQSVFramesContext { mfxFrameSurface1 *surfaces; diff --git a/libavutil/hwcontext_vaapi.h b/libavutil/hwcontext_vaapi.h index 0b2e071cb3..e1940a5fe0 100644 --- a/libavutil/hwcontext_vaapi.h +++ b/libavutil/hwcontext_vaapi.h @@ -63,7 +63,7 @@ enum { /** * VAAPI connection details. * - * Allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVVAAPIDeviceContext { /** @@ -83,7 +83,7 @@ typedef struct AVVAAPIDeviceContext { /** * VAAPI-specific data associated with a frame pool. * - * Allocated as AVHWFramesContext.hwctx. + * This @ref context "context" is allocated as AVHWFramesContext.hwctx. */ typedef struct AVVAAPIFramesContext { /** @@ -105,7 +105,7 @@ typedef struct AVVAAPIFramesContext { /** * VAAPI hardware pipeline configuration details. * - * Allocated with av_hwdevice_hwconfig_alloc(). + * This struct is allocated with av_hwdevice_hwconfig_alloc(). */ typedef struct AVVAAPIHWConfig { /** diff --git a/libavutil/hwcontext_vdpau.h b/libavutil/hwcontext_vdpau.h index 1b7ea1e443..b26f7f171e 100644 --- a/libavutil/hwcontext_vdpau.h +++ b/libavutil/hwcontext_vdpau.h @@ -30,7 +30,7 @@ */ /** - * This struct is allocated as AVHWDeviceContext.hwctx + * This @ref context "context" is allocated as AVHWDeviceContext.hwctx */ typedef struct AVVDPAUDeviceContext { VdpDevice device; diff --git a/libavutil/hwcontext_vulkan.h b/libavutil/hwcontext_vulkan.h index cbbd2390c1..d6897a96fa 100644 --- a/libavutil/hwcontext_vulkan.h +++ b/libavutil/hwcontext_vulkan.h @@ -39,7 +39,7 @@ typedef struct AVVkFrame AVVkFrame; */ /** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. + * Main Vulkan @ref context "context", allocated as AVHWDeviceContext.hwctx. * All of these can be set before init to change what the context uses */ typedef struct AVVulkanDeviceContext { @@ -172,7 +172,7 @@ typedef enum AVVkFrameFlags { } AVVkFrameFlags; /** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options + * This @ref context "context" is allocated as AVHWFramesContext.hwctx, used to set pool-specific options */ typedef struct AVVulkanFramesContext { /**