annotate mediaplayer.h @ 2496:187bc857a76a default tip

Fix bug in MED mapper protection bit implementation
author Michael Pavone <pavone@retrodev.com>
date Sun, 28 Apr 2024 23:33:11 -0700
parents fb8f49b0aece
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #ifndef MEDIAPLAYER_H_
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #define MEDIAPLAYER_H_
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <stdint.h>
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include "system.h"
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "vgm.h"
2290
c4980d89614b Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents: 2289
diff changeset
7 #include "wave.h"
2296
789802d99629 Add basic FLAC decoder and add FLAC playback support to the media player
Michael Pavone <pavone@retrodev.com>
parents: 2290
diff changeset
8 #include "flac.h"
2374
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
9 #include "oscilloscope.h"
2290
c4980d89614b Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents: 2289
diff changeset
10 #include "render_audio.h"
2375
02c04196c2da Fix mediaplayer play/pause handling
Michael Pavone <pavone@retrodev.com>
parents: 2374
diff changeset
11 #include "io.h"
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 typedef struct chip_info chip_info;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 typedef void (*chip_run_fun)(void *context, uint32_t cycle);
2374
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
15 typedef void (*chip_scope_fun)(chip_info *chip, oscilloscope *scope);
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
16 typedef void (*chip_noarg_fun)(void *context);
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 typedef void (*chip_adjust_fun)(chip_info *chip);
2482
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
18 typedef void (*chip_stream_fun)(chip_info *chip, uint8_t port, uint8_t command, uint16_t sample);
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 struct chip_info {
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 void *context;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 chip_run_fun run;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 chip_adjust_fun adjust;
2374
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
23 chip_scope_fun scope;
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
24 chip_noarg_fun no_scope;
2377
30e59954eab9 Properly free sound chips in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2376
diff changeset
25 chip_noarg_fun free;
2482
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
26 chip_stream_fun stream;
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 data_block *blocks;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 uint32_t clock;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 uint32_t samples;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 uint8_t cmd;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 uint8_t data_type;
2482
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
32 uint8_t stream_type;
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 };
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34
2482
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
35 typedef struct {
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
36 chip_info *chip;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
37 data_block *cur_block;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
38 uint32_t step;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
39 uint32_t block_offset;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
40 uint32_t start_offset;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
41 uint32_t cycles_per_sample;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
42 uint32_t sample_rate;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
43 uint32_t next_sample_cycle;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
44 uint32_t remaining; // sample count or command count
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
45 uint8_t data_type;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
46 uint8_t port;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
47 uint8_t command;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
48 uint8_t flags;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
49 uint8_t length_mode;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
50 } vgm_stream;
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
51
2376
1c09f5be285b Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents: 2375
diff changeset
52 enum {
1c09f5be285b Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents: 2375
diff changeset
53 STATE_PLAY,
1c09f5be285b Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents: 2375
diff changeset
54 STATE_PAUSED
1c09f5be285b Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents: 2375
diff changeset
55 };
1c09f5be285b Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents: 2375
diff changeset
56
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 typedef struct {
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 system_header header;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 system_media *media;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 vgm_header *vgm;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 vgm_extended_header *vgm_ext;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 data_block *ym_seek_block;
2290
c4980d89614b Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents: 2289
diff changeset
63 wave_header *wave;
2296
789802d99629 Add basic FLAC decoder and add FLAC playback support to the media player
Michael Pavone <pavone@retrodev.com>
parents: 2290
diff changeset
64 flac_file *flac;
2290
c4980d89614b Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents: 2289
diff changeset
65 audio_source *audio;
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 chip_info *chips;
2374
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
67 oscilloscope *scope;
2482
fb8f49b0aece Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents: 2377
diff changeset
68 vgm_stream *streams[256];
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 uint32_t num_chips;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 uint32_t current_offset;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 uint32_t playback_time;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 uint32_t wait_samples;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 uint32_t ym_seek_offset;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 uint32_t ym_block_offset;
2374
97f164d1f0f6 Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents: 2296
diff changeset
75 uint32_t loop_count;
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 uint8_t state;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 uint8_t media_type;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 uint8_t should_return;
2375
02c04196c2da Fix mediaplayer play/pause handling
Michael Pavone <pavone@retrodev.com>
parents: 2374
diff changeset
79 uint8_t button_state[NUM_GAMEPAD_BUTTONS];
2289
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 } media_player;
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 media_player *alloc_media_player(system_media *media, uint32_t opts);
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84
92449b47cce8 Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 #endif //MEDIAPLAYER_H_