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 9C23E45EC5 for ; Sun, 16 Jul 2023 21:21:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1FD5768C691; Mon, 17 Jul 2023 00:21:33 +0300 (EEST) Received: from mail-oo1-f44.google.com (mail-oo1-f44.google.com [209.85.161.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 22C4268C506 for ; Mon, 17 Jul 2023 00:21:26 +0300 (EEST) Received: by mail-oo1-f44.google.com with SMTP id 006d021491bc7-55b8f1c930eso2444979eaf.3 for ; Sun, 16 Jul 2023 14:21:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689542484; x=1692134484; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=D3E0xYt6hiJKTDvX7FmUgNJ9o/XiXhN/5blNi/orSBE=; b=qJLQEmuJ9JPlragG6lGyOIuAbz0QameS/9g0+Il8IY7tiB7O9SfJ1PKhFmOj9LfEDw HM/TcghVOreq00GqmNRQJIm/VDuoKF86PWmaW2l54shPaYazd/ta49fuYhdfpInuVD0C ra48hr/lBF530vhnave3fW0Pmb60nNdLTG2k5eLJgLZXd76y2fTOVdoQbrlObPRzqNoV 0suG/O5FuNfa6trn1fd+WvO8n+nAfPpkwXdYtwGA5wnrwMwJUsaA1dY5YNzAs02mw2Kv 5MkOT0wDaqor60A2ZoKjYhQ6D3JSN+VRkNNEMxzlkVNvsodZX48ONkecn6a2Le4kgSEx +Fzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689542484; x=1692134484; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=D3E0xYt6hiJKTDvX7FmUgNJ9o/XiXhN/5blNi/orSBE=; b=HaVr2twCb8bG6CH1WXSUP5qeObkccpzkxONuPtEwt/71ofs6rawKPxATZC5OA//I6D diX+57k3Fh/2W40M/8zix/8rAIaO7o3fdh/BH2vhW6KwVjA+eIhuALcR5VA8p5HS874d x78ahkQbS8x5JYf4M3Pidge58AdwBNHKwmmuajYXJkh0wMvzCuN6OX/sVcgdDAQUoGNS pvEl6K8L5J2uUoI2ztd1rw0rJeoXcF8HDehqbEMS6K6GQHCbF1pH9alFbANxOx47oqJt RkiL68z6l4znoopjx9NE+no8gy9+9GlgO8r96lRpeM/CKX4POYsnoaxRXfGR0RSqEmaq qhOA== X-Gm-Message-State: ABy/qLbw7xYgp2cdCrWDGPBQWV3x57xQmMEuwKKnTUNUkkVZlANMj4nZ wiBSNQ0xiiP5BV9rsXbrhJM5sYE7Nzo= X-Google-Smtp-Source: APBJJlH500QwKlFRTZese5FSSBotqfkIeeUmTQ0D77/kftrNVCL4Sr7ToXkugEkhBsN0hFgao4ToYA== X-Received: by 2002:a4a:86cf:0:b0:566:f69c:a6e4 with SMTP id y15-20020a4a86cf000000b00566f69ca6e4mr2852014ooh.9.1689542483905; Sun, 16 Jul 2023 14:21:23 -0700 (PDT) Received: from [192.168.0.16] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id w19-20020a4a9793000000b005630547db40sm6385842ooi.41.2023.07.16.14.21.22 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 16 Jul 2023 14:21:23 -0700 (PDT) Message-ID: Date: Sun, 16 Jul 2023 18:21:30 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: James Almer In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] avcodec/cbs_h2645: Replace parameter sets generically 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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 7/16/2023 6:18 PM, Andreas Rheinhardt wrote: > This avoids having a function for each type of parameter set > for each of the modules. > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/cbs_h2645.c | 134 ++++++++++++++++++++++------------------- > 1 file changed, 72 insertions(+), 62 deletions(-) > > diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c > index 34c5d1d372..5bbd74b977 100644 > --- a/libavcodec/cbs_h2645.c > +++ b/libavcodec/cbs_h2645.c > @@ -736,55 +736,65 @@ static int cbs_h2645_split_fragment(CodedBitstreamContext *ctx, > return 0; > } > > -#define cbs_h2645_replace_ps(h26n, ps_name, ps_var, id_element) \ > -static int cbs_h26 ## h26n ## _replace_ ## ps_var(CodedBitstreamContext *ctx, \ > - CodedBitstreamUnit *unit) \ > -{ \ > - CodedBitstreamH26 ## h26n ## Context *priv = ctx->priv_data; \ > - H26 ## h26n ## Raw ## ps_name *ps_var = unit->content; \ > - unsigned int id = ps_var->id_element; \ > - int err = ff_cbs_make_unit_refcounted(ctx, unit); \ > - if (err < 0) \ > - return err; \ > - if (priv->ps_var[id] == priv->active_ ## ps_var) \ > - priv->active_ ## ps_var = NULL ; \ > - av_buffer_unref(&priv->ps_var ## _ref[id]); \ > - av_assert0(unit->content_ref); \ > - priv->ps_var ## _ref[id] = av_buffer_ref(unit->content_ref); \ > - if (!priv->ps_var ## _ref[id]) \ > - return AVERROR(ENOMEM); \ > - priv->ps_var[id] = (H26 ## h26n ## Raw ## ps_name *)priv->ps_var ## _ref[id]->data; \ > - return 0; \ > +typedef struct PSOffsets { > + unsigned id_element_offset; //< relative to the raw parameter set struct; must refer to uint8_t > + unsigned ps_array_offset; //< relative to CodedBitstreamH26*Context > + unsigned ps_ref_array_offset; //< relative to CodedBitstreamH26*Context > + unsigned active_ps_offset; //< Zero means that active PS is unused > +} PSOffsets; > + > +#define CBS_H26456_OFFSET_TABLE(MODULE, module, PS_NAME, ps_var, id_element, _active_ps_offset) \ > +static const PSOffsets module ## _ ## ps_var ## _offsets = { \ > + .id_element_offset = offsetof(MODULE ## Raw ## PS_NAME, id_element), \ > + .ps_array_offset = offsetof(CodedBitstream ## MODULE ## Context, ps_var), \ > + .ps_ref_array_offset = offsetof(CodedBitstream ## MODULE ## Context, ps_var ## _ref), \ > + .active_ps_offset = _active_ps_offset, \ > } > > -cbs_h2645_replace_ps(4, SPS, sps, seq_parameter_set_id) > -cbs_h2645_replace_ps(4, PPS, pps, pic_parameter_set_id) > -cbs_h2645_replace_ps(5, VPS, vps, vps_video_parameter_set_id) > -cbs_h2645_replace_ps(5, SPS, sps, sps_seq_parameter_set_id) > -cbs_h2645_replace_ps(5, PPS, pps, pps_pic_parameter_set_id) > - > -#define cbs_h266_replace_ps(h26n, ps_name, ps_var, id_element) \ > -static int cbs_h26 ## h26n ## _replace_ ## ps_var(CodedBitstreamContext *ctx, \ > - CodedBitstreamUnit *unit) \ > -{ \ > - CodedBitstreamH26 ## h26n ## Context *priv = ctx->priv_data; \ > - H26 ## h26n ## Raw ## ps_name *ps_var = unit->content; \ > - unsigned int id = ps_var->id_element; \ > - int err = ff_cbs_make_unit_refcounted(ctx, unit); \ > - if (err < 0) \ > - return err; \ > - av_buffer_unref(&priv->ps_var ## _ref[id]); \ > - av_assert0(unit->content_ref); \ > - priv->ps_var ## _ref[id] = av_buffer_ref(unit->content_ref); \ > - if (!priv->ps_var ## _ref[id]) \ > - return AVERROR(ENOMEM); \ > - priv->ps_var[id] = (H26 ## h26n ## Raw ## ps_name *)priv->ps_var ## _ref[id]->data; \ > - return 0; \ > -} > +#define CBS_H2645_OFFSET_TABLE(h26n, PS_NAME, ps_var, id_element) \ > + CBS_H26456_OFFSET_TABLE(H26 ## h26n, h26 ## h26n, PS_NAME, ps_var, id_element, \ > + offsetof(CodedBitstreamH26 ## h26n ## Context, active_ ## ps_var)) > + > +CBS_H2645_OFFSET_TABLE(4, SPS, sps, seq_parameter_set_id); > +CBS_H2645_OFFSET_TABLE(4, PPS, pps, pic_parameter_set_id); > +CBS_H2645_OFFSET_TABLE(5, VPS, vps, vps_video_parameter_set_id); > +CBS_H2645_OFFSET_TABLE(5, SPS, sps, sps_seq_parameter_set_id); > +CBS_H2645_OFFSET_TABLE(5, PPS, pps, pps_pic_parameter_set_id); > + > +#define CBS_H266_OFFSET_TABLE(PS_NAME, ps_var, id_element) \ > + CBS_H26456_OFFSET_TABLE(H266, h266, PS_NAME, ps_var, id_element, 0) > + > +CBS_H266_OFFSET_TABLE(VPS, vps, vps_video_parameter_set_id); > +CBS_H266_OFFSET_TABLE(SPS, sps, sps_seq_parameter_set_id); > +CBS_H266_OFFSET_TABLE(PPS, pps, pps_pic_parameter_set_id); > + > +static int cbs_h26456_replace_ps(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, nit: it might be a good idea to rename the module (and h2645_parse) to h26x. Or alternatively, nal. _______________________________________________ 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".