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 5AD4B49850 for ; Sat, 20 Apr 2024 13:18:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ADF2968D1B3; Sat, 20 Apr 2024 16:18:49 +0300 (EEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2030.outbound.protection.outlook.com [40.92.66.30]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0E4A368D12C for ; Sat, 20 Apr 2024 16:18:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O45jnPSVYm89JbPD2dpZNj0CcAFZE/fmnvpI7tIWRzOu6BdSGNhEA3ZPghy1zGLAfpFbvg+wGgLImDJBnyWR7OVsCvklAt8C6FmrrfOsSfqbQh8nMxNwScP+MmARkIaxPyC0YAhf7ZwGo2Mv/HJ0r4bpdn3aal4xitJm3BY7AXr5db5dLFazVMIxXlb13kimWRZJc6MnbPnY6UicbLCunoXOKw7dnTIbFLo0wKzPRU3fsdByWM12SAkoobhVkJa/p2369kQirw7ZRdk/r+QDsOw5kWFkVacLzdwI+y/5sLh7IW5zmHSGlda22T72w+PsUfT8F+rhjOCfYrF7mkDNPA== 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=G8X7Z0e7ITmE/c+ivoKwSmhAaVgeqfHxha5TTRJUJ/U=; b=Dbd5Cly2DKNw+7l2HByjGCn0BJLIvviVFQO90tKuHYq0ZJOG0RvoHA9YffcrXJbNsvY/wb2j0UfIY2j565e32YgBCrUewS0OoBUbCn6UkmJyBsYcLBAHTJTiEMPwDuC2SHebzLKpEcvLJ54cB47M7fr+XiMWid32KpX9NXzEqIwW2as4a3wXDsScq2lTDFGMNWS6Ae0HLXXK7zXHczTAQVg6LhMCehyP2hmoxbl9JtyZ7iBh1Utbdx8AT/8wo27gcLshr5R9jNvneMabzhjAH5ctF0xMUGVrF+D8efbpEXvYuako5/gCt3VS3d+tKJPgpLYL8dHmvr6GP8UYLMfpBg== 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=G8X7Z0e7ITmE/c+ivoKwSmhAaVgeqfHxha5TTRJUJ/U=; b=M0H9cefzDA7+K4+bcMvR0ul8K9oByF613caosKDyPXnI1+Qs3UroJZJks8IkbC52h/4xNPgLH90vgSs3kDSG1/5HiQR22HNwbJotcjGpiM3CVf3EKfhZVMaNazJ/trTdda5YpwyL70WR8xQaG1kYjbYBI2clZ3EKWNMR58SA7dXhStc8RTEHXp9jr0KiYZPwauVKjEnRLUBgaPgJldlWiRgNCPm+S1kXhavMEdSasuyqrSXHDGYUIOsBNDCP/H+GvMYPa71cs6oJhbzL/SY0YxgCEG5K5WENwLGNchrBcvABUGEju97MfQaojpfZMPW9Dk3fXqriPH/gFMWldJKe3g== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0035.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:14e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Sat, 20 Apr 2024 13:18:41 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb%3]) with mapi id 15.20.7409.042; Sat, 20 Apr 2024 13:18:41 +0000 Message-ID: Date: Sat, 20 Apr 2024 15:18:39 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240420114835.35645-1-stefasab@gmail.com> <20240420114835.35645-3-stefasab@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240420114835.35645-3-stefasab@gmail.com> X-TMN: [FgBDO5SA9suRMIbEIcXX9DBuzg9RHs4hQtBPO11sOkA=] X-ClientProxiedBy: ZR0P278CA0172.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <3eb0d9e1-4ba0-411e-9f62-affabfc7fe10@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0035:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ceb7fa6-388e-436d-a275-08dc613c6586 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2We3evfsUeEY0RbJOoVu8s/9atDMvaGC4sPosoVnmHFmitddu36uA8jU0gOZk1dFFc4GiiPjlq6mNRsJNDE2+LENIvAUFE1wGgVpp6xuq9a/M+EOqXvcgcDcHwyAlju4jilacgHLDpaxmlOxZoskXYH1w5Zfp2BJws7zKGB23hFMJFetH+KCXQ8L42UT7qKSjq9R9/ngDcWhnbgXDpOfJqkUPK/h5b9ltJi7v1HXEtw76a1hadnn2/YxvmiWGM1LUPo8/GbPet8RZXEHXPuVYDEeteGpv1BEx4SOWpwyT6oJ6zsQ20wiW+XxIKEqZ6+1is9p2MEoagrwIHuNNBoSdnzOU5Ym3OmiVJLgjMgpQMwxzPc4+52t6r1jNAn0/zCo8rSem9gheSN3ymZ4Uwep3lW4/4neSR9fKzqwqvooSNWZo+DDCodPZs/yaf1RHW5H5Bbh5gkePnATG8ge9w4562zlskqwDynxgke8CSzbCMXwi/4Q7RTDmkje4EqNXjWWSWGJhlZofVHm6GFnLUlZnY1BJCg2pzS5dOYn+/bZeTZ0wZAKpwEgr/8oGYkgrbKU X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z0ZJUWU5ZWo2ZUZJYUc0QVU2WmF0VFFMaXdJaUR6MU5HUlJheFI1eFJKZTU4?= =?utf-8?B?UVBOdGp0cXhITmVoS2ExVW9Na3NNTkcwWWJUZ1FJeFhDM3RTbmZ1bTVaSDJy?= =?utf-8?B?enk2V1VMWlM4R0M1dDhtaDdrQ1phb25McURUY2NmaUw4SHVJTWRnYTRIajV6?= =?utf-8?B?ck04cmpoSHd5L1RNU0Zwb3Naa0NmVEFPNlgvYVQzTDlUTWdWTEFyb3JlZDJh?= =?utf-8?B?eXlyRnh6VnUxdStjREJnU1VVNG1nYW5YaWt1YVZsSWx1M3crQ0ZnM2traU1k?= =?utf-8?B?dzVZSzc0QW1wdDhMTi80djdlZ29CU24raTBEMEFnTXJoSGJaWDNHUWNrN21s?= =?utf-8?B?VTQ0SU40NDZTWW1LQlVURUxJVWJGMnQ0d3pPSnU2WXI4NC9sdEJTYUxYenUy?= =?utf-8?B?cHZBcWo3RnUzM2NlOVRjV0VnSXM1YXRCdFd0YjU5VmVOQlpWU3BMYjNFY0Na?= =?utf-8?B?NDV4UnB6QlR2ckN1VVB3THdrU25zOFJnYUZmd3FFSS9iTGpoSlUzaWdPYVJJ?= =?utf-8?B?NGNSTWNaTUZ6aGZ3QXpoVE15dGV3SnhEL2lxb1YrQ0VSeFgwckZYM2J5WmVU?= =?utf-8?B?aUFSb20rS21vMkVzY3BEdVpYSWEwL1l6QTBEWHdCQmNVNUNqdlVsRmcvR3Jx?= =?utf-8?B?akxKT29wRkV3d2F6bW1iKzFsblNNQlJnNjBZUTVJY0FGQVowdDYrSEFtTFVh?= =?utf-8?B?MUR6cVRIMGdCWnd3bzl3VGppTDJ2QXpUQnFkWm5jeXg2cnpDenlacmtGMEhh?= =?utf-8?B?Ly9vQnlyMWgxZXdjUkNwVXdOS3hvVGZod2JEbUlFd1FNK0h1NzlzQjVUQk04?= =?utf-8?B?ZXBuUitTSVVBS3VQTzAydEFVNngyeWtxR1dsQ2U5eWlDZk53aTUxZkV6T1Ez?= =?utf-8?B?bE4ydzNCUkNuTXRCRGVrY1hqUlQxWXpBT1lDa2lYZis1OURWeXdGU0g0a0xO?= =?utf-8?B?Y2VhQ0RvbU02Vzl5M1JaS1JqNHpsU2ZZaU1EMjIyeDgwVVM5TENta2VMbmdw?= =?utf-8?B?NXdoUzJJdFI2ZEcraDVBL0hpTllnOEFLWGttRWpoaDlQRlJVQjhFL3F0dUV2?= =?utf-8?B?QStzQUxQQmxRelhlQ0JHQ1ZhcWRweDhXZFZqc0tJV0VaK0ZBbUNxNUZieGdT?= =?utf-8?B?ajFqY2dzN0ZKSUhsQ0x1bS9qbTVMZ00rU3p0KzVPNTdvcGNGcms3dlhRczNr?= =?utf-8?B?b295SHRzWkdJT1pQVi9TWlVIR1lqOTYvUTROUW1laWFKOEFlRW9Xb3ROZjFT?= =?utf-8?B?Z3NzNHNQN3NIWVZQTXdNNHZ2NnBjc3ByeFJRN21oSnpFZWVsK0llbVJMZDk3?= =?utf-8?B?Zzh4ZnVKTnIwMUF1Tm84WDZDaFFUdmRtU1VqKzB3MDcxL3R5bXp5TllsT1pR?= =?utf-8?B?em9tbXE1dXIxYktmbS8wVmJ5RTFxMVYxNUo4Z3pITm1rTldHc0NwcHlDRVFE?= =?utf-8?B?eng3U05wSXVaUVI1UWZIclZKN1NPZzBHMThzYzF3aGZORThucTNhRDhTamxJ?= =?utf-8?B?TXd5d3kyUlZIM1BPSkFUc0VzRiswRkhjWUE1d0xaQUZhWUVRVitKTGJJM242?= =?utf-8?B?UVErK09rREMxcGtwRGhJcm9acEc5TFg1cHFFdjIzU0hhdHhYeW5RVlloUUVX?= =?utf-8?B?YlBJYWU1aGJBZzN2RWh6bHFrRCt2NzR2c1VHU2dzSmN2L0FXdDBGZFRmNmdU?= =?utf-8?B?VDhjdmdMOXZKeTAwWU1yay9IVVdqZ3o1NkFRRXNjS1BxRlhNQzVLZ1FnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ceb7fa6-388e-436d-a275-08dc613c6586 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2024 13:18:41.1150 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0035 Subject: Re: [FFmpeg-devel] [PATCH 2/3] lavf/mkvtimestamp_v2: review implementation to match mkvextract behavior 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: Stefano Sabatini: > Harmonize internal implementation with the mkvextract behavior: > - print PTS in place of DTS values > - ignore NOPTS values > - sort PTS values > --- > libavformat/mkvtimestamp_v2.c | 69 +++++++++++++++++++++++++++++++++-- > 1 file changed, 65 insertions(+), 4 deletions(-) > > diff --git a/libavformat/mkvtimestamp_v2.c b/libavformat/mkvtimestamp_v2.c > index 1eb2daf10a..c6446ed489 100644 > --- a/libavformat/mkvtimestamp_v2.c > +++ b/libavformat/mkvtimestamp_v2.c > @@ -22,30 +22,91 @@ > #include "avformat.h" > #include "internal.h" > #include "mux.h" > +#include "libavutil/qsort.h" > + > +#define PTSS_MAX_SIZE 128 > +#define PTSS_HALF_SIZE (PTSS_MAX_SIZE >> 1) > + > +struct MkvTimestampContext { > + int64_t ptss[PTSS_MAX_SIZE]; > + size_t ptss_size; > +}; > > static int write_header(AVFormatContext *s) > { > - static const char *header = "# timecode format v2\n"; > + static const char *header = "# timestamp format v2\n"; > avio_write(s->pb, header, strlen(header)); > avpriv_set_pts_info(s->streams[0], 64, 1, 1000); > + > return 0; > } > > +static int cmp_int64(const void *p1, const void *p2) > +{ > + int64_t left = *(const int64_t *)p1; > + int64_t right = *(const int64_t *)p2; > + return FFDIFFSIGN(left, right); > +} > + > static int write_packet(AVFormatContext *s, AVPacket *pkt) > { > char buf[256]; > + int i; > + struct MkvTimestampContext *m = s->priv_data; > + > if (pkt->stream_index) > av_log(s, AV_LOG_WARNING, "More than one stream unsupported\n"); > - snprintf(buf, sizeof(buf), "%" PRId64 "\n", pkt->dts); > - avio_write(s->pb, buf, strlen(buf)); > + > + if (pkt->pts == AV_NOPTS_VALUE) { > + av_log(s, AV_LOG_WARNING, "Found PTS with no value, ignored\n"); > + return 0; > + } > + > + if (m->ptss_size > PTSS_MAX_SIZE) { > + // sort all PTSs > + AV_QSORT(m->ptss, PTSS_MAX_SIZE, int64_t, cmp_int64); > + > + // write only the first half and copy the second half to the > + // beginning of the array > + for (i = 0; i < PTSS_HALF_SIZE; i++) { > + snprintf(buf, sizeof(buf), "%" PRId64 "\n", m->ptss[i]); > + avio_write(s->pb, buf, strlen(buf)); > + m->ptss[i] = m->ptss[i + PTSS_HALF_SIZE]; > + } > + > + m->ptss_size = PTSS_HALF_SIZE; > + } else { > + m->ptss[m->ptss_size++] = pkt->pts; > + } > + > + return 0; > +} > + > +static int write_trailer(struct AVFormatContext *s) > +{ > + struct MkvTimestampContext *m = s->priv_data; > + char buf[256]; > + int i; > + > + // sort all PTSs > + AV_QSORT(m->ptss, m->ptss_size, int64_t, cmp_int64); > + > + /* flush remaining timestamps */ > + for (i = 0; i < m->ptss_size; i++) { > + snprintf(buf, sizeof(buf), "%" PRId64 "\n", m->ptss[i]); > + avio_write(s->pb, buf, strlen(buf)); > + } > + > return 0; > } > > const FFOutputFormat ff_mkvtimestamp_v2_muxer = { > .p.name = "mkvtimestamp_v2", > - .p.long_name = NULL_IF_CONFIG_SMALL("mkvtoolnix v2 timecode format"), > + .p.long_name = NULL_IF_CONFIG_SMALL("mkvtoolnix v2 timestamp format"), > .p.audio_codec = AV_CODEC_ID_NONE, > .p.video_codec = AV_CODEC_ID_RAWVIDEO, > .write_header = write_header, > .write_packet = write_packet, > + .write_trailer = write_trailer, > + .priv_data_size = sizeof(struct MkvTimestampContext), > }; 1. This does not match mkvextract behaviour. mkvextract does not force a 1ms timebase. 2. AV_QSORT should only be used in speed-critical code, which this here is definitely not. 3. I still don't think that this muxer should exist at all. - Andreas _______________________________________________ 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".