|
| 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