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 87E1B44DD0 for ; Wed, 26 Jul 2023 09:28:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8785868C938; Wed, 26 Jul 2023 12:28:07 +0300 (EEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10olkn2051.outbound.protection.outlook.com [40.92.42.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 12D0E68BF90 for ; Wed, 26 Jul 2023 12:28:05 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IPOb1+Vux2Lq0zih78zLHQB3/fF72q5t4KEpOqpMyecmHlrAkBZk+WCvLsLdBcx8SgZqUlCV25ekMXNlsOTufDqruuUlvSk3mg/RDLN1+CWqBbcNsryon29O1w0494V5wcx+olkT2ezBoTy/pbqb+0ewHCg8TCtZXOvsinTI5Ghd5vuEHt7HB06LQCGrFL8nn5tGT14ZNFwHPTkeOU5FytfGFU7iaz1sWtJP4KIz5QvomtbvQgsXNCWcXS3GRBYIrhDFaq/Kp2mzQcKnxS5scOS6Chvq+PrMssOFZiu4H8xB6uJ3AERdLkEJPJoSRMNv8J++27y1Df1rdviw0lpCxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vxWpnJKR0WessuW8bqhR3xr1vAVi/zn87rAXjkno68M=; b=LTzJWm1VWBrpkP89217Y+18mb8KsZcAmuMYEz0if6aNvppt6TF4GBODWwbRM0BL5HG3imUpa3nXwv3ospv/2HWBOXYs7VD79TKKw2C4PStbhitIuvRuE/16a0xncHxMzC3dMi2ArAWlPz75/g88nbNJOoKUuT0sCz3qLo1BMFCpo4zqiQba40oOcwljMYcQ9wzFW/XI/tG4RyC9h22V+6jtCV5ucxrq8TV19+UiWJ8/zqRCEHZOfq9jtOmSjHnqyFxUEl47wfCieZ7gq3T5Vg2+HxTfvmZENP4UhKeIFtjiSCXlhpHBa826JveFQYi5tPLhT03ilUnf56jwlR9i5eQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vxWpnJKR0WessuW8bqhR3xr1vAVi/zn87rAXjkno68M=; b=Nu76SqfMIg2rm7sPu6BRgUQEGnGRWHuYE7iKQJEIvaBMo5ZCa0/UUUmDgTnBdVN2L1RQbQLdl7/AVuS9GgJ32jaK9qX5ZB71k8ni1hgz9834uQcyp61t4z/TSmXv5kmOpomnjOkY4o3cw570q3BlAFA1QcTojwbb6CiD8mpGVirR0RXQryvg+FHqtOatylEuc1VKOleUlNbGNRk/vQ5s9iAWig68uNKAG9ohj+35GZ9QIqId7sDjKCZkRanQqjd42hR6x5rCcL4FZXWb1EBM574h/shnDyVlDy/jTZ9Y67LZFrVLo0lNTS8VOjgB5sJlXe09VNKm5d2fDbme8dBvxA== Received: from PH7PR11MB7430.namprd11.prod.outlook.com (2603:10b6:510:274::20) by PH7PR11MB7431.namprd11.prod.outlook.com (2603:10b6:510:273::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.33; Wed, 26 Jul 2023 09:28:02 +0000 Received: from PH7PR11MB7430.namprd11.prod.outlook.com ([fe80::6216:b3a7:a5b2:bd43]) by PH7PR11MB7430.namprd11.prod.outlook.com ([fe80::6216:b3a7:a5b2:bd43%4]) with mapi id 15.20.6609.032; Wed, 26 Jul 2023 09:28:02 +0000 From: hung kuishing To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v3 2/2] lavf: add prores bitstream demuxer and muxer Thread-Index: Adm/oUyawDlEAtnaQOO+GBpsBkp1Wg== Date: Wed, 26 Jul 2023 09:28:02 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [Gm7HpNh4Pbz1UnAr4BR8ts3nYc/iTwNeZa7tCe8vU08=] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH7PR11MB7430:EE_|PH7PR11MB7431:EE_ x-ms-office365-filtering-correlation-id: 9f4e8f11-9b29-4ee4-c6fb-08db8dba9c2d x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Q0jJXQtZQC8RBUIuWz9UsZknmnAFyv0SMJ0/MZYVuJZXJK5m4zAbxA7rMhhD2y5dcYCKYY2Jt3yGGtyROZdJeYOTpXiFnWCIUSgo3rFlkTVgLs/miYNANWItqrL7wzM1cGBk+6G8eU97iaMfW4Gj4sbPpbrviGv03nlGqp1GDreSUiqrO8+/k0I+Wz6L19Eo1T9gb6TzautYXIig+uBwd9Gn6OB0mB2C0DIXpT9Wq0WAjcoMIxB4/w/fdhiIuJ/sjcmX8/gVSO1q1/v7QEiCX+HyYUIr/YuC6vS7Py4RKJejLkAoC4Ivx0NdxhbEKVHI1Eci/3dHX9L9YWTQeCzxgUk9VT4H6Q3qhlyiA7t4gCKQ6FDsr8lC5hDahNNXRWr/aEvZ25kGBuYXK4ziA+7ffYuumiu4JyoQoBZssLJgCMSAW3UGlQDzd+umO3QeXH/qohVhtHIux2jS9zkq1uKYPwWVsowLl39M8CxdSJhcDaQ8d+AilWi88hW+OtpWqGnb9kkrA3cl0eYjzHU4GO+D3XITYFTouc/yncJ5ZI+3k6v9lbdiNSJrr95XOUGNliY0 x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZGdRK2p0R2ZYd2tJZ0FkYmY4R0R6RGducWpPaEk2cStZQjhEeC9NeWEwUFF0?= =?utf-8?B?WEwzaXUrZWlsVG5LNmN4ZkowNnFKcERlaEQvVjJLWTl0NDd2MWNaWnozV1lk?= =?utf-8?B?clVLV2JqN0Ird1lrVVgveFZNTStlczh2dFgxSFB5U3BEbjhxci9Ia2NiT1d2?= =?utf-8?B?YU9IdjFFZmRWTTFKSWlvZVVwTWRST1FiZGUyblZ4OHVGbncxL3k5YUxjV09O?= =?utf-8?B?d09zajlOU0V0RkxJejN1b2Z2alVDY1k5eVRpSG1IU1lEVlh5UFUwYlRaZnJR?= =?utf-8?B?TnFoWHArS0xTMzc2YUIzamRqT0lDWUgwT0tNeHRmeXg5UVBVMUFJZks5NXV5?= =?utf-8?B?dUc1TnNvYnRwYVVoK2dJVE1CQ1V5bU9sY1lIVis4cnV5RGZpSmNjT21qdzhP?= =?utf-8?B?ZzdZb0xDSXBlb3BzQktYb1hpWDkxdlBrdDJVTlo0Q0hNN3A3eUNPdXpzMmJY?= =?utf-8?B?UXlHa2xPdUtMMnJTUXE5SmVYcExVWDRPVWxRNnVBWG1IbzEzYTZVdzEyQXZB?= =?utf-8?B?Z3JGTEc2U0NtTlo1VFVueGlaWk41d0ZHV1l2K01WVEZKK0FvZXc0NG9PeHpY?= =?utf-8?B?M2NDVFZDd2M1ZTQxcWxZZS9ndWZseUFzS1h6c2pndmNyQ3JoUDN4ajc2YWlO?= =?utf-8?B?RGx1eUNtUUNYNU5GSnJpNSt6U0NTSlRKbTlGZGNBUWgwNDVIVkpDYzVyM0ox?= =?utf-8?B?aERLZmh6S2FwWlhZRWU3T1VlajhnZ3NDWlgvK0QzWjZmUXlNTFlWWTZOd2o2?= =?utf-8?B?SEtNaDZqODJ4VFB1WWRuMDlFWlRRZzVXVVJaSFRpV2E5TitlUi9iK2hlS0dO?= =?utf-8?B?ZUhlMTh6NklVdUFaQjZuSFBQeDdnZXBIaFp1dnV1T2g1OG12c1hxdENjeXV0?= =?utf-8?B?bmdLU1E3eUFybnJTTHk0MjZWUGxtRm5HQ2FnWnY0QVJSQXZGRlViVG54Wnhi?= =?utf-8?B?cUJKenRud283NWg4Zm9ucjhVNUFnWThvZ2l5WHpGNWR1QmtHU1dDaGwzdGdH?= =?utf-8?B?bTA5aEVFcCtYMy8wVTR5UHQyVksyTlMyUEFVbHM0WE1GYWk4QWkvaGpTTkZu?= =?utf-8?B?U2o2TURJZEtIY3BNaDdnWEZrTC82OUJyTTFYK29vbDJhMUxzREZQcCtsTURn?= =?utf-8?B?MjVRQTBibWJCRUdMYVpEYmllWnNPcE5hWTBpSWpVa2ZvOTN3dkJBWE5QSHlm?= =?utf-8?B?enYwU1JHMG9kSURqcmRIeDhObDUyc3hiN2JpRGRYSmxjWWJ1ZXZCOVREcFc1?= =?utf-8?B?bXIwajA5Ui9MV0Nxc0x1NkxmSVNpcFE5OW1iK3BwSURBMlhZdDhNdEFJYmF1?= =?utf-8?B?MkNXOFdLd2p0Sm93TGt6ZGhwSDlLQWdGNkR3SU9xNzlZc3VoRkJwY2t1Z2hl?= =?utf-8?B?TU1WZUVpS3FLUzJnS3FneUpZRjNMVk50eGxqNExRWXU1NCtINkMwak9Oellj?= =?utf-8?B?N1p6RFQ3ajZRZFNJSHJ3Ykk1U1ZyL0ExMjFPNDczUEplTzZnN211TCtaM0E0?= =?utf-8?B?ZXkzeUsyZmRhaTluQ2ZleXJtbVQ2SENqc285TFdHMTRnQ1VMRW5KdE5hMnRU?= =?utf-8?B?V2J6Um1RS3RYaWVKam8rWkpCWXpZV1lvRUV3ci9TVFIvdFNLTWxUWE1Ob3Z5?= =?utf-8?B?K0dCcElvd0FQeWk1dGJuWGIyRGhoSmc9PQ==?= MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB7430.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 9f4e8f11-9b29-4ee4-c6fb-08db8dba9c2d X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jul 2023 09:28:02.6552 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB7431 Subject: [FFmpeg-devel] [PATCH v3 2/2] lavf: add prores bitstream demuxer and muxer 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: Signed-off-by: clarkh --- libavformat/Makefile | 2 ++ libavformat/allformats.c | 2 ++ libavformat/proresdec.c | 66 ++++++++++++++++++++++++++++++++++++++++ libavformat/rawenc.c | 13 ++++++++ 4 files changed, 83 insertions(+) create mode 100644 libavformat/proresdec.c diff --git a/libavformat/Makefile b/libavformat/Makefile index bd78c206b9..16def0765b 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -480,6 +480,8 @@ OBJS-$(CONFIG_PDV_DEMUXER) += pdvdec.o OBJS-$(CONFIG_PJS_DEMUXER) += pjsdec.o subtitles.o OBJS-$(CONFIG_PMP_DEMUXER) += pmpdec.o OBJS-$(CONFIG_PP_BNK_DEMUXER) += pp_bnk.o +OBJS-$(CONFIG_PRORES_DEMUXER) += proresdec.o rawdec.o +OBJS-$(CONFIG_PRORES_MUXER) += rawenc.o OBJS-$(CONFIG_PVA_DEMUXER) += pva.o OBJS-$(CONFIG_PVF_DEMUXER) += pvfdec.o pcm.o OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 6324952bd2..0b762034ca 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -378,6 +378,8 @@ extern const AVInputFormat ff_pdv_demuxer; extern const AVInputFormat ff_pjs_demuxer; extern const AVInputFormat ff_pmp_demuxer; extern const AVInputFormat ff_pp_bnk_demuxer; +extern const AVInputFormat ff_prores_demuxer; +extern const FFOutputFormat ff_prores_muxer; extern const FFOutputFormat ff_psp_muxer; extern const AVInputFormat ff_pva_demuxer; extern const AVInputFormat ff_pvf_demuxer; diff --git a/libavformat/proresdec.c b/libavformat/proresdec.c new file mode 100644 index 0000000000..67f25b79ec --- /dev/null +++ b/libavformat/proresdec.c @@ -0,0 +1,66 @@ +/* + * ProRes bitstream probe + * Copyright (c) 2023 clarkh + * + * 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 "libavutil/intreadwrite.h" +#include "libavcodec/proresdata.h" +#include "avformat.h" +#include "rawdec.h" + +#define FRAME_FIXED_HEADER_SIZE 20 + +static int prores_check_frame_header(const uint8_t *buf, const int data_size) +{ + int hdr_size, width, height; + int version, alpha_info; + + hdr_size = AV_RB16(buf); + if (hdr_size < FRAME_FIXED_HEADER_SIZE) + return AVERROR_INVALIDDATA; + + version = buf[3]; + if (version > 1) + return AVERROR_INVALIDDATA; + + width = AV_RB16(buf + 8); + height = AV_RB16(buf + 10); + if (!width || !height) + return AVERROR_INVALIDDATA; + + alpha_info = buf[17] & 0x0f; + if (alpha_info > 2) + return AVERROR_INVALIDDATA; + + return 0; +} + +static int prores_probe(const AVProbeData *p) +{ + // 8: frame_size(4B) + frame_identifier(4B) + if (p->buf_size < (8 + FRAME_FIXED_HEADER_SIZE) || AV_RB32(p->buf + 4) != FRAME_ID) + return 0; + + if (prores_check_frame_header(p->buf + 8, p->buf_size - 8) < 0) + return 0; + + return AVPROBE_SCORE_MAX; +} + +FF_DEF_RAWVIDEO_DEMUXER(prores, "raw ProRes", prores_probe, "prores", AV_CODEC_ID_PRORES) diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index f916db13a2..28ca47ae70 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -538,6 +538,19 @@ const FFOutputFormat ff_obu_muxer = { }; #endif +#if CONFIG_PRORES_MUXER +const FFOutputFormat ff_prores_muxer = { + .p.name = "prores", + .p.long_name = NULL_IF_CONFIG_SMALL("raw prores video"), + .p.extensions = "prores", + .p.audio_codec = AV_CODEC_ID_NONE, + .p.video_codec = AV_CODEC_ID_PRORES, + .init = force_one_stream, + .write_packet = ff_raw_write_packet, + .p.flags = AVFMT_NOTIMESTAMPS, +}; +#endif + #if CONFIG_RAWVIDEO_MUXER const FFOutputFormat ff_rawvideo_muxer = { .p.name = "rawvideo", -- 2.34.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".