Skip to content

Commit 1530abd

Browse files
Merge branch 'master' into lto
2 parents 8f9cc16 + 595b8f8 commit 1530abd

File tree

2 files changed

+365
-0
lines changed

2 files changed

+365
-0
lines changed

psp/src/sys/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ pub use net::*;
104104
mod font;
105105
pub use font::*;
106106

107+
mod psmf;
108+
pub use psmf::*;
109+
107110
// These are not found (likely because this was tested in user mode on a PSP-2000).
108111
// pub mod sircs;
109112
// pub mod codec;

psp/src/sys/psmf.rs

Lines changed: 362 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,362 @@
1+
/// Playstation Movie Format
2+
///
3+
/// This module contains the imports for the Playstation Movie Format routines.
4+
///
5+
/// Source note:
6+
///
7+
/// NIDs and functions from PPSSPP,
8+
/// sce datatypes pulled from Demo Disc for PSP Vol.1 (Japan)
9+
use core::ffi::c_void;
10+
11+
#[repr(C)]
12+
#[derive(Debug, Copy, Clone)]
13+
pub struct ScePsmf_GroupingPeriod {
14+
pub length_grouping_period: [u8; 4usize],
15+
pub msb_groupingperiod_start_time: [u8; 2usize],
16+
pub groupingperiod_start_time: [u8; 4usize],
17+
pub msb_groupingperiod_end_time: [u8; 2usize],
18+
pub groupingperiod_end_time: [u8; 4usize],
19+
pub reserved: u8,
20+
pub number_of_groups: u8,
21+
}
22+
23+
#[repr(C)]
24+
#[derive(Debug, Copy, Clone)]
25+
pub struct ScePsmf_Group {
26+
pub length_group: [u8; 4usize],
27+
pub reserved: u8,
28+
pub number_of_streams: u8,
29+
}
30+
31+
#[repr(C)]
32+
#[derive(Debug, Copy, Clone)]
33+
pub struct ScePsmf_SequenceInfo_Video {
34+
pub horizontal_size: i32,
35+
pub vertical_size: i32,
36+
}
37+
38+
#[repr(C)]
39+
#[derive(Debug, Copy, Clone)]
40+
pub struct ScePsmf_GroupStream {
41+
pub stream_id: u8,
42+
pub private_stream_id: u8,
43+
pub p_std_buffer_scale_and_size: [u8; 2usize],
44+
pub ep_map_for_one_stream_id_start_address: [u8; 4usize],
45+
pub number_of_ep_entries: [u8; 4usize],
46+
}
47+
48+
#[repr(C)]
49+
#[derive(Debug, Copy, Clone)]
50+
pub struct ScePsmf_EP {
51+
pub picture_copy_and_msb_pts_start: [u8; 2usize],
52+
pub pts_ep_start: [u8; 4usize],
53+
pub rpn_ep_start: [u8; 4usize],
54+
}
55+
56+
#[repr(C)]
57+
#[derive(Debug, Copy, Clone)]
58+
pub struct ScePsmf_EntryPoint {
59+
pub pts_ep_start: u32,
60+
pub ep_start_offset: u32,
61+
}
62+
63+
#[repr(C)]
64+
#[derive(Debug, Copy, Clone)]
65+
pub struct ScePsmf {
66+
pub type_: i32,
67+
pub grouping_period_id: i32,
68+
pub group_id: i32,
69+
pub psmf_stream_id: i32,
70+
pub header: *mut c_void,
71+
pub sequence_info: *mut c_void,
72+
pub current_grouping_period: *mut c_void,
73+
pub current_group: *mut c_void,
74+
pub current_stream: *mut c_void,
75+
pub current_ep_map: *mut c_void,
76+
}
77+
78+
#[repr(C)]
79+
#[derive(Debug, Copy, Clone)]
80+
pub struct ScePsmf_SequenceInfo {
81+
pub length: [u8; 4usize],
82+
pub msb_presentation_start_time: [u8; 2usize],
83+
pub presentation_start_time: [u8; 4usize],
84+
pub msb_presentation_end_time: [u8; 2usize],
85+
pub presentation_end_time: [u8; 4usize],
86+
pub mux_rate_bound: [u8; 4usize],
87+
pub std_delay_bound: [u8; 4usize],
88+
pub number_of_total_stream: u8,
89+
pub number_of_grouping_period: u8,
90+
}
91+
92+
#[repr(C)]
93+
#[derive(Debug, Copy, Clone)]
94+
pub struct ScePsmf_SequenceInfo_Audio {
95+
pub channel_configuration: i32,
96+
pub sampling_frequency: i32,
97+
}
98+
99+
#[repr(C)]
100+
#[derive(Copy, Clone)]
101+
pub struct ScePsmf_Header {
102+
pub type_indicator: [u8; 4usize],
103+
pub version_number: [u8; 4usize],
104+
pub stream_chunk_start_address: [u8; 4usize],
105+
pub stream_chunk_size: [u8; 4usize],
106+
pub reserved: [u8; 64usize],
107+
}
108+
109+
#[repr(C)]
110+
#[derive(Copy, Clone)]
111+
pub struct PsmfData {
112+
pub version: u32,
113+
pub header_size: u32,
114+
pub header_offset: u32,
115+
pub stream_size: u32,
116+
pub stream_offset: u32,
117+
pub stream_num: u32,
118+
}
119+
120+
#[repr(C)]
121+
#[derive(Copy, Clone)]
122+
pub struct PsmfPlayerData {
123+
pub video_codec: i32,
124+
pub video_stream_num: i32,
125+
pub audio_codec: i32,
126+
pub audio_stream_num: i32,
127+
pub play_mode: i32,
128+
pub play_speed: i32,
129+
}
130+
131+
#[repr(C)]
132+
#[derive(Copy, Clone)]
133+
pub struct PsmfVideoData {
134+
pub frame_width: i32,
135+
pub display_buf: u32,
136+
pub display_pts: u32,
137+
}
138+
139+
#[repr(C)]
140+
#[derive(Copy, Clone)]
141+
pub struct PsmfInfo {
142+
pub last_frame_ts: u32,
143+
pub num_video_streams: i32,
144+
pub num_audio_steams: i32,
145+
pub num_pcm_streams: i32,
146+
pub player_version: i32,
147+
}
148+
149+
#[repr(C)]
150+
#[derive(Copy, Clone)]
151+
pub struct PsmfPlayer {
152+
pub file_handle: i32,
153+
pub file_offset: u32,
154+
pub read_size: i32,
155+
pub stream_size: i32,
156+
pub temp_buf: [u8; 0x10000],
157+
pub video_codec: i32,
158+
pub video_stream_num: i32,
159+
pub audio_codec: i32,
160+
pub audio_stream_num: i32,
161+
pub play_mode: i32,
162+
pub play_speed: i32,
163+
pub total_duration_timestamp: u64,
164+
pub display_buffer: i32,
165+
pub display_buffer_size: i32,
166+
pub playback_thread_priority: i32,
167+
pub total_video_streams: i32,
168+
pub total_audio_streams: i32,
169+
pub player_version: i32,
170+
pub video_step: i32,
171+
pub warm_up: i32,
172+
pub seek_dest_timestamp: i64,
173+
pub video_width: i32,
174+
pub video_height: i32,
175+
}
176+
177+
#[repr(u32)]
178+
#[derive(Debug, Copy, Clone)]
179+
pub enum PsmfConfigMode {
180+
Loop,
181+
PixelType,
182+
}
183+
184+
#[repr(u32)]
185+
#[derive(Debug, Copy, Clone)]
186+
pub enum PsmfPlayerMode {
187+
Play,
188+
SlowMotion,
189+
StepFrame,
190+
Pause,
191+
Forward,
192+
Rewind,
193+
}
194+
195+
#[repr(u32)]
196+
#[derive(Debug, Copy, Clone)]
197+
pub enum PsmfPlayerStatus {
198+
None = 0,
199+
Init = 1,
200+
Standby = 2,
201+
Playing = 4,
202+
Error = 0x100,
203+
PlayingFinished = 0x200,
204+
}
205+
206+
psp_extern! {
207+
#![name = "scePsmf"]
208+
#![flags = 0x4001]
209+
#![version = (0x00, 0x00)]
210+
211+
#[psp(0xC22C8327)]
212+
pub fn scePsmfSetPsmf(psmf: &ScePsmf, psmf_data: &PsmfData) -> u32;
213+
214+
#[psp(0xEAED89CD)]
215+
pub fn scePsmfGetNumberOfStreams(psmf: &ScePsmf) -> u32;
216+
217+
#[psp(0x68D42328)]
218+
pub fn scePsmfGetNumberOfSpecificStreams(psmf: &ScePsmf, stream_type: i32) -> u32;
219+
220+
#[psp(0x1E6D9013)]
221+
pub fn scePsmfSpecifyStreamWithStreamType(psmf: &ScePsmf, steam_type: u32, channel: u32) -> u32;
222+
223+
#[psp(0x0C120E1D)]
224+
pub fn scePsmfSpecifyStreamWithStreamTypeNumber(psmf: &ScePsmf, stream_type: u32, type_num: u32) -> u32;
225+
226+
#[psp(0x0BA514E5)]
227+
pub fn scePsmfGetVideoInfo(psmf_struct: &ScePsmf, video_info: &ScePsmf_SequenceInfo_Video) -> u32;
228+
229+
#[psp(0xA83F7113)]
230+
pub fn scePsmfGetAudioInfo(psmf_struct: &ScePsmf, audio_info: &ScePsmf_SequenceInfo_Audio) -> u32;
231+
232+
#[psp(0xC7DB3A5B)]
233+
pub fn scePsmfGetCurrentStreamType(psmf_struct: &ScePsmf, type_: &mut u32, channel_addr: u32) -> u32;
234+
235+
#[psp(0xA5EBFE81)]
236+
pub fn scePsmfGetStreamSize(psmf_struct: &ScePsmf, size: &mut u32) -> u32;
237+
238+
#[psp(0x5B70FCC1)]
239+
pub fn scePsmfQueryStreamOffset(buffer_addr: u32, offset_addr: u32) -> u32;
240+
241+
#[psp(0x9553CC91)]
242+
pub fn scePsmfQueryStreamSize(buffer_addr: u32, size_addr: u32) -> u32;
243+
244+
#[psp(0xB78EB9E9)]
245+
pub fn scePsmfGetHeaderSize(psmf_struct: &ScePsmf, size_addr: u32) -> u32;
246+
247+
#[psp(0xE1283895)]
248+
pub fn scePsmfGetPsmfVersion(psmf_struct: &ScePsmf) -> u32;
249+
250+
#[psp(0x2673646B)]
251+
pub fn scePsmfVerifyPsmf(psmf_addr: u32) -> u32;
252+
253+
#[psp(0x7491C438)]
254+
pub fn scePsmfGetNumberOfEPentries(psmf_struct: &ScePsmf) -> u32;
255+
256+
#[psp(0x76D3AEBA)]
257+
pub fn scePsmfGetPresentationStartTime(psmf_struct: &ScePsmf, start_time_addr: u32) -> u32;
258+
259+
#[psp(0xBD8AE0D8)]
260+
pub fn scePsmfGetPresentationEndTime(psmf_struct: &ScePsmf, end_time_addr: u32) -> u32;
261+
262+
#[psp(0x28240568)]
263+
pub fn scePsmfGetCurrentStreamNumber(psmf_struct: &ScePsmf) -> u32;
264+
265+
#[psp(0x971A3A90)]
266+
pub fn scePsmfCheckEPMap(psmf_struct: &ScePsmf) -> u32;
267+
268+
#[psp(0x4E624A34)]
269+
pub fn scePsmfGetEPWithId(psmf_struct: &ScePsmf, epid: i32, entry: &ScePsmf_EP) -> u32;
270+
271+
#[psp(0x7C0E7AC3)]
272+
pub fn scePsmfGetEPWithTimestamp(psmf_struct: &ScePsmf, ts: u32, entry: &ScePsmf_EP) -> u32;
273+
#[psp(0x5F457515)]
274+
pub fn scePsmfGetEPidWithTimestamp(psmf_struct: &ScePsmf, ts: u32) -> u32;
275+
}
276+
277+
psp_extern! {
278+
#![name = "scePsmfPlayer"]
279+
#![flags = 0x4001]
280+
#![version = (0x00, 0x00)]
281+
282+
#[psp(0x235D8787)]
283+
pub fn scePsmfPlayerCreate(psmf_player: &mut PsmfPlayer, data_ptr: *const u32) -> i32;
284+
285+
#[psp(0x1078C008)]
286+
pub fn scePsmfPlayerStop(psmf_player: &mut PsmfPlayer) -> i32;
287+
288+
#[psp(0x2BEB1569)]
289+
pub fn scePsmfPlayerBreak(psmf_player: &mut PsmfPlayer) -> i32;
290+
291+
#[psp(0x3D6D25A9)]
292+
pub fn scePsmfPlayerSetPsmf(psmf_player: &mut PsmfPlayer, filename: *const u8) -> i32;
293+
294+
#[psp(0x58B83577)]
295+
pub fn scePsmfPlayerSetPsmfCB(psmf_player: &mut PsmfPlayer, filename: *const u8) -> i32;
296+
297+
#[psp(0x76C0F4AE)]
298+
pub fn scePsmfPlayerSetPsmfOffset(psmf_player: &mut PsmfPlayer, filename: *const u8, offset: i32) -> i32;
299+
300+
#[psp(0xA72DB4F9)]
301+
pub fn scePsmfPlayerSetPsmfOffsetCB(psmf_player: &mut PsmfPlayer, filename: *const u8, offset: i32) -> i32;
302+
303+
#[psp(0x3EA82A4B)]
304+
pub fn scePsmfPlayerGetAudioOutSize(psmf_player: &mut PsmfPlayer) -> i32;
305+
306+
#[psp(0x95A84EE5)]
307+
pub fn scePsmfPlayerStart(psmf_player: &mut PsmfPlayer, psmf_player_data: &PsmfPlayerData, init_pts: i32) -> i32;
308+
309+
#[psp(0x9B71A274)]
310+
pub fn scePsmfPlayerDelete(psmf_player: &mut PsmfPlayer) -> i32;
311+
312+
#[psp(0xA0B8CA55)]
313+
pub fn scePsmfPlayerUpdate(psmf_player: &mut PsmfPlayer) -> i32;
314+
315+
#[psp(0xE792CD94)]
316+
pub fn scePsmfPlayerReleasePsmf(psmf_player: &mut PsmfPlayer) -> i32;
317+
318+
#[psp(0x46F61F8B)]
319+
pub fn scePsmfPlayerGetVideoData(psmf_player: &mut PsmfPlayer, video_data: &mut PsmfVideoData) -> i32;
320+
321+
#[psp(0xB9848A74)]
322+
pub fn scePsmfPlayerGetAudioData(psmf_player: &mut PsmfPlayer, audio_data_addr: u32) -> i32;
323+
324+
#[psp(0xF8EF08A6)]
325+
pub fn scePsmfPlayerGetCurrentStatus(psmf_player: &mut PsmfPlayer) -> PsmfPlayerStatus;
326+
327+
#[psp(0x3ED62233)]
328+
pub fn scePsmfPlayerGetCurrentPts(psmf_player: &mut PsmfPlayer, current_pts_addr: u32) -> u32;
329+
330+
#[psp(0xDF089680)]
331+
pub fn scePsmfPlayerGetPsmfInfo(psmf_player: &mut PsmfPlayer, psmf_info: &mut PsmfInfo, width: &mut u32, height: &mut u32) -> u32;
332+
333+
#[psp(0xF3EFAA91)]
334+
pub fn scePsmfPlayerGetCurrentPlayMode(psmf_player: &mut PsmfPlayer, play_mode: &PsmfPlayerMode, play_speed: &mut u32) -> u32;
335+
336+
#[psp(0x9FF2B2E7)]
337+
pub fn scePsmfPlayerGetCurrentVideoStream(psmf_player: &mut PsmfPlayer, video_codec: &mut i32, video_stream_num: &mut i32) -> u32;
338+
339+
#[psp(0x68F07175)]
340+
pub fn scePsmfPlayerGetCurrentAudioStream(psmf_player: &mut PsmfPlayer, audio_codec: &mut i32, audio_stream_num: &mut i32) -> u32;
341+
342+
#[psp(0x2D0E4E0A)]
343+
pub fn scePsmfPlayerSetTempBuf(psmf_player: &mut PsmfPlayer, temp_buf: *mut u8, temp_buf_size: u32) -> i32;
344+
345+
#[psp(0xA3D81169)]
346+
pub fn scePsmfPlayerChangePlayMode(psmf_player: &mut PsmfPlayer, play_mode: PsmfPlayerMode, play_speed: i32) -> u32;
347+
348+
#[psp(0xB8D10C56)]
349+
pub fn scePsmfPlayerSelectAudio(psmf_player: &mut PsmfPlayer) -> u32;
350+
351+
#[psp(0x8A9EBDCD)]
352+
pub fn scePsmfPlayerSelectVideo(psmf_player: &mut PsmfPlayer) -> u32;
353+
354+
#[psp(0x75F03FA2)]
355+
pub fn scePsmfPlayerSelectSpecificVideo(psmf_player: &mut PsmfPlayer, video_codec: i32, video_stream_num: i32) -> u32;
356+
357+
#[psp(0x85461EFF)]
358+
pub fn scePsmfPlayerSelectSpecificAudio(psmf_player: &mut PsmfPlayer, audio_codec: i32, audio_stream_Num: i32) -> u32;
359+
360+
#[psp(0x1E57A8E7)]
361+
pub fn scePsmfPlayerConfigPlayer(psmf_player: &mut PsmfPlayer, config_mode: PsmfConfigMode, config_attr: i32) -> u32;
362+
}

0 commit comments

Comments
 (0)