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 1B45E4408D for ; Thu, 25 Aug 2022 13:35:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3EFFD68BA2C; Thu, 25 Aug 2022 16:35:21 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 628D368BA1B for ; Thu, 25 Aug 2022 16:35:14 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220825133513euoutp01b95fae8f14cfd378326d822df2f58d24~OmeNF6n3n2180521805euoutp01c for ; Thu, 25 Aug 2022 13:35:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220825133513euoutp01b95fae8f14cfd378326d822df2f58d24~OmeNF6n3n2180521805euoutp01c DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1661434513; bh=2s8hzJJNeum7aEOmSdmvD6EeHANRaLZSDyn0FBc75/4=; h=From:To:Subject:Date:References:From; b=tIIH3BKMb8Z6Eins0dEyKNKiZhDoeRiBZSGGOK81uugnFQqCmWrG+bd+i3iYleQKm uKZDP5hJTqk00EdBfDQ2VVp1+OGKNnEvHLvbmc6RJ6jPxgyFvua+FVQSeYrtk7n47B Kf0WsPk0HAWsJV7ej51ezatksJvX3ojtdqje0yU0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20220825133513eucas1p242edd25f42eac51e0fcbede1a6d71ea0~OmeMw2My40372603726eucas1p2I for ; Thu, 25 Aug 2022 13:35:13 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id AF.77.29727.19A77036; Thu, 25 Aug 2022 14:35:13 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220825133513eucas1p1edf35903e69b0ce6197352b587d834a4~OmeMXu1F_0257702577eucas1p1f for ; Thu, 25 Aug 2022 13:35:13 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220825133513eusmtrp18ccd09196d6761b8f4e2a9ea514e8ec4~OmeMXLIqH1642116421eusmtrp1K for ; Thu, 25 Aug 2022 13:35:13 +0000 (GMT) X-AuditID: cbfec7f2-205ff7000001741f-f2-63077a91f472 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 65.93.07473.09A77036; Thu, 25 Aug 2022 14:35:13 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20220825133512eusmtip198746505556408dc1d9de14f00e74a4c~OmeMFKQ4J1662916629eusmtip1J for ; Thu, 25 Aug 2022 13:35:12 +0000 (GMT) From: "Dawid Kozinski" To: Date: Thu, 25 Aug 2022 15:35:12 +0200 Message-ID: <014b01d8b887$80de7cf0$829b76d0$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: Adi4dtlfidmNtke3RsOeM4MIN7XElQ== Content-Language: pl X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOIsWRmVeSWpSXmKPExsWy7djPc7oTq9iTDbrPKFl8+3SG2YHR48+i zSwBjFFcNimpOZllqUX6dglcGVu3H2QumG1UcX/XXqYGxumqXYycHBICJhLvNu1k72Lk4hAS WMEosXfeLzYIZxKTxNv9f6GciUwSf252McG0nP13mR3EFhJYziixa6k1RFEbk0T7gTnMIAk2 AX2JmYs+sYHYIgKyEqv/TQGzhQUCJZ41rWQFsVkEVCU+nboDVs8rYCnR9P00lC0ocXLmExYQ m1lAXmL7W4iZEgIKEj+fLmOFmKkn0flpJTNEjYjEjUctjBA1X9klFp1xgbBdJA5vbmKDsIUl Xh3fwg5hy0icntwDNJ8DyC6WONTvAGHWSBz6kQ5RYS3xtvE4I0iYWUBTYv0ufYiwo8SKxxvY Iar5JG68FYTYzycxadt0Zogwr0RHmxCEqSLR1ykG0Sgl8XQZzBceEo9v/GSbwKg4C8mzs5A8 OwvJU7MQTljAyLKKUTy1tDg3PbXYMC+1XK84Mbe4NC9dLzk/dxMjMC2c/nf80w7Gua8+6h1i ZOJgPMQowcGsJMJrdYwlWYg3JbGyKrUoP76oNCe1+BCjNAeLkjhvcuaGRCGB9MSS1OzU1ILU IpgsEwenVANTq3nb8e/bdXwCIjgStt1w+5a5Uss/TsPXxrtGda637GNr/aMX1vRMesMQ/Hhx yi4mDbs/yyLWeNlorPo992rh8dZU39u7HNcvi5tgYFZ2/YVxtqlgzZv0uYyCz9gsFepO7hJf oX3CoJ335t2l/jnLFmbe3RO88eC/20HhHZr6r19P373+0pI3kiK3pD1C1a88Os9ecCTIxPDU suSpB8+7nkj0d84/9etC4/c9V1i5rsxtZt96ZEbjXaalwsarznEnlRXsUrm+wuq9d4rA7mVl Wuv2h25amMqTtCpqW5LWmvBf0S5LPz9xK1zp+F75QpVLl4YY/5YHZcybSksXS7wJfronkqXs 7veFDvGeD5sslViKMxINtZiLihMBA40/c3oDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGLMWRmVeSWpSXmKPExsVy+t/xu7oTq9iTDY7tZLL49ukMswOjx59F m1kCGKP0bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0 MrZuP8hcMNuo4v6uvUwNjNNVuxg5OSQETCTO/rvM3sXIxSEksJRR4uuneUwQCSmJpUsXMULY whJ/rnWxgdhCAi1MEvvPJYDYbAL6EjMXfQKLiwjISqz+NwXMFhbwl1h64hbYHBYBVYlPp+4w g9i8ApYSTd9PQ9mCEidnPmEBsZkFtCWe3nwKZctLbH87hxlir4LEz6fLWCHm60l0flrJDFEj InHjUQvjBEaBWUhGzUIyahaSUbOQtCxgZFnFKJJaWpybnltsqFecmFtcmpeul5yfu4kRGODb jv3cvINx3quPeocYmTgYDzFKcDArifBaHWNJFuJNSaysSi3Kjy8qzUktPsRoCvTbRGYp0eR8 YIzllcQbmhmYGpqYWRqYWpoZK4nzehZ0JAoJpCeWpGanphakFsH0MXFwSjUwNffsNnjHmzd/ 3qQri8/6tGackXs0L4wv1HxSGbOtRFRogE797gdrwo3cd9ulbvlxf+eba58/7ZDZ0ya/LfiQ QM82gfJMF65dBUe2PXM4ms4Wf6HESYbTsMzmyJP3n85ZSBRtmb9b6ptGbsJ+0fgDJ/vZzU49 2MLcLWq84HrGvflyj0+U/prqNv2byTu9HRrsn95z2ejVRv6YobxnSplDe2N2cOQBzQt3n+3J dZ/WWJHVWPx+qdDyA2lz7O/JSKR7PTy7+ejUS3YJfrlubqwbHsZ/Z3nFf25d/d2KOSkrpA7M cBCZL336Nn802+u952fMZ1B60/fit9HuOV8ZU8XeRVWvep7rdE3L1d5syplXdkosxRmJhlrM RcWJABD4sin5AgAA X-CMS-MailID: 20220825133513eucas1p1edf35903e69b0ce6197352b587d834a4 X-Msg-Generator: CA X-RootMTR: 20220825133513eucas1p1edf35903e69b0ce6197352b587d834a4 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220825133513eucas1p1edf35903e69b0ce6197352b587d834a4 References: Subject: [FFmpeg-devel] [FFmpeg-devel v10 4/9] Added demuxer to handle reading EVC video files 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-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: - Provided AVInputFormat structure describing EVC input format (ff_evc_demuxer) Signed-off-by: Dawid Kozinski --- libavformat/Makefile | 1 + libavformat/allformats.c | 1 + libavformat/evcdec.c | 142 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 libavformat/evcdec.c diff --git a/libavformat/Makefile b/libavformat/Makefile index 7e3f0e6794..a320cac22b 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -249,6 +249,7 @@ OBJS-$(CONFIG_HCOM_DEMUXER) += hcom.o pcm.o OBJS-$(CONFIG_HDS_MUXER) += hdsenc.o OBJS-$(CONFIG_HEVC_DEMUXER) += hevcdec.o rawdec.o OBJS-$(CONFIG_HEVC_MUXER) += rawenc.o +OBJS-$(CONFIG_EVC_DEMUXER) += evcdec.o rawdec.o OBJS-$(CONFIG_EVC_MUXER) += rawenc.o OBJS-$(CONFIG_HLS_DEMUXER) += hls.o hls_sample_encryption.o OBJS-$(CONFIG_HLS_MUXER) += hlsenc.o hlsplaylist.o avc.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 31508b69f0..dfce49d149 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -148,6 +148,7 @@ extern const AVInputFormat ff_ea_cdata_demuxer; extern const AVInputFormat ff_eac3_demuxer; extern const AVOutputFormat ff_eac3_muxer; extern const AVInputFormat ff_epaf_demuxer; +extern const AVInputFormat ff_evc_demuxer; extern const AVOutputFormat ff_evc_muxer; extern const AVOutputFormat ff_f4v_muxer; extern const AVInputFormat ff_ffmetadata_demuxer; diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c new file mode 100644 index 0000000000..58dc671d24 --- /dev/null +++ b/libavformat/evcdec.c @@ -0,0 +1,142 @@ +/* + * RAW EVC video demuxer + * + * Copyright (c) 2021 Dawid Kozinski + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavcodec/get_bits.h" +#include "libavcodec/golomb.h" +#include "libavcodec/internal.h" + +#include "rawdec.h" +#include "avformat.h" + +// The length field that indicates the length in bytes of the following NAL unit is configured to be of 4 bytes +#define EVC_NAL_UNIT_LENGTH_BYTE (4) /* byte */ + +#define EVC_NAL_HEADER_SIZE (2) /* byte */ +#define MAX_SPS_CNT (16) /* defined value in EVC standard */ + +// NALU types +// @see ISO_IEC_23094-1_2020 7.4.2.2 NAL unit header semantics +// +#define EVC_NUT_NONIDR (0) /* Coded slice of a non-IDR picture */ +#define EVC_NUT_IDR (1) /* Coded slice of an IDR picture */ +#define EVC_NUT_SPS (24) /* Sequence parameter set */ +#define EVC_NUT_PPS (25) /* Picture paremeter set */ +#define EVC_NUT_APS (26) /* Adaptation parameter set */ +#define EVC_NUT_FD (27) /* Filler data */ +#define EVC_NUT_SEI (28) /* Supplemental enhancement information */ + +typedef struct EVCParserContext { + int got_sps; + int got_pps; + int got_idr; + int got_nonidr; +} EVCParserContext; + +static int get_nalu_type(const uint8_t *bits, int bits_size) +{ + int unit_type_plus1 = 0; + + if(bits_size >= EVC_NAL_HEADER_SIZE) { + unsigned char *p = (unsigned char *)bits; + // forbidden_zero_bit + if ((p[0] & 0x80) != 0) { + av_log(NULL, AV_LOG_ERROR, "Cannot get bitstream information. Malformed bitstream.\n"); + return -1; + } + + // nal_unit_type + unit_type_plus1 = (p[0] >> 1) & 0x3F; + } + + return unit_type_plus1 - 1; +} + +static uint32_t read_nal_unit_length(const uint8_t *bits, int bits_size) +{ + uint32_t nalu_len = 0; + + if(bits_size >= EVC_NAL_UNIT_LENGTH_BYTE) { + + int t = 0; + unsigned char *p = (unsigned char *)bits; + + for(int i=0; ibuf; + int bytes_to_read = p->buf_size; + + while(bytes_to_read > EVC_NAL_UNIT_LENGTH_BYTE) { + + nalu_size = read_nal_unit_length(bits, EVC_NAL_UNIT_LENGTH_BYTE); + if(nalu_size == 0) break; + + bits += EVC_NAL_UNIT_LENGTH_BYTE; + bytes_to_read -= EVC_NAL_UNIT_LENGTH_BYTE; + + if(bytes_to_read < nalu_size) break; + + nalu_type = get_nalu_type(bits, bytes_to_read); + + bits += nalu_size; + bytes_to_read -= nalu_size; + + if (nalu_type == EVC_NUT_SPS) + ev->got_sps++; + else if (nalu_type == EVC_NUT_PPS) + ev->got_pps++; + else if (nalu_type == EVC_NUT_IDR ) + ev->got_idr++; + else if (nalu_type == EVC_NUT_NONIDR) + ev->got_nonidr++; + } + + return 0; +} + +static int evc_probe(const AVProbeData *p) +{ + EVCParserContext ev = {0}; + int ret = parse_nal_units(p, &ev); + + if (ret == 0 && ev.got_sps && ev.got_pps && (ev.got_idr || ev.got_nonidr > 3)) + return AVPROBE_SCORE_EXTENSION + 1; // 1 more than .mpg + + return 0; +} + +FF_DEF_RAWVIDEO_DEMUXER(evc, "raw EVC video", evc_probe, "evc", AV_CODEC_ID_EVC) -- 2.17.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".