From patchwork Wed Jan 11 01:35:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yeoh, Hoong Tee" X-Patchwork-Id: 39960 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4391117pzb; Tue, 10 Jan 2023 17:36:06 -0800 (PST) X-Google-Smtp-Source: AMrXdXsbHJB7GGn8Nfz5LO2CmFiLNob9aus7rutyQ4KbkeGfbVx4wdS+a9zURYjywzFkVIkTFOgG X-Received: by 2002:aa7:c796:0:b0:46c:aec4:606f with SMTP id n22-20020aa7c796000000b0046caec4606fmr58561269eds.23.1673400966136; Tue, 10 Jan 2023 17:36:06 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f17-20020a170906825100b0084d200455b8si2273346ejx.556.2023.01.10.17.36.05; Tue, 10 Jan 2023 17:36:06 -0800 (PST) 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=@intel.com header.s=Intel header.b="N/tQA6KC"; arc=fail (body hash mismatch); 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 8574C68BC95; Wed, 11 Jan 2023 03:36:02 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE10168B14C for ; Wed, 11 Jan 2023 03:35:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673400961; x=1704936961; h=from:to:subject:date:message-id: content-transfer-encoding:mime-version; bh=9b96oyvYdbiH5fKfIXAc6GybIp1eRTQ1rmZwN0J5gAs=; b=N/tQA6KCdkTtf/Uux/JAeU6HqUycX60KioOLKL7qXtCHchcGd87oQmRC mOZV1H9Dd6lFf9aTxjPAAjLuYinn8tcbTOdfr7BrNYSF8axMMM/uD7Tc+ qg5cCy4pChFsiOHfM3GDVPkNOBv8QX1+UBXzLgVYF+Oon5CjUCADlboXl sXpQNr2II4kXJHJO5ntua57G8HfXz2GEDJzqBH21K8h5x9ap3Tdf5MzgR CtHclluBUml+oKIn+EA0YYpPtbvOBbl3xMVheW5ZbII+y3WobL7lv0+P5 dAOKNJkycRsXl5q1a+HVAxPgSMGm0vtdu780ruZ+vXorW6iiz+lINGksB g==; X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="320995192" X-IronPort-AV: E=Sophos;i="5.96,315,1665471600"; d="scan'208";a="320995192" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jan 2023 17:35:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="725741654" X-IronPort-AV: E=Sophos;i="5.96,315,1665471600"; d="scan'208";a="725741654" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga004.fm.intel.com with ESMTP; 10 Jan 2023 17:35:53 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Tue, 10 Jan 2023 17:35:52 -0800 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Tue, 10 Jan 2023 17:35:52 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Tue, 10 Jan 2023 17:35:52 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.101) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Tue, 10 Jan 2023 17:35:50 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y54Bj/buZJVVcUARGKzviJNs7DjmSzQKtURvN2JMq27F0McOuYTrOVqol72S6f5kt7NwHye5+5103oeRe+zt1ku+YsC0XbmGGVEg0TS4Sbs6Drc5LPVxBHqI/orsbthxLL3qwy8z5DKcbHYo5GBVckYDTRT7vvouLKNXeFJsMgQxA4MJYLXvUsIokUMl1+l4hEqmCivwXdCnpWF0vU8cLLuwUHxMd9vvcc6rH0T6h+5cx5G/oQqRotxQa0ZlxMSH4Ch6tdp4DKBe6WG1U52v4Fkd2i8et6bm+u5XeJ2wEjNcNY6q57XmAEYVt50ztwfalYRFxZR5C1sJOL5i1AIuvA== 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=qrfMhCNzRYJLZs60vkjqYyWk00cvR6UjhgllY9cspRw=; b=YFP52Us8ru87OfNSpB++ggI54g0FNA1pTptAe8vsHQlbv88Q7a5WXHN1aciQfiFe7/Y22d1DhdYgJ9OgGh2/JZD/LW3qLatB5glo04BkTPZzcghO/uKpboAr5vuHmr4grDXkivab/ecrdcV3hb15qtvQdn6njU5DbV0oD2GfuntYp0FUqAxQLRL0qTe/HD7SPmSTIETz1UWJyypYqEm/32mA8jC464K40Jq0bpKkD1TEf/3g3TKJARsxZmP9t9QDj6IEq60GnneXEZfXy3kOSAqAamGT5B+sA2hgB4QcjMXwyE5PxxnnN6eH8fGa0MIuPAMxhUcMdkzCs4Akt7xa4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CY4PR11MB2038.namprd11.prod.outlook.com (2603:10b6:903:30::14) by IA1PR11MB7918.namprd11.prod.outlook.com (2603:10b6:208:3ff::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18; Wed, 11 Jan 2023 01:35:47 +0000 Received: from CY4PR11MB2038.namprd11.prod.outlook.com ([fe80::5ae4:fee5:ac92:55bd]) by CY4PR11MB2038.namprd11.prod.outlook.com ([fe80::5ae4:fee5:ac92:55bd%10]) with mapi id 15.20.5986.018; Wed, 11 Jan 2023 01:35:47 +0000 From: "Yeoh, Hoong Tee" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel][PATCH v2] lavf/rtpenc_jpeg: Retrieve sampling factor from SOF0 Thread-Index: Adkfe4ECWKuwXEUJTtiX0I1BY/wzSg== Date: Wed, 11 Jan 2023 01:35:47 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY4PR11MB2038:EE_|IA1PR11MB7918:EE_ x-ms-office365-filtering-correlation-id: 9662bb87-0107-4294-8bbc-08daf3742a4c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JmWLaHM2XG6EYS+vn7y8owc7F1rVk8jairBTOm1kHwPe9TxEBlsEvUBczOt+zkHTj3ylU3Id3ybKpmeRvGBd3bVvYsBcF9OTj9VZswWYWR//X8abGYa5zvtMpzyT6+7BwtDhxSG2yT5C1waBzzNFb1pzySfr2gl+1mDUdOHhrp2eSvObJv+Q5+A9p9EPAk0UB/LXxlfLltXTtQwEZy/1zRZyVyoUXXBgRlJ4BeX2nsLz686P8aavcTbb5eP2Bf0V2sQrl13ahvsR10eqIl+L8gLSdi4dMG8KzDXUZ6YvCCqzzZYj2Q5gTJSEIMwsb50buvlcScaMf3iyKP/m0rhNZXO4b+MkfZPc+VU04tjqKyFtoqxLX/oIzFARt5fte700PUCJ860XWrZBYOUgeZV+8+JH/b3FdOm+swnC533RqE3FKj/vMNgGfK1u8bs0GX8IRxxVWvc/KrNsz0Mg2CLj64CZYrwJ9MkVEfF9KeVs5G5e9AqdxQ5i4wLIWAzPnCUmPYC41ycLKSDU5/JPdwhoBXejxQjjbUQsT0cczuY040zllPcPynTVKqckbDf3xZc0rGDmhL1U3Q/A6m/j+1Q8LD7aXab86ygD1e+d/8/wStxa5VcjnIN2fSZlA0jmjyuYWcR3GLqwEZdzD31g5ReR0FAniCfevc+i7rsWtFSbsVQDgh1VmY8McUHaZtzNVfnWZY/wgeVVUmUaQ17zB3g47w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR11MB2038.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(376002)(366004)(136003)(346002)(396003)(39860400002)(451199015)(6916009)(41300700001)(38070700005)(6506007)(2906002)(478600001)(316002)(122000001)(38100700002)(82960400001)(83380400001)(66476007)(8676002)(33656002)(52536014)(66556008)(66446008)(64756008)(9686003)(26005)(86362001)(186003)(7696005)(55016003)(5660300002)(76116006)(8936002)(66946007)(71200400001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: WsJUOjwPH/TDh3EkN2dOFPsezOktdwda9rOplV20W/B8td+gJMqsBf6W0RYQ9nmCSJrG36LioigT7AWgQO4h64dYihAloflq66n/SqOzc2kAyRlqQM7hUl4syvHW6KCoEGSPEecqt+QgfWW8rN89pymhFLqqxUyA8T1+0/ex/q5EmtW7WXqdy8ytsMZV0hrE9L9wgVgWdY27ea8FsgVYT4mMZDJNczTIu43eZh+aWFrqeDkzTXPVAmc3TyEpSMBLDjsbTuWUG88A7IAea6QprRetOQ8lGq9FgmoMS/XSuQ9Sq0meGziKOKwSc6KpPcPlXRWB7tjuXDC8tRGvfsGbnUKe72pW/qReZlsd7O6Lxaftzrc8NOrjk23svBCTXx3T/weDJEbMigCUQYnQDmIIktmdbB0TjEir5aLiGbo0nL69nWLcbdeXFsFSavHyPMwMXaC2Sv5p69Pq1PMnH6VK1sRcKncSMPFwp1e56NgZWyrqNSpqxEU6bP+FgdWt2PxNfwxa8JInDaPfBfz++6HAUERJ7tOqBLBQLvgYv+9zD3uhdQdbDII1o7AY4NirV1aaa/F7YWN0azFEvNe4eSf0+v2ArKS8BmbJV8xz5bKd1OzHp1g2+73Ta9JHaqn5qNot6rQAXhCGwNU9uCE9v3dWckuK4esUK46TyfKzEMez0TRqCIpyWqSYpIl9lwyyrFsBR1AkmlRdUtS3Vj7b7oTpcIFh78AWFnJrgUxbMnMeSWWjvFeA1nto6aNnfZKylOVIr6HvRsahAYrlJP/xK5RaD2nP/Jfd/4QU7RTRvIfFmlpm6Tntkq+sprJrltj/TVRbEG2MPLxb2TkzCGdDBwqJVjiyvt1qFShtk44MxS7ha05ebFmN2sB5K5cucUDrBYnfb+k5dmfCLhmF19L95qntbCaj5FZBf78HNGmtvylIwf3HwaMXaHpXdsTMNV60OZOHo5DsWk6dqOfzo1AHTgSDsiFK6m85N+5Hmgq/B5HJnsRfsTZpOzK71JHtZvO1mHsAKCeJNy8RfuV9yfzpQUYuVGmP7Ako09dnvgkm+eyM7ugsT3Hyqbj7dCG2AgXUKFVqNVSFwZHRBjCRLpVU0ttK+vbXOumWue06mFpH79QAqn8QWPVK/mAbkQP8OjcJjKu/hOnDMjiX6o8CJwsv9CUvgO/QDlHrJ5WaBhp9CZJ5e+vFrFTMAcACRthfUnR5y+4dsxGX/YEHZWt2w08UKoTsKTe3ruu7WN7+yq3NJuZmYy6Ts017eeljewCJ3xaUBcXfpjM+v6vFdssW0GvtBWxekINKjojvb6c6WaMWUsbUE/WDLdMPbOMCIIXHMuZlLPcU4LCNZldUTE6nfYp6Hdyj7ZjgTDW5RyBXNpdUfHriV1tbHfseZOtkIAzMpePkVLdqw/UIIVmRbYUx7ObQolLIkMU9KVgywE3X+++qyQtXzkftT/uSe7lBn0GN2GZdkuXHEhag7UBGEF8q63c0zGcu9L9TGK5W60gLh5hB0qudRkFYmFIhrBdA57CSLWdTCLc6Nxa4oi8nBzIOkCjwk3Z4+29GG4IgnkC4N8owLSQIH5LqRH767hR42rIHfkMo83yq MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB2038.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9662bb87-0107-4294-8bbc-08daf3742a4c X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jan 2023 01:35:47.7137 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QOli1tkC85MjN4W1W72svT7ZqKhWs1XyCmxmEqT7RSpTBxdH67WERYXkAdIiR/Zg7jSy+sEX7x6Z6UjG0OacEu19JHMRGOK8ePRX9ivN624= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7918 X-OriginatorOrg: intel.com Subject: [FFmpeg-devel] [PATCH v2] lavf/rtpenc_jpeg: Retrieve sampling factor from SOF0 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: EN97FOv4RHZ3 In ff_rtp_send_jpeg, the type is defined based on PIX_FMT and color-range parsed in. There is limitation on current design where need to include support newly introduced PIX_FMT such as AV_PIX_FMT_QSV and there might be more and more in future. Hence, retrive the sampling factor from SOF0 in JPEG compressed header directly. This introduces flexibility to handle different type of new codec introduced in future. Signed-off-by: Yeoh, Hoong Tee --- libavformat/rtpenc_jpeg.c | 41 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/libavformat/rtpenc_jpeg.c b/libavformat/rtpenc_jpeg.c index 9111683..53be188 100644 --- a/libavformat/rtpenc_jpeg.c +++ b/libavformat/rtpenc_jpeg.c @@ -30,7 +30,7 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size) RTPMuxContext *s = s1->priv_data; const uint8_t *qtables[4] = { NULL }; int nb_qtables = 0; - uint8_t type; + uint8_t type = 2; /* initialized non-0/1 value for RTP/JPEG type check*/ uint8_t w, h; uint8_t *p; int off = 0; /* fragment offset of the current JPEG frame */ @@ -45,20 +45,6 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size) w = AV_CEIL_RSHIFT(s1->streams[0]->codecpar->width, 3); h = AV_CEIL_RSHIFT(s1->streams[0]->codecpar->height, 3); - /* get the pixel format type or fail */ - if (s1->streams[0]->codecpar->format == AV_PIX_FMT_YUVJ422P || - (s1->streams[0]->codecpar->color_range == AVCOL_RANGE_JPEG && - s1->streams[0]->codecpar->format == AV_PIX_FMT_YUV422P)) { - type = 0; - } else if (s1->streams[0]->codecpar->format == AV_PIX_FMT_YUVJ420P || - (s1->streams[0]->codecpar->color_range == AVCOL_RANGE_JPEG && - s1->streams[0]->codecpar->format == AV_PIX_FMT_YUV420P)) { - type = 1; - } else { - av_log(s1, AV_LOG_ERROR, "Unsupported pixel format\n"); - return; - } - /* preparse the header for getting some info */ for (i = 0; i < size; i++) { if (buf[i] != 0xff) @@ -90,6 +76,23 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size) "Only 1x1 chroma blocks are supported. Aborted!\n"); return; } + + /* + * Find out the sampling factor in SOF0. + * In SOF0, hsample/vsample is inserted in form of (2<<4) | (type ? 2 : 1). + * First 4-bit is hsample while Last 4-bit is vsample. + */ + + /* Luma channel sampling factor in 4:2:2 chroma subsampling are 2x1 */ + if (buf[i + 11] == 33) { + type = 0; + /* Luma channel sampling factor in 4:2:0 chroma subsampling are 2x2 */ + } else if (buf[i + 11] == 34) { + type = 1; + } else { + av_log(s1, AV_LOG_ERROR, "Unsupported pixel format\n"); + return; + } } else if (buf[i + 1] == DHT) { int dht_size = AV_RB16(&buf[i + 2]); default_huffman_tables |= 1 << 4; @@ -163,6 +166,14 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size) break; } } + + /* Check validity of RTP/JPEG type */ + if (type != 0 && type != 1) { + av_log(s1, AV_LOG_ERROR, + "Invalid RTP/JPEG type\n"); + return; + } + if (default_huffman_tables && default_huffman_tables != 31) { av_log(s1, AV_LOG_ERROR, "RFC 2435 requires standard Huffman tables for jpeg\n");