From patchwork Tue Jan 16 14:36:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: aybe aybe X-Patchwork-Id: 45613 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8199:b0:199:de12:6fa6 with SMTP id pd25csp2025763pzb; Tue, 16 Jan 2024 06:36:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IGlX8eoLCzIFko/C6raCR11gfxoNlooFXy7YELvIjlFj+WSTyel97IkkD4kzYJiiezngfBY X-Received: by 2002:a17:906:154b:b0:a2d:bc64:52fb with SMTP id c11-20020a170906154b00b00a2dbc6452fbmr3384039ejd.34.1705415796151; Tue, 16 Jan 2024 06:36:36 -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 p9-20020a17090628c900b00a2d2368cd8asi3132925ejd.900.2024.01.16.06.36.35; Tue, 16 Jan 2024 06:36:36 -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=@hotmail.com header.s=selector1 header.b=izTBTf4e; 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 1608268D000; Tue, 16 Jan 2024 16:36:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2011.outbound.protection.outlook.com [40.92.90.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0805568CB0C for ; Tue, 16 Jan 2024 16:36:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BcypAVU/yVnir9PUD6JRhpUxfIzPUzTU0C9Rp3/6skXxCSP7KgdrS+cjrQNAfETWkupQF/Mf21OCv30iLelP7dKymksQChoQkM0O4xlSQQ7mMF3hrG2sp8hwPO8WR00dDFg/nQkr2UrGJUiHX0i1wYZOYnR2ieZOrlOY5jK7Hf0KZe3+EMP3HZhI4d73pagPOrg5BNft/+SefmRwsNMlDq3ohNK2EW+a/U1aMlzOEy7xvCwqH95EVj6FugVvcHU1zGDsnoPz7h6QbJ3Pv9GBIY5mAlNX88rsZyZlipKU8VO6fp8UrmcTrUDdktBSuFxNeSdbSfVsLmuOh61gaRwEJg== 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=cYYb5pbpr/x3vY/iFO7Zp9zIrdfV2WUI04FR9lms/74=; b=A+R4lPwqMCMoCgakve7ntPh5cuXrlzyk9+rvg8WUHnUpAF17hqH+FrgN/Oxod++YQou68HPtZA2V3PTbUPi7JaLirTPmbo7dh94zLLGofyyfk9muB/150NoMmrqOoSkLN6tkPUbgin8uRVgiNWEtkjNod3six6fa+1xXLRIQZ6sr+CDIBe6CJ4mYOGfL54ey02SvFoNKo4ySn3n53O/alWbyolqbBsaualwF1dG7AelYefr4/F9+35BU9XyQZLGutfYSDrIUsoh1Rl/Ds+53HlY0NBo5Tc+qg7u1bhDQnx9RDbyMcvzWe7nQSDURENmejxnGM4Va3tSql1Jrpi4KiA== 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=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cYYb5pbpr/x3vY/iFO7Zp9zIrdfV2WUI04FR9lms/74=; b=izTBTf4eGHT6vP7f6qp9mz4rkfZlrozoEXYZpnZjfQm37VZ197TQPM6XxikQyF7QdKiw3crw/nTaKW+GrtXF/kvB/99XOWWmQXgNkFiI4ywAKEp9+GFsEzTHqwYEL/WCoNJiWe7opIOycI067xOHACskj7aJMZ9OrkfDi+4pB3dh2wW2BXTbWnWPVcyKZIanPoWraSjNph9xO9C4gGarTfE/laTtLEiDrGisEdfxgHaxlQFmiHi/4XwUISt7HiE+bx2lcltXfdWIRgJ/QyS3PRlaBrQTD9OQb91tp7PohbNJKhgXSmmYr0ddAno6uzLJU+H7G+PMDgsKKIuXqh+RbA== Received: from PAVPR08MB9795.eurprd08.prod.outlook.com (2603:10a6:102:31f::12) by GV1PR08MB10605.eurprd08.prod.outlook.com (2603:10a6:150:166::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.28; Tue, 16 Jan 2024 14:36:24 +0000 Received: from PAVPR08MB9795.eurprd08.prod.outlook.com ([fe80::83f1:da95:eae9:6b96]) by PAVPR08MB9795.eurprd08.prod.outlook.com ([fe80::83f1:da95:eae9:6b96%7]) with mapi id 15.20.7181.022; Tue, 16 Jan 2024 14:36:24 +0000 From: aybe aybe To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH 1/2] avformat/psxstr: infer video FPS using sector LBA Thread-Index: AQHaSIlhE9vLF2sJcUWR7asI5XS9Ww== Date: Tue, 16 Jan 2024 14:36:24 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [lXjaOBwEdZAOwk751HSztS9yhivO/Zb85/Ps5XqyE7Z3xkUne3VPp9uV5Dsb8LQ2] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR08MB9795:EE_|GV1PR08MB10605:EE_ x-ms-office365-filtering-correlation-id: a4f0fbec-4c58-4194-f9d4-08dc16a083c0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nITi1gPwzD42iSxD0cfxPczsTdKJXjF8nJ55AGv4gRoiZK+2I1l6tJyyvLoi3Ct/FDBH9MBj/F2gCEXn3FKVURMGWwsVNKgZcmNplXvdGyhssP0TMECSlmJLLb93ilA3ElNczbII5LgSwpoRqZq5f5I3pmM4xpHq170CO9JvhQrYgewcST4q+/ohTzxytfu7jI1Qa+5oKI98oMo2oXZFQIWWTBHA73FHwZhV8GMFimfp3U6BHWIYrnpoQH2vruc+scscGKh242Wy89z5OCZftSmX5J8EUsHysAMaSYvIl86GyTALnCiihkhx0CP9XFfoxhyZ421tP31q2rODF3C8kKOA1HDblbA5mnkoZk7QRs6XFzTvlebNneR3+hoY6MSOIKzyNTsPUke7DecKgT5LiVrExowRn2piLE7QKyJdoR1e42GT15bwjxdooeM9muibmePsx3sPnJelTv766HKjb7zebUA7Izc8F7IxPWmornceA9qUIYc9JWlpM8JGrVJAl8LqIrSlTz7yA+epLtgfnt8xVpfNYA813EpiRMLFD7rLLTkhYPoaKynFGtvUsNI/ x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?25BjhcjmeQQGH05COF0zbYayhBbb?= =?utf-8?q?FFBVDXV1eCZmU4ddtFVI591cstXVpeFTFGt4vk6X3Cs0Onxa582SFVzTyy5uOtcdf?= =?utf-8?q?J1fRG+lj1ETnzlelDbd+COkwRfoGY5r2GLkiO9SPo7tT4tIbZoehK1DxNejXf7qWC?= =?utf-8?q?XR38eCoy65mI/3y3ZpcCcDLlw5MBUpHlQT9weQFzR9kWIXKMUFEUWfZmBEkGDq+NQ?= =?utf-8?q?KKclb3u+1YvIEUbxd+fi/ZzdKAYqnVM1MJiLQjtQmX6F0I+8+/SZyMEPKKfMhsK+4?= =?utf-8?q?hBWR9AsiftWiwLovm62Up1truewBJOBQC1ifN5e+CtJhcBxVtntvhMdRkzv8z0pOs?= =?utf-8?q?oSI5hNdBSY4cC1PzXbkQS/iEiTYsayhmBfJkqfcqbzYFSn0BDzk6/3HhsKBumh/Nv?= =?utf-8?q?M/PEVfgHsqWpAkwZlCbYNR54qUafofKT9JVtyKK8xb8+iZRgde/g4lh7REwXHP3Oe?= =?utf-8?q?zKZ9kRW1xYbr0YNvqgbTSSIrzNhW3V/YHgKpm6mtOxyGAzveQKqcICTtHZrPenePZ?= =?utf-8?q?Tejkf7R6mHW5i/zcnhdqleSJm2oLSjbaM1nVqjrNfnPEFU0oVc4dJ4jHDkMnX5imh?= =?utf-8?q?ruq/5qaVb9nn9qIIwFnleCdoUNp/YDpHWM6e7brNAbdADPwJ2dDsYn49pgjLunUTc?= =?utf-8?q?BoGMm+xWmTtsTqr1scusaqvdMJObcQoKbNQwZcpmDH1RlcI0bvNlgvCnvUkHI8L6S?= =?utf-8?q?bxrHxKU3Ge8xNJobGjvWZ5+dTZrdtEXAtTc5KpEQ+hYRn9mRmFwUiTP2lawUaycCs?= =?utf-8?q?BR7VJlNRO8g01Jg5hI0zqAVF5S0tBd9UNORAcxGhU3Zq9MWiUVK+vVa/Zk9XmOz24?= =?utf-8?q?G27MS2pK1aH2WbwFW5iq/2CGyApYY+a7ipX2LZfTSz0XBl68zvbH4PWdvcFpddc3q?= =?utf-8?q?WPHa6fyrr2Q79/4EC1A5+mdHfTiCQHfENwL6ZQevRlkNGs08iexRK9sh1yj2+PhFX?= =?utf-8?q?E4BvhW8Fdljn42sCPu70FbBjMD4MX7Xw7RgJqAo2PS01fzGoen8r2oK2vAx9183vj?= =?utf-8?q?JChvEFsDOxg6o8bE9Q3yY0KrV5i/qwN63vMoLyjhQodrniRxBElnTe2g5moYBHj1s?= =?utf-8?q?X7qebUYNRyeTq0w9P7jgjgMN1mTUg2g9WTXRgm0mWCnfaB/mM4t6xh/kiqo3Veznk?= =?utf-8?q?v/IoF18DWg5LU3Z7F/QHVYKZ+Se7LzVfaf+qU1QyZrnC9KYqbnv8jfwHWui4DHs0b?= =?utf-8?q?Y2TXTcSF+UHjjQMYTSCm2B/eYw8HHlA6cVE/bCQ=3D=3D?= Content-ID: <7954176715A09349BE898FF603ACEE16@sct-15-20-4755-11-msonline-outlook-83b42.templateTenant> MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-83b42.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR08MB9795.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: a4f0fbec-4c58-4194-f9d4-08dc16a083c0 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2024 14:36:24.0435 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB10605 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/psxstr: infer video FPS using sector LBA 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: Hq0ubnJNrfap Signed-off-by: aybe --- libavformat/psxstr.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) -- 2.41.0.windows.1 diff --git a/libavformat/psxstr.c b/libavformat/psxstr.c index 306a690f52..c718fb6daf 100644 --- a/libavformat/psxstr.c +++ b/libavformat/psxstr.c @@ -65,6 +65,9 @@ typedef struct StrDemuxContext { /* a STR file can contain up to 32 channels of data */ StrChannel channels[32]; + + /* the index for the first frame (sector, LBA units)*/ + int64_t first_frame_index; } StrDemuxContext; static const uint8_t sync_header[12] = {0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00}; @@ -150,18 +153,51 @@ static int str_read_header(AVFormatContext *s) str->channels[i].audio_stream_index= -1; } + str->first_frame_index = 0; + s->ctx_flags |= AVFMTCTX_NOHEADER; return 0; } +static uint8_t bcd_to_dec(uint8_t bcd) +{ + uint8_t dec = (bcd & 0xF) + (((bcd >> 4) & 0xF) * 10); + + return dec; +} + +static int32_t msf_to_lba(uint8_t m, uint8_t s, uint8_t f) +{ + int32_t lba = 0; /* int because it can be negative! */ + + m = bcd_to_dec(m); + s = bcd_to_dec(s); + f = bcd_to_dec(f); + + lba = (((m * 60 + s) * 75) + f) - 150; + + return lba; +} + +static int32_t str_get_frame_lba(uint8_t sector[2352]) +{ + uint8_t m = sector[0xC]; + uint8_t s = sector[0xD]; + uint8_t f = sector[0xE]; + + int32_t lba = msf_to_lba(m, s, f); + + return lba; +} + static int str_read_packet(AVFormatContext *s, AVPacket *ret_pkt) { AVIOContext *pb = s->pb; StrDemuxContext *str = s->priv_data; unsigned char sector[RAW_CD_SECTOR_SIZE]; - int channel, ret; + int channel, ret, frame_lba; AVPacket *pkt; AVStream *st; @@ -200,10 +236,12 @@ static int str_read_packet(AVFormatContext *s, st = avformat_new_stream(s, NULL); if (!st) return AVERROR(ENOMEM); - avpriv_set_pts_info(st, 64, 1, 15); + avpriv_set_pts_info(st, 64, 1, 150); /* 150 sectors at 2x speed */ str->channels[channel].video_stream_index = st->index; + str->first_frame_index = str_get_frame_lba(sector); + st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MDEC; st->codecpar->codec_tag = 0; /* no fourcc */ @@ -223,6 +261,8 @@ static int str_read_packet(AVFormatContext *s, return ret; memset(pkt->data, 0, sector_count*VIDEO_DATA_CHUNK_SIZE); + frame_lba = str_get_frame_lba(sector); + pkt->pts = frame_lba - str->first_frame_index; pkt->pos= avio_tell(pb) - RAW_CD_SECTOR_SIZE; pkt->stream_index = str->channels[channel].video_stream_index;