From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTP id 1B45E4408D
	for <ffmpegdev@gitmailbox.com>; 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 <ffmpeg-devel@ffmpeg.org>; 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 <ffmpeg-devel@ffmpeg.org>; 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 <ffmpeg-devel@ffmpeg.org>; 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 <ffmpeg-devel@ffmpeg.org>; 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 <ffmpeg-devel@ffmpeg.org>; 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 <ffmpeg-devel@ffmpeg.org>; Thu, 25 Aug 2022 13:35:12 +0000 (GMT)
From: "Dawid Kozinski" <d.kozinski@samsung.com>
To: <ffmpeg-devel@ffmpeg.org>
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: <CGME20220825133513eucas1p1edf35903e69b0ce6197352b587d834a4@eucas1p1.samsung.com>
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 <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/014b01d8b887$80de7cf0$829b76d0$@samsung.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

- Provided AVInputFormat structure describing EVC input format (ff_evc_demuxer)

Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com>
---
 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 <d.kozinski@samsung.com>
+ *
+ * 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; i<EVC_NAL_UNIT_LENGTH_BYTE; i++) {
+            t = (t << 8) | p[i];
+        }
+
+        nalu_len = t;
+        if(nalu_len == 0) {
+            av_log(NULL, AV_LOG_ERROR, "Invalid bitstream size!\n");
+            return 0;
+        }
+    }
+
+    return nalu_len;
+}
+
+static int parse_nal_units(const AVProbeData *p, EVCParserContext *ev)
+{
+    int nalu_type;
+    size_t nalu_size;
+    unsigned char *bits = (unsigned char *)p->buf;
+    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".