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 2F8814386F for ; Thu, 1 Sep 2022 13:27:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0D9D468BA6B; Thu, 1 Sep 2022 16:27:42 +0300 (EEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F06868B5E6 for ; Thu, 1 Sep 2022 16:27:36 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20220901132735euoutp02e98651587f3303647d525d52172d8d33~Qv4h3QO0p1120011200euoutp02P for ; Thu, 1 Sep 2022 13:27:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20220901132735euoutp02e98651587f3303647d525d52172d8d33~Qv4h3QO0p1120011200euoutp02P DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1662038855; bh=o5rZIpBtebNuJ61NSktt2aJ3g8gMNFoVm5KtTpXp/qI=; h=From:To:Cc:Subject:Date:References:From; b=jtVg977vhQfBAqBTGCf7+Sm/zBCQjv5YgVjZQ+4K0wFYWRKYmrUvEhDxOFffSU2rk L+trhgwVZuPurfXY67MZQN6uU+bro7oaU+VNnRfW79Rcm/2y7LEcEM3/vx8rIJh/4u EozXg4sQKoJ9LELFSAQpjY8fyZJNC23amqJoEeO0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20220901132734eucas1p25cc7b6dce5455057e465c7b8efb0da31~Qv4hcOJgi2425824258eucas1p2c; Thu, 1 Sep 2022 13:27:34 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 5D.E0.29727.643B0136; Thu, 1 Sep 2022 14:27:34 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20220901132734eucas1p2474259f4bb3937c3034660afcb7b7952~Qv4hAZuHV2019320193eucas1p2g; Thu, 1 Sep 2022 13:27:34 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220901132734eusmtrp19c3bf5f8dee48613341d51d1f4a48749~Qv4g-1BaD1391413914eusmtrp1Y; Thu, 1 Sep 2022 13:27:34 +0000 (GMT) X-AuditID: cbfec7f2-21dff7000001741f-5b-6310b346a421 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id F1.5E.07473.643B0136; Thu, 1 Sep 2022 14:27:34 +0100 (BST) Received: from AMDN3260.EU.corp.samsungelectronics.net (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220901132733eusmtip2733e8f8d87df5f6876a6c29ec28151c7~Qv4gjdi_u2605026050eusmtip2Y; Thu, 1 Sep 2022 13:27:33 +0000 (GMT) From: Dawid Kozinski To: d.frankiewic@samsung.com, ffmpeg-devel@ffmpeg.org Date: Thu, 1 Sep 2022 15:27:19 +0200 Message-Id: <20220901132719.553-1-d.kozinski@samsung.com> X-Mailer: git-send-email 2.24.0.windows.2 MIME-Version: 1.0 X-Unsent: 1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87pumwWSDY7OMrb4cu0Ls8XKb79Z LL59OsPswOzxZ9FmFo++LasYA5iiuGxSUnMyy1KL9O0SuDJmPpnPWDBHq+LYvnPMDYwf5bsY OTkkBEwkHm9cwNzFyMUhJLCCUeLnsg9sEM4XRolZjx9DOZ8ZJVrXzWaCa/kwAaplOaPE8ztb mCCcdiaJ9RdWs4FUsQnoSrz88AisQ0TAVOJk816wOLOAtsS6u9/BbGEBD4nlbT/YQWwWAVWJ JYc3M4LYvAKWEhf3/GSB2KYpMXtCOzNEXFDi5MwnUHFuiXWzLrFCzJSXaN46G+wiCYGf7BLt M2YALeYAclwkHjwNgagXlnh1fAs7hC0jcXpyDwtESbHEoX4HCLNG4tCPdIgKa4m3jccZQcLM QBes36UPEXaUeLX2DytENZ/EjbeCEPv5JCZtm84MEeaV6GgTgjBVJPo6xSAapSSeLpvDDGF7 SDy+9IVpAqPiLCRPzULyyCyEtQsYmVcxiqeWFuempxYb5qWW6xUn5haX5qXrJefnbmIEpofT /45/2sE499VHvUOMTByMhxglOJiVRHi/n+NJFuJNSaysSi3Kjy8qzUktPsQozcGiJM6bnLkh UUggPbEkNTs1tSC1CCbLxMEp1cA0b674cdU/z5w8ozKzv7Lc/Nq+UOtUZAU3QyT/zLsxd7ts 1Z/X2+78k/7xzUzBVGGhwpR+1djLEbbH1s6IYLYW2eO/pSWMT+Vh8q9rXW9yrFgUbpR/DUvp TXY9//vDfu2Pu9+3B3TNfp+wOCT2ncD+2l37a84FtsjMmf6uU36hnkJk41KbjZPXh69x2puo Zi5zI3vNSutFPa7ti7ZyMq3rv2K0RLxzUXiBVUCD0/P9ha8+n37It/DtXo91c1UULtcJ+HBE BcaJbNxyKMhY6JkBR5Ivl/n96/27Qla29+6PXDO3yEckfspDJnnt2wv3yUj6fzNTN2piVztp 86RRr85hrfFbY9a/R9cq1DCte6vEUpyRaKjFXFScCAAhaJdQfgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsVy+t/xe7pumwWSDb6dFbH4cu0Ls8XKb79Z LL59OsPswOzxZ9FmFo++LasYA5ii9GyK8ktLUhUy8otLbJWiDS2M9AwtLfSMTCz1DI3NY62M TJX07WxSUnMyy1KL9O0S9DJmPpnPWDBHq+LYvnPMDYwf5bsYOTkkBEwkHn+YwNzFyMUhJLCU UWLh9KdsEAkpiaVLFzFC2MISf651sUEUtTJJbFszkwUkwSagK/HywyMmEFtEwFzi4rpbYA3M AtoS6+5+BxskLOAhsbztBzuIzSKgKrHk8GawGl4BS4mLe36yQCzQlJg9oZ0ZIi4ocXLmE6g4 t8S6WZdYIWbKSzRvnc08gZF/FpKyWUhSCxiZVjGKpJYW56bnFhvqFSfmFpfmpesl5+duYgQG 7rZjPzfvYJz36qPeIUYmDsZDjBIczEoivN/P8SQL8aYkVlalFuXHF5XmpBYfYjQFunUis5Ro cj4wdvJK4g3NDEwNTcwsDUwtzYyVxHk9CzoShQTSE0tSs1NTC1KLYPqYODilGpjsXx9+9CZ5 35tzHQ8Xrdhi+0R+v5DaL7lmvUs8EybOvyr9c7OO7wy99UXVhn5OMzp86z7L5Dulisu3Xqo/ /+PsASGHYFY1r6X7bN7OZ41qzeGzdCitfDTXPOubf/g/9gmcfVwMK3fPjTfzUboyU67eRfOj qL+Db7GC34LuvTUMzHsuyK7ru59w0H7ZPsvwa7uctwt3P4+qvz675+t1kwuyq6WVvJk0JHXX nnB2nBgkdfvq5hThn+EWf2/w7Ls/ZbfYYae4c6eOuuUIfHu20dPkf3TxF4Gwi3JBvhEO0tm7 +h+tUTq4a4fTk5kvT5iE889Z9/Nmbt/y6yquiWvcV52boKL2XuhBYwRfwT5J5QQlluKMREMt 5qLiRAAd6z4d5QIAAA== X-CMS-MailID: 20220901132734eucas1p2474259f4bb3937c3034660afcb7b7952 X-Msg-Generator: CA X-RootMTR: 20220901132734eucas1p2474259f4bb3937c3034660afcb7b7952 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220901132734eucas1p2474259f4bb3937c3034660afcb7b7952 References: Subject: [FFmpeg-devel] [PATCH v11 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 Cc: Dawid Kozinski 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 | 124 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 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..ffb7449c4d --- /dev/null +++ b/libavformat/evcdec.c @@ -0,0 +1,124 @@ +/* + * 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 "libavcodec/evc.h" + +#include "rawdec.h" +#include "avformat.h" + +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) { // Cannot get bitstream information. Malformed bitstream. + 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_SPS_NUT) + ev->got_sps++; + else if (nalu_type == EVC_PPS_NUT) + ev->got_pps++; + else if (nalu_type == EVC_IDR_NUT ) + ev->got_idr++; + else if (nalu_type == EVC_NOIDR_NUT) + 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".