From patchwork Wed Jun 26 23:12:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 50178 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:bc92:0:b0:482:c625:d099 with SMTP id p18csp132091vqy; Wed, 26 Jun 2024 16:13:05 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWL6y6d3qxkGqKoqt9qhgWxpvu7NQX6S6zVSY5S7EoVAen9Yp9YIk67sGOxcYoZuVlfVzsKbe9RuewEHvaj1RF2+HU/UgZyUx4bXA== X-Google-Smtp-Source: AGHT+IGmBkaGwU0wIImH5K0u+fBcQDJPktvhzuXGef3raSu8SHzoZ32viflkKuBVil/r/3g1mNNX X-Received: by 2002:a05:6402:35d4:b0:57d:1d9e:d1fe with SMTP id 4fb4d7f45d1cf-584bc39db0cmr328590a12.9.1719443585583; Wed, 26 Jun 2024 16:13:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1719443585; cv=none; d=google.com; s=arc-20160816; b=ELSQ3Pqnj12gp7EbGfL+pk8jmE5PNs0vYpo2uM1I0jkOqT4z96PwLwAhK0ov5cVRV4 /4fymw4A7MYi7L5Y2kFBl6GUEoFdVwrvkpPQTMCttLhc4Gq8ekcQ2v3I24Ys6EPjO6cF 5zC6zzkdtPOz5ipouYTNXx30MPNPj795T8fIIpZvR4QRF2I9dUMbjlbzPOOVHGtyDE4r YeybULhPkuBsvYb9vDZz2EzvUq/PcKke9nghzO32iskdBWgmjpghVCv4FbVmd72RQoC1 7UEtn8HB0ouWsPal96eP5EBxvmtDU8c5LnLjLyaaYkOvGKbeSGyuA3Jddj6bSBFymB6j bf6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=AyZKPvAh8UvAfSLA2G5F2zNxOxgBpLJEnku/XJipwuM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Znw1wv/TGinqWCtjnOPKEh4P6kbOQNmkakaRc4YSKNmGTaIHpNJFlB8jO247EJwrGm wWnnicPX16tPdaSf1xa3MnaWJnpx013xJ5aRFotpjT6QbGJONZh7K3zsd2l5UwnSTdCd 2VxcF3dEpjrcjonPJDeYtuCIpR9vLK5s5Lofa1MiQfkcSG0OCnG90l+zRN/8gqDADMjg hQES4XKJgKyasPH9b0nBALkMJejbm5RdplC5poutlhB/1RXEau+bDYZ53rm4ANsdP1J7 L62DZwksGEWbcPqw1/jlpqpmWNAHNbzRl8Fnwy9K5tTG4ry9pSD5MQlQ2QPr53vLMdY/ yFeg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=TJtlvmsK; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-584d2e4a7d7si69044a12.467.2024.06.26.16.13.05; Wed, 26 Jun 2024 16:13:05 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=TJtlvmsK; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 26F7068D265; Thu, 27 Jun 2024 02:13:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B8AA68CC21 for ; Thu, 27 Jun 2024 02:12:54 +0300 (EEST) Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1f9b523a15cso8716505ad.0 for ; Wed, 26 Jun 2024 16:12:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719443572; x=1720048372; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=N6EbYyWEnQuc/2U0n38Bj2gtPuC1a8OmCFJowG05gAE=; b=TJtlvmsKEdFm7DRwGDa3pq1cOH2N/aT/XNPQ8W3/XIj/n1XY0b6B70YKWJ0nCX9My5 B/JorpUHXqbrKs7+ScdKGKmGnLuoHax1x0VqKEgnzQsSNQb6ExD1Uv62eG1GJhBAEeZD ijlPBCagf7f2C/KsQ2/MWrqHxG8xR5mcZ8k8dw6HpGe1sCvMBJAueHCPy4rBCe7okb0s FpbMPzfPmuoA/zCE8cFjKlIj8jVv9SviJFKrOTyrt0qxZz9Ogdr2WVY879rEE7+kJw1f DgLBgBC43DZGhkfbEhejDHCnPCY6z1osgDyF62V4dkY1ECLYLlzhNdf43Crm+EtF0ktS mumQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719443572; x=1720048372; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=N6EbYyWEnQuc/2U0n38Bj2gtPuC1a8OmCFJowG05gAE=; b=aIXjoYCRWztjtIcD7BXBcKg2ZtvXZ95opSnkS4AH/9PSE1LeHjjREIi2bYSudtAKWn fywm34NmFIxxi5VBIopRwkOrMfzISqy1x78HyWfhYLvqez4algGR9gF3A8ViZZFk0nbD BzuulKHSDw5U0WO4kDiaqkVSjmHkzltuUzfPiXZlS0XIKuYC3GJ/fOnuVtjF/u8Xozjh 5iSTAyFleOjK0mq3d6CAPB5aScFIvbT8cBTc1E+PnV35P4k9JEjg1qOcN417XiP3pNRn 1pvLLHTeZuc9BI2rnEvSXhQmHX+clWZB0ZnEWGTu8yUzvKWLD0eiFeyUDMg3U7kM+jTE +83A== X-Gm-Message-State: AOJu0Yx/PnmImkjYcDakYloSrkMSvul1W5wivkifgdkUToHq9r5DHeS8 fMb20yoG6l5C695uvBFVvSUnBHrQlZo0K92HB4gXlRhmHP4kJKcsiF83TA== X-Received: by 2002:a17:902:f543:b0:1fa:92ee:38e0 with SMTP id d9443c01a7336-1fa92ee3f7amr29888495ad.12.1719443571604; Wed, 26 Jun 2024 16:12:51 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1faac8f25a1sm384995ad.73.2024.06.26.16.12.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jun 2024 16:12:51 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 26 Jun 2024 20:12:57 -0300 Message-ID: <20240626231259.10788-1-jamrial@gmail.com> X-Mailer: git-send-email 2.45.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/cbs_sei: add support for Frame Packing Arrangement SEI parsing 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: smMdKSRMGyQQ Signed-off-by: James Almer --- libavcodec/cbs_h264.h | 20 ++++++++++++++++ libavcodec/cbs_h2645.c | 22 +++++++++++++---- libavcodec/cbs_h264_syntax_template.c | 34 +++++++++++++++++++++++++++ libavcodec/cbs_sei.h | 20 ++++++++++++++++ libavcodec/cbs_sei_syntax_template.c | 34 +++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 5 deletions(-) diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h index db91231337..3763f2492b 100644 --- a/libavcodec/cbs_h264.h +++ b/libavcodec/cbs_h264.h @@ -293,6 +293,26 @@ typedef struct H264RawFilmGrainCharacteristics { uint8_t film_grain_characteristics_repetition_period; } H264RawFilmGrainCharacteristics; +typedef struct H264RawSEIFramePackingArrangement { + uint32_t frame_packing_arrangement_id; + uint8_t frame_packing_arrangement_cancel_flag; + uint8_t frame_packing_arrangement_type; + uint8_t quincunx_sampling_flag; + uint8_t content_interpretation_type; + uint8_t spatial_flipping_flag; + uint8_t frame0_flipped_flag; + uint8_t field_views_flag; + uint8_t current_frame_is_frame0_flag; + uint8_t frame0_self_contained_flag; + uint8_t frame1_self_contained_flag; + uint8_t frame0_grid_position_x; + uint8_t frame0_grid_position_y; + uint8_t frame1_grid_position_x; + uint8_t frame1_grid_position_y; + uint16_t frame_packing_arrangement_repetition_period; + uint8_t frame_packing_arrangement_extension_flag; +} H264RawSEIFramePackingArrangement; + typedef struct H264RawSEIDisplayOrientation { uint8_t display_orientation_cancel_flag; uint8_t hor_flip; diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index e2389f124e..283925f937 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -2128,6 +2128,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = { sizeof(SEIRawUserDataUnregistered), SEI_MESSAGE_RW(sei, user_data_unregistered), }, + { + SEI_TYPE_FRAME_PACKING_ARRANGEMENT, + 1, 0, + sizeof(SEIRawFramePackingArrangement), + SEI_MESSAGE_RW(sei, frame_packing_arrangement), + }, { SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME, 1, 0, @@ -2186,6 +2192,12 @@ static const SEIMessageTypeDescriptor cbs_sei_h264_types[] = { sizeof(H264RawFilmGrainCharacteristics), SEI_MESSAGE_RW(h264, film_grain_characteristics), }, + { + SEI_TYPE_FRAME_PACKING_ARRANGEMENT, + 1, 0, + sizeof(H264RawSEIFramePackingArrangement), + SEI_MESSAGE_RW(h264, sei_frame_packing_arrangement), + }, { SEI_TYPE_DISPLAY_ORIENTATION, 1, 0, @@ -2275,11 +2287,6 @@ const SEIMessageTypeDescriptor *ff_cbs_sei_find_type(CodedBitstreamContext *ctx, const SEIMessageTypeDescriptor *codec_list; int i; - for (i = 0; cbs_sei_common_types[i].type >= 0; i++) { - if (cbs_sei_common_types[i].type == payload_type) - return &cbs_sei_common_types[i]; - } - switch (ctx->codec->codec_id) { case AV_CODEC_ID_H264: codec_list = cbs_sei_h264_types; @@ -2299,5 +2306,10 @@ const SEIMessageTypeDescriptor *ff_cbs_sei_find_type(CodedBitstreamContext *ctx, return &codec_list[i]; } + for (i = 0; cbs_sei_common_types[i].type >= 0; i++) { + if (cbs_sei_common_types[i].type == payload_type) + return &cbs_sei_common_types[i]; + } + return NULL; } diff --git a/libavcodec/cbs_h264_syntax_template.c b/libavcodec/cbs_h264_syntax_template.c index 4d2d303722..9d0386c24d 100644 --- a/libavcodec/cbs_h264_syntax_template.c +++ b/libavcodec/cbs_h264_syntax_template.c @@ -801,6 +801,40 @@ SEI_FUNC(film_grain_characteristics, (CodedBitstreamContext *ctx, RWContext *rw, return 0; } +SEI_FUNC(sei_frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw, + H264RawSEIFramePackingArrangement *current, + SEIMessageState *sei)) +{ + int err; + + HEADER("Frame Packing Arrangement"); + + ue(frame_packing_arrangement_id, 0, MAX_UINT_BITS(31)); + flag(frame_packing_arrangement_cancel_flag); + if (!current->frame_packing_arrangement_cancel_flag) { + u(7, frame_packing_arrangement_type, 0, 7); + flag(quincunx_sampling_flag); + u(6, content_interpretation_type, 0, 2); + flag(spatial_flipping_flag); + flag(frame0_flipped_flag); + flag(field_views_flag); + flag(current_frame_is_frame0_flag); + flag(frame0_self_contained_flag); + flag(frame1_self_contained_flag); + if (!current->quincunx_sampling_flag && current->frame_packing_arrangement_type != 5) { + ub(4, frame0_grid_position_x); + ub(4, frame0_grid_position_y); + ub(4, frame1_grid_position_x); + ub(4, frame1_grid_position_y); + } + fixed(8, frame_packing_arrangement_reserved_byte, 0); + ue(frame_packing_arrangement_repetition_period, 0, 16384); + } + flag(frame_packing_arrangement_extension_flag); + + return 0; +} + SEI_FUNC(sei_display_orientation, (CodedBitstreamContext *ctx, RWContext *rw, H264RawSEIDisplayOrientation *current, SEIMessageState *sei)) diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h index ec7cdb62f0..cc7d6f797d 100644 --- a/libavcodec/cbs_sei.h +++ b/libavcodec/cbs_sei.h @@ -43,6 +43,26 @@ typedef struct SEIRawUserDataUnregistered { size_t data_length; } SEIRawUserDataUnregistered; +typedef struct SEIRawFramePackingArrangement { + uint32_t fp_arrangement_id; + uint8_t fp_arrangement_cancel_flag; + uint8_t fp_arrangement_type; + uint8_t fp_quincunx_sampling_flag; + uint8_t fp_content_interpretation_type; + uint8_t fp_spatial_flipping_flag; + uint8_t fp_frame0_flipped_flag; + uint8_t fp_field_views_flag; + uint8_t fp_current_frame_is_frame0_flag; + uint8_t fp_frame0_self_contained_flag; + uint8_t fp_frame1_self_contained_flag; + uint8_t fp_frame0_grid_position_x; + uint8_t fp_frame0_grid_position_y; + uint8_t fp_frame1_grid_position_x; + uint8_t fp_frame1_grid_position_y; + uint8_t fp_arrangement_persistence_flag; + uint8_t fp_upsampled_aspect_ratio_flag; +} SEIRawFramePackingArrangement; + typedef struct SEIRawMasteringDisplayColourVolume { uint16_t display_primaries_x[3]; uint16_t display_primaries_y[3]; diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c index 81448ef3f2..03ef9ab473 100644 --- a/libavcodec/cbs_sei_syntax_template.c +++ b/libavcodec/cbs_sei_syntax_template.c @@ -94,6 +94,40 @@ SEI_FUNC(user_data_unregistered, (CodedBitstreamContext *ctx, RWContext *rw, return 0; } +SEI_FUNC(frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw, + SEIRawFramePackingArrangement *current, + SEIMessageState *unused)) +{ + int err; + + HEADER("Frame Packing Arrangement"); + + ue(fp_arrangement_id, 0, MAX_UINT_BITS(31)); + flag(fp_arrangement_cancel_flag); + if (!current->fp_arrangement_cancel_flag) { + u(7, fp_arrangement_type, 3, 5); + flag(fp_quincunx_sampling_flag); + u(6, fp_content_interpretation_type, 0, 2); + flag(fp_spatial_flipping_flag); + flag(fp_frame0_flipped_flag); + flag(fp_field_views_flag); + flag(fp_current_frame_is_frame0_flag); + flag(fp_frame0_self_contained_flag); + flag(fp_frame1_self_contained_flag); + if (!current->fp_quincunx_sampling_flag && current->fp_arrangement_type != 5) { + ub(4, fp_frame0_grid_position_x); + ub(4, fp_frame0_grid_position_y); + ub(4, fp_frame1_grid_position_x); + ub(4, fp_frame1_grid_position_y); + } + fixed(8, fp_arrangement_reserved_byte, 0); + flag(fp_arrangement_persistence_flag); + } + flag(fp_upsampled_aspect_ratio_flag); + + return 0; +} + SEI_FUNC(mastering_display_colour_volume, (CodedBitstreamContext *ctx, RWContext *rw, SEIRawMasteringDisplayColourVolume *current, From patchwork Wed Jun 26 23:12:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 50179 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:bc92:0:b0:482:c625:d099 with SMTP id p18csp132139vqy; Wed, 26 Jun 2024 16:13:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVf5YBA3SrbHh9a6hK0rZA1cIyL6Xx0D/0Mh18pMZYgz45ECBws04lONfMEHjbooRYnU/PNrpLpDpyH9T0A7ouGjny0vPTw+88i0g== X-Google-Smtp-Source: AGHT+IGRdJaJ7GcbUZ19+eE1z65TcdWF5cHP9JC39BzLXqVYx3U0YQjUMlX27Dhaj3gIb2KOk/rT X-Received: by 2002:a05:6512:2389:b0:52c:d617:f4da with SMTP id 2adb3069b0e04-52ce0620276mr12069207e87.41.1719443594288; Wed, 26 Jun 2024 16:13:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1719443594; cv=none; d=google.com; s=arc-20160816; b=IJH8yMqOk78WuVZDZQZ73lvbvELoxmGh+NMQJPrlYGbq/PkG1VqDj0rhkgnrcds0uO wcbl5FwmyAUpPO5pKi8oUj4+XawYwJR2BHyEv5yXzANXR4K83s9OjD7+ZkWiA74G2s3q xf0e9wdpUj4P3dEnUw3kjLzJSoj6+LjNjZsPtR5ILpa8Pt8LvSgPVR2bWjAiPRnO5AmG jqkVBTMMyOtp6IHCraDr5SGiR+3rkep6NPXOJRpVymLNAXMEE+8zGkKFxOAPCN5Hd+2s O/gDeWRCHpL19wdt7eksEvV7tuj5pd4kuyjcd+V88Dfkcvpv8hG6wKypfY1/9dKtg/T9 L0Xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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:dkim-signature:delivered-to; bh=Q+jQF5nYW81ZLiuIdFnEFVrCSkqI/nEUEqxYNCm9vzc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=YJ7uu82IKqoovNbHtL8yvIWrHjxDr9MpIalWR7kei4+CRRLsXmqONkHDRRDA/i9zT+ 8sarpVJdUXlhbsYfra3vNbmScLeiaZNUIMhCYsxiVDEd9oIvgO3iGzsNnrNy0fGaj38g yDGGin9f8bHWc7umzLdCnOyEAbXhSK965Nj6dlf9lKr0NLrilgBZaCxCxOCZok4gvDwQ QPRbn3Y9Xpg5n4VqZ7A/aq0sdpbzSkn7jHwCZdCjMkypS62cGOaBSNytZQnEzIbC6guL a0Y6Iwug2WcYYeEw3FKC7gDkjvx/eynDHzGAQ/wMdUZjQK8mdafFQ+FQiheoMZXkdXgK Ib2w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="BQbmF/ow"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a729d82afbfsi1096366b.993.2024.06.26.16.13.13; Wed, 26 Jun 2024 16:13:14 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="BQbmF/ow"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 68BC868D699; Thu, 27 Jun 2024 02:13:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03CEA68CE0E for ; Thu, 27 Jun 2024 02:12:56 +0300 (EEST) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1f480624d0fso58075625ad.1 for ; Wed, 26 Jun 2024 16:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719443573; x=1720048373; 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=lLHv81AEnGkwECU4uLZq8QfOEslugkejr3sXxy06taU=; b=BQbmF/owdc0cyat3gUIWb60/V6q0FytEYRO8Av865KEaPUqO7+Z3rGYphHCeQrC7HZ tDscuQmmcJxQ/aMe6H9Cc+DFa5yXgRv02aEuWL2qi9t5Cgn9fEIsg+lfDgLV0bemqWz4 LVDzVApWCQ9GVmzJpKHbOSNt6DUHEhtriKOpSjkMSZGGw6oFqRGpHuLsXa8p9/LQwsez v0+OP+lgQxLHsBmk/l60ZpbmmT0MoGyqsZSylUdjiENvYKU/Ygpw0Tsb+XniA/2VETan vkSG9vPJpkfPyeJQ/HZNAtf3R0f0x25PbJA+DC1tTCCQhPrygrzv5JgE95SMfSHmhLlj NICg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719443573; x=1720048373; 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=lLHv81AEnGkwECU4uLZq8QfOEslugkejr3sXxy06taU=; b=wTgGz2eSqAy2hImImXqxPZmArb4k2QQLU7QlXk2t+8VqpUPBs4KiunHbEazW/OOBT4 S+HrJk7+hBOcGhilA3lZPaWMfsL4ps9YpFQyrm8hcEHlG/hxVno1qrGd9CwjIESGfdPn 6DB4pkhXXNzIoEol3BvU5jgPEBjp0KPLsbMhPCMLRtQmeD0UZOfsYwZzSsMYar+FEqSw Da3T15ix2Z6FUmfCFhUL/om7gvsOurx3/uVFIVgNMOTUmYRUYKmmWO6YHHliyeW+risJ 0na7MOOCOHc4cITYhro6swgsLcESsEaQIc3FiHjjNgYxYJbHoUXmbwLA9Ql0KNLJbUq2 Y2nw== X-Gm-Message-State: AOJu0Ywb/vl6AmdM+Zgce2mlKjE7je31N8HhfzfU4tqbWTkoMoEtJn+o vGMdJ/7WewBcSU3idUg3Yd69eQaD+7xbtRyiUFtPNxe9tGF43Iikd38HxA== X-Received: by 2002:a17:903:230b:b0:1f9:c289:7378 with SMTP id d9443c01a7336-1fa23fe27damr140945985ad.33.1719443573109; Wed, 26 Jun 2024 16:12:53 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1faac8f25a1sm384995ad.73.2024.06.26.16.12.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jun 2024 16:12:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 26 Jun 2024 20:12:58 -0300 Message-ID: <20240626231259.10788-2-jamrial@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240626231259.10788-1-jamrial@gmail.com> References: <20240626231259.10788-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h266: move decoded_picture_hash to CBS SEI 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dlEABRIgdERx It's defined in H.274 as a common SEI message type and not in H.266 Signed-off-by: James Almer --- libavcodec/cbs_h2645.c | 12 ++++++------ libavcodec/cbs_h266.h | 10 ---------- libavcodec/cbs_h266_syntax_template.c | 28 --------------------------- libavcodec/cbs_sei.h | 10 ++++++++++ libavcodec/cbs_sei_syntax_template.c | 28 +++++++++++++++++++++++++++ 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index 283925f937..5ec781ddab 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -2134,6 +2134,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = { sizeof(SEIRawFramePackingArrangement), SEI_MESSAGE_RW(sei, frame_packing_arrangement), }, + { + SEI_TYPE_DECODED_PICTURE_HASH, + 0, 1, + sizeof(SEIRawDecodedPictureHash), + SEI_MESSAGE_RW(sei, decoded_picture_hash), + }, { SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME, 1, 0, @@ -2272,12 +2278,6 @@ static const SEIMessageTypeDescriptor cbs_sei_h265_types[] = { }; static const SEIMessageTypeDescriptor cbs_sei_h266_types[] = { - { - SEI_TYPE_DECODED_PICTURE_HASH, - 0, 1, - sizeof(H266RawSEIDecodedPictureHash), - SEI_MESSAGE_RW(h266, sei_decoded_picture_hash), - }, SEI_MESSAGE_TYPE_END }; diff --git a/libavcodec/cbs_h266.h b/libavcodec/cbs_h266.h index 5f12915b65..d24a8e9313 100644 --- a/libavcodec/cbs_h266.h +++ b/libavcodec/cbs_h266.h @@ -848,16 +848,6 @@ typedef struct H266RawSlice { int data_bit_start; } H266RawSlice; -typedef struct H266RawSEIDecodedPictureHash { - uint8_t dph_sei_hash_type; - uint8_t dph_sei_single_component_flag; - uint8_t dph_sei_picture_md5[3][16]; - uint16_t dph_sei_picture_crc[3]; - uint32_t dph_sei_picture_checksum[3]; - - uint8_t dph_sei_reserved_zero_7bits; -} H266RawSEIDecodedPictureHash; - typedef struct H266RawSEI { H266RawNALUnitHeader nal_unit_header; SEIRawMessageList message_list; diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c index 34b766c7af..9c37996947 100644 --- a/libavcodec/cbs_h266_syntax_template.c +++ b/libavcodec/cbs_h266_syntax_template.c @@ -3442,34 +3442,6 @@ static int FUNC(slice_header) (CodedBitstreamContext *ctx, RWContext *rw, return 0; } -SEI_FUNC(sei_decoded_picture_hash, (CodedBitstreamContext *ctx, - RWContext *rw, - H266RawSEIDecodedPictureHash *current, - SEIMessageState *unused)) -{ - int err, c_idx, i; - - HEADER("Decoded Picture Hash"); - - u(8, dph_sei_hash_type, 0, 2); - flag(dph_sei_single_component_flag); - ub(7, dph_sei_reserved_zero_7bits); - - for (c_idx = 0; c_idx < (current->dph_sei_single_component_flag ? 1 : 3); - c_idx++) { - if (current->dph_sei_hash_type == 0) { - for (i = 0; i < 16; i++) - us(8, dph_sei_picture_md5[c_idx][i], 0x00, 0xff, 2, c_idx, i); - } else if (current->dph_sei_hash_type == 1) { - us(16, dph_sei_picture_crc[c_idx], 0x0000, 0xffff, 1, c_idx); - } else if (current->dph_sei_hash_type == 2) { - us(32, dph_sei_picture_checksum[c_idx], 0x00000000, 0xffffffff, 1, - c_idx); - } - } - return 0; -} - static int FUNC(sei) (CodedBitstreamContext *ctx, RWContext *rw, H266RawSEI *current, int prefix) { diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h index cc7d6f797d..15ef3415ab 100644 --- a/libavcodec/cbs_sei.h +++ b/libavcodec/cbs_sei.h @@ -63,6 +63,16 @@ typedef struct SEIRawFramePackingArrangement { uint8_t fp_upsampled_aspect_ratio_flag; } SEIRawFramePackingArrangement; +typedef struct SEIRawDecodedPictureHash { + uint8_t dph_sei_hash_type; + uint8_t dph_sei_single_component_flag; + uint8_t dph_sei_picture_md5[3][16]; + uint16_t dph_sei_picture_crc[3]; + uint32_t dph_sei_picture_checksum[3]; + + uint8_t dph_sei_reserved_zero_7bits; +} SEIRawDecodedPictureHash; + typedef struct SEIRawMasteringDisplayColourVolume { uint16_t display_primaries_x[3]; uint16_t display_primaries_y[3]; diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c index 03ef9ab473..0205bb47aa 100644 --- a/libavcodec/cbs_sei_syntax_template.c +++ b/libavcodec/cbs_sei_syntax_template.c @@ -128,6 +128,34 @@ SEI_FUNC(frame_packing_arrangement, (CodedBitstreamContext *ctx, RWContext *rw, return 0; } +SEI_FUNC(decoded_picture_hash, (CodedBitstreamContext *ctx, + RWContext *rw, + SEIRawDecodedPictureHash *current, + SEIMessageState *unused)) +{ + int err, c_idx, i; + + HEADER("Decoded Picture Hash"); + + u(8, dph_sei_hash_type, 0, 2); + flag(dph_sei_single_component_flag); + ub(7, dph_sei_reserved_zero_7bits); + + for (c_idx = 0; c_idx < (current->dph_sei_single_component_flag ? 1 : 3); + c_idx++) { + if (current->dph_sei_hash_type == 0) { + for (i = 0; i < 16; i++) + us(8, dph_sei_picture_md5[c_idx][i], 0x00, 0xff, 2, c_idx, i); + } else if (current->dph_sei_hash_type == 1) { + us(16, dph_sei_picture_crc[c_idx], 0x0000, 0xffff, 1, c_idx); + } else if (current->dph_sei_hash_type == 2) { + us(32, dph_sei_picture_checksum[c_idx], 0x00000000, 0xffffffff, 1, + c_idx); + } + } + return 0; +} + SEI_FUNC(mastering_display_colour_volume, (CodedBitstreamContext *ctx, RWContext *rw, SEIRawMasteringDisplayColourVolume *current,