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 E77CC486F7 for ; Tue, 16 Jan 2024 14:36:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D08A368CFE4; Tue, 16 Jan 2024 16:36:32 +0200 (EET) 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?B?MjVCamhjam1lUVFHSDA1Q09GMHpiWWF5aEJiYkZGQlZEWFYxZUNabVU0ZGR0?= =?utf-8?B?RlZJNTkxY3N0WFZwZUZURkd0NHZrNlgzQ3MwT254YTU4MlNGVnpUeXk1dU90?= =?utf-8?B?Y2RmSjFmUkcrbGoxRVRuemxlbERiZCtDT2t3UmZvR1k1cjJHTGtpTzlTUG83?= =?utf-8?B?dFQ0dEliWm9laEsxRHhOZWpYZjdxV0NYUjM4ZUNveTY1bUkvM3kzWnBjQ2NE?= =?utf-8?B?TGx3NU1CVXBIbFFUOXdlUUZ6UjlrV0lYS01VRkVVV2ZabUJFa0dEcStOUUtL?= =?utf-8?B?Y2xiM3UrMVl2SUVVYnhkK2ZpL1p6ZEtBWXFuVk0xTUppTFFqdFFtWDZGMEkr?= =?utf-8?B?OCsvU1p5TUVQS0tmTWhzSys0aEJXUjlBc2lmdFdpd0xvdm02MlVwMXRydWV3?= =?utf-8?B?QkpPQlFDMWlmTjVlK0N0SmhjQnhWdG50dmhNZFJrenY4ejBwT3NvU0k1aE5k?= =?utf-8?B?QlNZNGNDMVB6WGJrUVMvaUVpVFlzYXlobUJmSmtxZmNxYnpZRlNuMEJEems2?= =?utf-8?B?LzNIaHNLQnVtaC9Odk0vUEVWZmdIc3FXcEFrd1psQ2JZTlI1NHFVYWZvZktU?= =?utf-8?B?OUpWdHlLSzh4YjgraVpSZ2RlL2c0bGg3UkV3WEhQM09lektaOWtSVzF4WWJy?= =?utf-8?B?MFlOdnFnYlRTU0lyek5oVzNWL1lIZ0twbTZtdE94eUdBenZlUUtxY0lDVHRI?= =?utf-8?B?WnJQZW5lUFpUZWprZjdSNm1IVzVpL3pjbmhkcWxlU0ptMm9MU2piYU0xblZx?= =?utf-8?B?anJOZm5QRUZVMG9WYzRkSjRqSERrTW5YNWltaHJ1cS81cWFWYjlubjlxSUl3?= =?utf-8?B?Rm5sZUNkb1VOcC9ZRHBIV002ZTdick5BYmRBRFB3SjJkRHNZbjQ5cGdqTHVu?= =?utf-8?B?VVRjQm9HTW0reFdtVHRzVHFyMXNjdXNhcXZkTUpPYmNRb0tiTlF3WmNwbURI?= =?utf-8?B?MVJsY0kwYnZObGd2Q252VWtISThMNlNieHJIeEtVM0dlOHhOSm9iR2p2V1o1?= =?utf-8?B?K2RUWnJkdEVYQXRUYzVLcEVRK2hZUm45bVJtRndVaVRQMmxhd1VheWNDc0JS?= =?utf-8?B?N1ZKbE5STzhnMDFKZzVoSTB6cUFWRjVTMHRCZDlVTk9SQWN4R2hVM1pxOU1X?= =?utf-8?B?aVVWSyt2VmEvWms5WG1PejI0RzI3TVMycEsxYUgyV2J3Rlc1aXEvMkNHeUFw?= =?utf-8?B?WVkrYTdpcFgyTFpmVFN6MFhCbDY4enZiSDRQV2R2Y0ZwZGRjM3FXUEhhNmZ5?= =?utf-8?B?cnIyUTc5LzRFQzFBNSttZEhmVGlDUUhmRU53TDZaUWV2UmxrTkdzMDhpZXhS?= =?utf-8?B?SzlzaDF5ajIrUGhGWEU0QnZoVzhGZGxqbjQyc0NQdTcwRmJCak1ENE1YN1h3?= =?utf-8?B?N1JnSnFBbzJQUzAxZnpHb2VuOHIyb0sydkF4OTE4M3ZqSkNodkVGc0RPeGc2?= =?utf-8?B?bzhiRTlRM3lZMEtyVjVpL3F3TjYzdk1vTHlqaFFvZHJuaVJ4QkVsblRlMmc1?= =?utf-8?B?bW9ZQkhqMXNYN3FlYlVZTlJ5ZVRxMHc5UDdqZ2pnTU4xbVRVZzJnOVdUWFJn?= =?utf-8?B?bTBtV0NuZmFCL21NNHQ2eGgva2lxbzNWZXpua3YvSW9GMThEV2c1TFUzWjdG?= =?utf-8?B?L1FIVllLWitTZTdMelZmYWYrcVUxUXlacm5DOUtZcWJudjhqZndIV3VpNERI?= =?utf-8?B?czBiWTJUWFRjU0YrVUhqalFNWVRTQ20yQi9lWXc4SEhsQTZjVkUvYkNRPT0=?= 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 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: aybe --- libavformat/psxstr.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) 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; -- 2.41.0.windows.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".