From patchwork Tue Mar 21 15:01:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Siedel X-Patchwork-Id: 34902 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2659818pzb; Tue, 21 Mar 2023 08:01:49 -0700 (PDT) X-Google-Smtp-Source: AK7set/YJ/z5MD7et+ycZuN6M6nvGgT92kjaCX4lERsEmUOLuqjOgGhcc5UWKD0k4UiB32kMASLE X-Received: by 2002:a05:6402:658:b0:4fd:236f:7d4d with SMTP id u24-20020a056402065800b004fd236f7d4dmr3338402edx.18.1679410908947; Tue, 21 Mar 2023 08:01:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679410908; cv=none; d=google.com; s=arc-20160816; b=vcmzo7MfX+WYUldrQ5Y25GCcL/GeVqnm+qI8bV3ct8KKQ571zVQjEmTKpv3i7jXUIU D7JSR4qzp/8HNb4D00A/lP7+HkZV3tGKdnbWGL8ADP0VzUzEiwvorHLqA2Qo5/M9Gytq dtMGR8+LOeYjvGJHZIib+B00pp45Ie/KvA4cs1d3I5OXeu0IJj911FGUFYY2OBz3oK42 cRD+J2d+tKMHxNz5Pp7G3JSispNIlrBSdZKu68ceiD67WUnbtyqV/CJkS5miRRdB/bDl V/+z2GNA6dwVmMU/GAUPpWn0uISvlbv7JzNICVim2U0vSD0QyuWq8RhSkHliq/0RHSca m1yw== 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=w5tdneV1pUFLBHo6j03YbK+AFxeSpYD6Ilcj7VCNvTQ=; b=YHfWjQEALO0sXxhDOzUevzh6N8ZB9vXUXdH1sUv9PfS7rYLYp06ZH6VbO9sfDTldHb ctfiGXQi4P4WifAane3u6h/AAmaCeI2kx65gxGZAlcT5AsxdVim4Ch0BXF3EwawPw4zH Xqn94ADqPUx6OZQq8ZjPQDuPrZ0DTY+ds7D6G4aZA23JWP+bHdAVAt7wr3uBSgZtGMdV XD93p/onpuwv4OzRRS2ehAQWvjSKoZmF2wkskJDH9/zUhPe6sA8yaHa418zYUOLjK9y8 AwsezCqt4jMEax7Jx6wixVrB0eJ5tD4Ueg3bSonBwRcYUmP7zWjS7hpWklnH8IASXkUo FuXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@spin-digital-com.20210112.gappssmtp.com header.s=20210112 header.b=kFb1mlx+; 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 bk16-20020a170906b0d000b00926738ca7a8si12244626ejb.391.2023.03.21.08.01.47; Tue, 21 Mar 2023 08:01:48 -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=@spin-digital-com.20210112.gappssmtp.com header.s=20210112 header.b=kFb1mlx+; 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 2A73668C540; Tue, 21 Mar 2023 17:01:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B603568C53F for ; Tue, 21 Mar 2023 17:01:37 +0200 (EET) Received: by mail-ed1-f42.google.com with SMTP id t5so24056987edd.7 for ; Tue, 21 Mar 2023 08:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; t=1679410897; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=EzblV982TBL4+5XFSbEM5nRWuxV3ygkJyJ+9YIu+FsU=; b=kFb1mlx+pJu6OZ/QjDfSHhwW3/l3Zv0SR/HFaAA1g1jC1xL+oJxRugPibuAanHFnR/ ZZwif7l/PCzZUG6cspFzJann0egRM5FdJer1OWgFz8Q/6gd1OdMtSmgy0fPOccH2ebCV PfthCgJUaXGl+Kn8leEiB4IBbn1j8u32DUCV6e1U5rd4SblW4CdIVLTH35aaeat2o46P 8mYrQIwKUWj4ra2fv5nstxXJVqV+EM+jGRpcL1r829ogrZm2Sxesj4VbyhUFPYUtVHzN uMvfoOsowonvmBW6RXxubiiojz8u/fjPPxN5/efE4EEJZS+sN1TO/0Vt4vWiF/wnxfrr ciyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679410897; 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=EzblV982TBL4+5XFSbEM5nRWuxV3ygkJyJ+9YIu+FsU=; b=aDu0IH0H2wYer+8Zg6AQS1eYc59sRkRcpYDX8sd1K0oZlVICPu9WbnoLsZCjrZT/Zw qm59uA/n6CGeefe2J5oSIRHAMaK2QK1u1sUALKCXimctE3MXf+cReuQZBmKFvYatV1QS fGsje+wk9l3JC0eSKAJYJjDhSUs+fd2TYl6rlLCPB4BRE21Mnvo9Wnk0ZLyg2OcdwnfG 6VXAz/Fbsiks3sT+zeFqkeSwaBv9acRZKijsNF8LFbsq1uy67Ely/UEujBMmPZ+w7DUO ETpvkissPtDoFKeJ/I3Rp1K1CcoAcmkB5bdSpG2JRLPsOlKtoi7NSw5DzwGX/ujZdmmp 6oVQ== X-Gm-Message-State: AO0yUKUcoZsytZ7LQHeIqb8GJXXygtcq7K9xQcyHayO6DkwnThCxekbb TDP54QErpMopcim/L2FM3/FiC3NnusWm3KfU1C4= X-Received: by 2002:aa7:d61a:0:b0:4f9:a97d:469b with SMTP id c26-20020aa7d61a000000b004f9a97d469bmr3542667edr.10.1679410896648; Tue, 21 Mar 2023 08:01:36 -0700 (PDT) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id x93-20020a50bae6000000b004fbf6b35a56sm6405817ede.76.2023.03.21.08.01.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 08:01:36 -0700 (PDT) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 16:01:13 +0100 Message-Id: <20230321150124.21999-1-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v7 00/11] Add support for H266/VVC 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: mGbySMc9kv4A This patch set adds H266/VVC support. This includes parsing, muxing, demuxing, decoding and encoding. Decoding is done using the external library VVdeC (https://github.com/fraunhoferhhi/vvdec.git) and can be enabled with --enable-libvvdec. Encoding is done using the external library VVenC (https://github.com/fraunhoferhhi/vvenc.git) and can be enabled with --enable-libvvenc. For conformance testing, the following JVET bitstreams can be used: https://www.itu.int/wftp3/av-arch/jvet-site/bitstream_exchange/VVC/draft_conformance/draft6/ DVB test streams can be found here: https://dvb.org/specifications/verification-validation/vvc-test-content/ All JVET conformance bitstreams that are supported by VVdeC can be decoded. Pallete mode and multi-layer streams are unsupported. The DVB MP4 and TS reference files can be decoded as well. Changes since v6: general: - bugfix in movenc.c mov_write_vvcc_tag - set array_completness for vvc1 not vvi1 - h266.c add VVC_DCI_NUT for array_completness as well - libvvdec.c add support for FF_PROFILE_VVC_MAIN_10_444 - cbs_h265.c fix parse mp4/vvcc header properly PATCH 2/11 - cbs_h266_syntax_template: bugfix usage of AV_CEIL_RSHIFT() (h266_ceil was replaced by AV_CEIL_RSHIFT(a,b) in v6, but 'b' must be log2 ) - cbs_h266_syntax_template: bugfix tile parsing - cbs_h265.c fix parsing of vvcc box in mp4 header properly PATCH 6/11 - h266.c::vvcc_array_add_nal_unit() array_completeness fix (add VVC_DCI_NUT) PATCH 7/11 - movenc.c::mov_write_vvcc_tag() array_completeness must be set for vvc1 not vvi1 PATCH 8/11 - libvvdec.c bugfix add support for AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY10 - libvvdec.c add support for FF_PROFILE_VVC_MAIN_10_444 (yuv422p, yuv444p, yuv422p10, yuv444p10) - libvvdec.c remove double check for correct pix_fmt in ff_vvdec_decode_frame (already checked in ff_vvdec_set_pix_fmt) - h266_parse_extradata.c small bugfix (num_sublayers was parsed twice, now only at correct position) + cleanup PATCH 9/11 - configure fetch master due to changes for libvpx PATCH 11/11 - increase LIBAVCODEC_VERSION_MINOR to 7 Nuo Mi (4): avcodec: add enum types for H266/VVC avcodec: add cbs for H266/VVC avcodec: add bitstream parser for H266/VVC avcodec: add h266_metadata_bsf support for H266/VVC Thomas Siedel (7): avcodec: add MP4 to annexb support for H266/VVC avformat: add demuxer and probe support for H266/VVC avformat: add muxer support for H266/VVC avcodec: add external decoder libvvdec for H266/VVC avcodec: add external encoder libvvenc for H266/VVC avformat: add ts stream types for H266/VVC avcodec: increase minor version for H266/VVC configure | 16 +- libavcodec/Makefile | 6 + libavcodec/allcodecs.c | 2 + libavcodec/bitstream_filters.c | 2 + libavcodec/cbs.c | 6 + libavcodec/cbs_h2645.c | 435 +++- libavcodec/cbs_h266.h | 793 +++++++ libavcodec/cbs_h266_syntax_template.c | 3116 +++++++++++++++++++++++++ libavcodec/cbs_internal.h | 1 + libavcodec/cbs_sei.c | 29 + libavcodec/h2645_parse.c | 71 +- libavcodec/h266.h | 142 ++ libavcodec/h266_metadata_bsf.c | 147 ++ libavcodec/h266_mp4toannexb_bsf.c | 329 +++ libavcodec/h266_paramset.c | 1005 ++++++++ libavcodec/h266_paramset.h | 307 +++ libavcodec/h266_parse_extradata.c | 246 ++ libavcodec/h266_parse_extradata.h | 36 + libavcodec/h266_parser.c | 601 +++++ libavcodec/libvvdec.c | 563 +++++ libavcodec/libvvenc.c | 469 ++++ libavcodec/parsers.c | 1 + libavcodec/version.h | 2 +- libavformat/Makefile | 8 +- libavformat/allformats.c | 2 + libavformat/demux.c | 7 +- libavformat/h266.c | 998 ++++++++ libavformat/h266.h | 99 + libavformat/h266dec.c | 61 + libavformat/isom.c | 1 + libavformat/isom_tags.c | 3 + libavformat/mov.c | 6 + libavformat/movenc.c | 41 +- libavformat/mpeg.c | 3 + libavformat/mpeg.h | 1 + libavformat/mpegts.c | 2 + libavformat/mpegts.h | 1 + libavformat/mpegtsenc.c | 65 + libavformat/rawenc.c | 23 + 39 files changed, 9634 insertions(+), 12 deletions(-) create mode 100644 libavcodec/cbs_h266.h create mode 100644 libavcodec/cbs_h266_syntax_template.c create mode 100644 libavcodec/h266.h create mode 100644 libavcodec/h266_metadata_bsf.c create mode 100644 libavcodec/h266_mp4toannexb_bsf.c create mode 100644 libavcodec/h266_paramset.c create mode 100644 libavcodec/h266_paramset.h create mode 100644 libavcodec/h266_parse_extradata.c create mode 100644 libavcodec/h266_parse_extradata.h create mode 100644 libavcodec/h266_parser.c create mode 100644 libavcodec/libvvdec.c create mode 100644 libavcodec/libvvenc.c create mode 100644 libavformat/h266.c create mode 100644 libavformat/h266.h create mode 100644 libavformat/h266dec.c