From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id B6CDE4E734 for ; Wed, 11 Jun 2025 14:22:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id C8CE168C30B; Wed, 11 Jun 2025 17:22:39 +0300 (EEST) To: "ffmpeg-devel@ffmpeg.org" Date: Wed, 11 Jun 2025 14:22:29 +0000 References: In-Reply-To: MIME-Version: 1.0 Message-ID: List-Id: FFmpeg development discussions and patches List-Post: From: Pierre Le Fevre via ffmpeg-devel Precedence: list Cc: Pierre Le Fevre X-Mailman-Version: 2.1.29 X-BeenThere: ffmpeg-devel@ffmpeg.org List-Subscribe: , List-Unsubscribe: , List-Archive: Reply-To: FFmpeg development discussions and patches List-Help: Subject: [FFmpeg-devel] [PATCH] avformat/mpegts: Passthrough SCTE 35 Current behavior breaks SCTE 35 by wrapping it in a PES packet, this adds the logic for the SCTE 35 messages to be passed through cleanly. Content-Type: multipart/mixed; boundary="===============2421708977402068551==" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --===============2421708977402068551== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2106.outbound.protection.outlook.com [40.107.237.106]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 2A610688001 for ; Wed, 11 Jun 2025 17:22:33 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j2goysprmSOXG1DIazD+IEqhVpZmuadY4zyPH7EXvdVJgmYRP5Zf/qsL8I+HzLcMFSfWbbUlks8zAFGW3OljrUgOg0YZ5YJa7Aj0slY1udAABTu4EbqWoKLQFshnLOFnZJddR7EEtnJgLnL0BTyiCOyS25/s6LXUp0WWG5J1g0RsVkD7X281EbDIY9xdIeMlXqwrnFbUaGt3+jV7JpM7yg1F2P5xshD7qb0K2Vk//mIb2B9u8L8uZkMvTtut/NG8ZylSVJCRwiUFZu2a90cY3EPjLYtTQN9RK6fxxyTiEJZrPTZ7hXS+Phls/qPSeMkB7GOl9zcvSqfgHzWl8YIArQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=LNj6HsdZF6oqkB0f1q8nDoHcQhMSCOif7BdJjdFZw08=; b=TlxVcR9tRy/NTZ2hRQ2Bya/d/hexC7NWF32spfhq0lEiSSzOp6E23FsQe2oTUQGch+b/2owwp+kfxEvnHsIXPkLA7Hc9bq7r+PF6vEPziwPZF6bo10d4A8OX0Jc/dvKuba3h1gWNzAu0GD+2Ku3ty9HPkMa0vrg7ol0Id9aRJsmchAHEUbujVK26VRwlcgPspjgUpdAN5HlZ1oxp6iUvSuRBHGyPics2nKDofiRW6KA89npojMfS0151Gt6cYA1VKkEZZ0FxvRmhkyvTl54tssZLl3Ewa3E91UWUONdW9MxYjy0u/aqxAGiIJcGzCzuUx4OHHCcZ0TKV+EiuWCc7yQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=netinsight.net; dmarc=pass action=none header.from=netinsight.net; dkim=pass header.d=netinsight.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netinsight.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LNj6HsdZF6oqkB0f1q8nDoHcQhMSCOif7BdJjdFZw08=; b=l3EupFdYYymRDVABLGrVNQ8xQ9K9jmCSdbJyvwb9+MU6JrBlB5VLYydxvApRPSfSjdcgQtXOis3B7meENWufmOUYBGRH8nQ5R3dajUu2I9be8sstT64JyWrFloxaNzRMtsfUuEou3bHYEn+lyEJH3n8SLoRr3WlUY5ybBIGZZwlu4OlxIBFT11VK6nQCekt8Rl4j0QHUJaBc6K/V1jmNHcjkCyp4nfcqepDFNFiib2XDyOEYIcb4XLloW/LMd/Vn9TIqH7zx8u8/G5RAljJZlhbg9DAPa+Ssh2+DLLA8Fqir325ryz6GnnDQKtuuOAI63woSGPxgV5A7D8Pgz+EtzQ== Received: from LV3PR17MB7190.namprd17.prod.outlook.com (2603:10b6:408:199::16) by SJ0PR17MB5736.namprd17.prod.outlook.com (2603:10b6:a03:38b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.20; Wed, 11 Jun 2025 14:22:29 +0000 Received: from LV3PR17MB7190.namprd17.prod.outlook.com ([fe80::4f6:8652:1a97:ec67]) by LV3PR17MB7190.namprd17.prod.outlook.com ([fe80::4f6:8652:1a97:ec67%3]) with mapi id 15.20.8792.034; Wed, 11 Jun 2025 14:22:29 +0000 From: Pierre Le Fevre To: "ffmpeg-devel@ffmpeg.org" Subject: [PATCH] avformat/mpegts: Passthrough SCTE 35 Current behavior breaks SCTE 35 by wrapping it in a PES packet, this adds the logic for the SCTE 35 messages to be passed through cleanly. Thread-Topic: [PATCH] avformat/mpegts: Passthrough SCTE 35 Current behavior breaks SCTE 35 by wrapping it in a PES packet, this adds the logic for the SCTE 35 messages to be passed through cleanly. Thread-Index: AQHb2tjB0J1eRRw2VUKdxGesUQEXkbP9/T8WgAAFW2o= Date: Wed, 11 Jun 2025 14:22:29 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-SE, en-GB, en-US Content-Language: aa X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=netinsight.net; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LV3PR17MB7190:EE_|SJ0PR17MB5736:EE_ x-ms-office365-filtering-correlation-id: b2eb89ee-8715-4c15-960a-08dda8f365bc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?us-ascii?Q?mHrRIAbP4q/XY1hM65a8xaekfojCTZoykDIJZPvnrF0k8s5MHk3oSec/pSun?= =?us-ascii?Q?J0y/g0P8/di/G+aMpUsEAXzoKEibpkNqdALQtgAU+Ukfk6h5/Nh2iCDMF52i?= =?us-ascii?Q?FGMRnZpkBZJHR7S7K7FukKvT4nfKnls8gLxb41lMMQM5et3xGSOcrZrLPyan?= =?us-ascii?Q?4d6FsGd/Wc48TTUfYahodem7wwPurFcREapVw0lRJTAsywygECXugjFpvwWu?= =?us-ascii?Q?IVnP8r99+U4MRQaiP+mdxf1qwcjcQyDR0Ea43IW/T9aOhN4tS1Dx2rpwquJV?= =?us-ascii?Q?4Zldp8cYJyq/rAbjbLmiA1DuWjKzPPE93FIoiHF/KI4ZdtnKajPRzd9Kh5h1?= =?us-ascii?Q?/BQl+nkiN6RlbIM9aBxVql2XEG8nWYadZ5k1EJvPDf4cljCPmSuf07Gqsnuk?= =?us-ascii?Q?5TJNHdZHCMt5TX1wUAYa9D9NznhGlwTzYIb9d0sVpbSma+E1V/sYNDVwdnoM?= =?us-ascii?Q?mTB2AWHqfzM7SSyouMIEgWmy/ced2Q9su7ecX4N89/tT9rzC3AIOKzwXftDZ?= =?us-ascii?Q?6ugStAErNC7Bwyj0OKawLPq2KTJCwRtVvjmUtgXpgUfGEELjs3Ckn0RWiiBg?= =?us-ascii?Q?AdIjEJDitiPyNsmMXviJzZkaUSiqhdiyOC5pM46pWB3iLVF56zmqzxTIxlCm?= =?us-ascii?Q?QKfobwaZONredPuAqproIab9ek/+RaQ7HbSJWTxk25HtAmJ7voURdlnThRKi?= =?us-ascii?Q?Fy8M++n/s6qpHEiG0oUuDVX3fP0y7AMBldOLJ51mIMLojIgDs6RSy8ewbjKi?= =?us-ascii?Q?mzi8Aaz/skGBODF5O27RD3PNa0SEvU01oNK4pSlhsv5gQReHKP/E3uVlUObW?= =?us-ascii?Q?4l/+hn4jrWTim+egAmcvswVs/140+YlSw7O5Vmuq8ecii9Bib9cycD6ZYNcH?= =?us-ascii?Q?giWZEAF6XrSFjrZXCq2xuwro+J7byXDX8aKRMFbqk9hvuOYxJmOEePNuSkC2?= =?us-ascii?Q?GQRPQdplrny3tTJosu2JC/inDRfWNBm3pamagt3Ofmj3E066xBWlVT5kCz/X?= =?us-ascii?Q?BfN2vr9PuL6HMbnNz/nSd3daC4fTtNE4A8YfnNKwmBDqyFLjODftxMvjBVJa?= =?us-ascii?Q?ocN28LqabqoO5mOYZPBKB9grz1sIH6KqrGZUiERqBYkMs3PV9Luq55jjfY1D?= =?us-ascii?Q?DmjngIVcdREyVKh5OopoZn+Hqrm3CRUJJTJixCS1po6AbiS4Q4g57Ug5bwxp?= =?us-ascii?Q?2JrZNhA8LG1/Di9+Mdv8gZ6zn2G+w6ETkUUMj++ps/qV1Zpw24VgG2EW5Ccz?= =?us-ascii?Q?IlWkbJYdDPyVeVGUTyWTCy6P+uKYtnhwcMxjt1vmHhU4mTgOjHI9Vpv/mjb7?= =?us-ascii?Q?ljh4tbvH77KgXNPA39rOuMohG8f2xc6N5/Eq/yvs0LVvgZblXF7HH8elNv6a?= =?us-ascii?Q?YZvxe60zQYMWQ+JJZ06BrjJquAaLlgnduc0STdKCTX9D1UP+Y5+JwQjT5q0U?= =?us-ascii?Q?0WzRG42YOAuo79DUNrcag5lYM49HR+z8PVXNK6Mv1anKBYMn4r+Bjg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR17MB7190.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?xQ7lo4/cpuboxDTHd5oiDxaQkYzaZH1a6Ii/i58mMmF3SaniniChipH2HnWk?= =?us-ascii?Q?btiu2lAlOMHAj1h18HD7JaC9D3YVrlUfVQ/Y2FLrzAxNgFtbwjVhu6KZ6hr+?= =?us-ascii?Q?ikiuHkagJTpEUT5Ns67ryyn5SB8ews7k414ZRudS59YlW0kz0WLjmm9o1I7I?= =?us-ascii?Q?GsqnTkfBgvnhzRgj6u4CK1uYdeRiB7/GFpISHtHZ1opC/LHSTpCfYVf4M3IF?= =?us-ascii?Q?aRtlsqsAVNkaTTBzR1dRJTBkojAypx+dpg8MsJndA0kGXOWwvrn8tid0FtMT?= =?us-ascii?Q?b0HDs3BcxQoYU7R6/esFCaaKHZ7kOFR22YFWVi1EeoR+9JNJZBUy4gzahe69?= =?us-ascii?Q?E9mVfuJG6lNnx6SMmcCDpvAksYxI/a+qqXAl+KsWWENpxUeO5i3sK4Fk83o8?= =?us-ascii?Q?qH24pbxVNBGhS8PE/t++Z2Z3r11KOBrUTjhgHKpRs53crmwJgki4O1gKtck0?= =?us-ascii?Q?QbQhRY+ejLgV1XY8zv8bIdIEwGmOdmNbMNli8pdXRWiygAtwyhB7WS2ULIk3?= =?us-ascii?Q?PPwb1Z5rpuKYp2e6Qd96rruND69dWT0vXogljgRO6sUAyGPSdH81cT2mbm/e?= =?us-ascii?Q?mxRvHkXDsCaO7t9l7dSHOof3tSZgQVpthvCjwNxKit9FRBJXVwuaPBxU/BJt?= =?us-ascii?Q?ySOKQYybIPBOmZPySF71WPIq6kICjss0bxYV+oj/b5jqif5s17xZQryOiARR?= =?us-ascii?Q?jQTC8Uppk1FrYnMyV7CCTjDT8czGoBdYQ3ctvHet/tqiO0OGLnHQea3p8oeN?= =?us-ascii?Q?B9VWrVNBTWNad9VC4Pp/glz4QO8DqrymF4OsgGyM49mp8S+LAcHr2xiPBsPl?= =?us-ascii?Q?1u6FThzCxM26JIV61QIwJGN46h3p+8ftb/1z7KSszar2qvgCpc1resVb3Jlh?= =?us-ascii?Q?dTTQocoP1IS11TWacthx0elraH4qakNhcHspfo4adxnR4kgOjWEqtF6a2kUh?= =?us-ascii?Q?S0k6r39jRexBKsx3TBQllP/6tJLwDP+LKiR+dGC9a3oRl66HsHHI/MijVbfc?= =?us-ascii?Q?rfW5ek62u1ctGof6aOZ0I9inQgZEscZ4n9Og2uh8l0I0dpPyrLYCuzVsdz9J?= =?us-ascii?Q?Wo2mQo4eLSDz8QIpT5he9da+AY6Gq3KckXCIKg2f/08UxGhSt1wIrUSGestZ?= =?us-ascii?Q?JvUjLmjFcFjQghrcC10WuOWWCTs2JrvqQHRYe5gjVhZha4Zu0E05A9ik3G9R?= =?us-ascii?Q?KDOPgT0B+8k8J4T4Ru3EFvFlDYF9bgC0hUvDb5JZjpzUnlSpgvdoZZMwyQDA?= =?us-ascii?Q?0QUl9QoTe57rW7ZV4wO7oytdOhhSjWu1rF+ZLAQXVsaany8YWXGcCTXPA/Rc?= =?us-ascii?Q?BJAwsGBkdhFLWchoiEJjYTRIu2e4lqbgyPGRHEvUvJb8i55HKbf0FtXnUotA?= =?us-ascii?Q?XpDTb4NwJwZ65CRe16UI+8O4d9IuQs5C6VI+buYdN5LElN71We8qU9z7fUrq?= =?us-ascii?Q?Bbq88ZggQwm3sGi52MwI13Ezv25SAIRyf8WZif0ZCzarG+0XYx42p2rMoqBL?= =?us-ascii?Q?Bmb5SkO1Ihag/soAfHoUM7y9ZR164PQR6bGUYe2LKmReF4dsVXwqxZ/CDb/W?= =?us-ascii?Q?/BORe4uKs2HQTfcDMEt0yTT/TK0cfvxtDr9qIADr?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: netinsight.net X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LV3PR17MB7190.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b2eb89ee-8715-4c15-960a-08dda8f365bc X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jun 2025 14:22:29.3379 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f391105a-ad19-4c18-8bce-b08c4b953855 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: A1J0JeC5QClUwq5FJA1APdPFBMgbcJVzG2feJ/PuaEQuqz3TPF4o7nlm2BpHbkFBHLWx1+HOMLoXJdL+VcvDsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR17MB5736 Signed-off-by: Pierre Le Fevre =0A= ---=0A= libavformat/mpegtsenc.c | 27 +++++++++++++++++++++++++++=0A= libavformat/mux.c | 6 ++++--=0A= 2 files changed, 31 insertions(+), 2 deletions(-)=0A= =0A= diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c=0A= index 6935b71cfe..ba28e17696 100644=0A= --- a/libavformat/mpegtsenc.c=0A= +++ b/libavformat/mpegtsenc.c=0A= @@ -84,6 +84,7 @@ typedef struct MpegTSWrite {=0A= MpegTSSection pat; /* MPEG-2 PAT table */=0A= MpegTSSection sdt; /* MPEG-2 SDT table context */=0A= MpegTSSection nit; /* MPEG-2 NIT table context */=0A= + MpegTSSection scte35;=0A= MpegTSService **services;=0A= AVPacket *pkt;=0A= int64_t sdt_period; /* SDT period in PCR time base */=0A= @@ -443,6 +444,9 @@ static int get_dvb_stream_type(AVFormatContext *s, AVSt= ream *st)=0A= stream_type =3D STREAM_TYPE_PRIVATE_DATA;=0A= }=0A= break;=0A= + case AV_CODEC_ID_SCTE_35:=0A= + stream_type =3D STREAM_TYPE_SCTE_DATA_SCTE_35;=0A= + break;=0A= default:=0A= av_log_once(s, AV_LOG_WARNING, AV_LOG_DEBUG, &ts_st->data_st_warni= ng,=0A= "Stream %d, codec %s, is muxed as a private data strea= m "=0A= @@ -530,6 +534,13 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTS= Service *service)=0A= *q++ =3D 0xfc; // private_data_byte=0A= }=0A= =0A= + for (i =3D 0; i < s->nb_streams; i++) {=0A= + if(s->streams[i]->codecpar->codec_id=3D=3DAV_CODEC_ID_SCTE_35) {= =0A= + put_registration_descriptor(&q, MKTAG('C', 'U', 'E', 'I'));=0A= + break;=0A= + }=0A= + }=0A= +=0A= val =3D 0xf000 | (q - program_info_length_ptr - 2);=0A= program_info_length_ptr[0] =3D val >> 8;=0A= program_info_length_ptr[1] =3D val;=0A= @@ -1160,6 +1171,11 @@ static int mpegts_init(AVFormatContext *s)=0A= ts->nit.write_packet =3D section_write_packet;=0A= ts->nit.opaque =3D s;=0A= =0A= + ts->scte35.cc =3D 15;=0A= + ts->scte35.discontinuity=3D ts->flags & MPEGTS_FLAG_DISCONT;=0A= + ts->scte35.write_packet =3D section_write_packet;=0A= + ts->scte35.opaque =3D s;=0A= +=0A= ts->pkt =3D ffformatcontext(s)->pkt;=0A= =0A= /* assign pids to each stream */=0A= @@ -2195,6 +2211,17 @@ static int mpegts_write_packet_internal(AVFormatCont= ext *s, AVPacket *pkt)=0A= mpegts_write_pes(s, st, buf, size, pts, dts,=0A= pkt->flags & AV_PKT_FLAG_KEY, stream_id);=0A= return 0;=0A= + } else if (st->codecpar->codec_id =3D=3D AV_CODEC_ID_SCTE_35) {=0A= + uint8_t q[1024];=0A= + unsigned int len;=0A= +=0A= + len =3D pkt->size;=0A= + memcpy(q, pkt->data, len);=0A= +=0A= + ts->scte35.pid =3D ts_st->pid;=0A= +=0A= + mpegts_write_section(&ts->scte35, q, len);=0A= + return 0;=0A= }=0A= =0A= if (ts_st->payload_size && (ts_st->payload_size + size > ts->pes_paylo= ad_size ||=0A= diff --git a/libavformat/mux.c b/libavformat/mux.c=0A= index db3b6c2bfe..411c9674df 100644=0A= --- a/libavformat/mux.c=0A= +++ b/libavformat/mux.c=0A= @@ -325,7 +325,8 @@ static int init_muxer(AVFormatContext *s, AVDictionary = **options)=0A= }=0A= =0A= if (par->codec_type !=3D AVMEDIA_TYPE_ATTACHMENT &&=0A= - par->codec_id !=3D AV_CODEC_ID_SMPTE_2038)=0A= + par->codec_id !=3D AV_CODEC_ID_SMPTE_2038 &&=0A= + par->codec_id !=3D AV_CODEC_ID_SCTE_35)=0A= fci->nb_interleaved_streams++;=0A= }=0A= fci->interleave_packet =3D of->interleave_packet;=0A= @@ -959,7 +960,8 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AV= Packet *pkt,=0A= } else if (par->codec_type !=3D AVMEDIA_TYPE_ATTACHMENT &&=0A= par->codec_id !=3D AV_CODEC_ID_VP8 &&=0A= par->codec_id !=3D AV_CODEC_ID_VP9 &&=0A= - par->codec_id !=3D AV_CODEC_ID_SMPTE_2038) {=0A= + par->codec_id !=3D AV_CODEC_ID_SMPTE_2038 &&=0A= + par->codec_id !=3D AV_CODEC_ID_SCTE_35) {=0A= ++noninterleaved_count;=0A= }=0A= }=0A= --=0A= 2.39.5 (Apple Git-154)=0A= =0A= --===============2421708977402068551== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --===============2421708977402068551==--