Mercurial > repos > blastem
comparison mediaplayer.c @ 2376:1c09f5be285b
Very basic UI for media player
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 17 Nov 2023 01:05:32 -0800 |
parents | 02c04196c2da |
children | 30e59954eab9 |
comparison
equal
deleted
inserted
replaced
2375:02c04196c2da | 2376:1c09f5be285b |
---|---|
17 enum { | 17 enum { |
18 AUDIO_VGM, | 18 AUDIO_VGM, |
19 AUDIO_WAVE, | 19 AUDIO_WAVE, |
20 AUDIO_FLAC, | 20 AUDIO_FLAC, |
21 MEDIA_UNKNOWN | 21 MEDIA_UNKNOWN |
22 }; | |
23 | |
24 enum { | |
25 STATE_PLAY, | |
26 STATE_PAUSED | |
27 }; | 22 }; |
28 | 23 |
29 uint32_t cycles_to_samples(uint32_t clock_rate, uint32_t cycles) | 24 uint32_t cycles_to_samples(uint32_t clock_rate, uint32_t cycles) |
30 { | 25 { |
31 return ((uint64_t)cycles) * ((uint64_t)44100) / ((uint64_t)clock_rate); | 26 return ((uint64_t)cycles) * ((uint64_t)44100) / ((uint64_t)clock_rate); |
462 { | 457 { |
463 uint32_t sample_size = player->wave->bits_per_sample * player->wave->num_channels / 8; | 458 uint32_t sample_size = player->wave->bits_per_sample * player->wave->num_channels / 8; |
464 if (sample_size > player->media->size || player->current_offset > player->media->size - sample_size) { | 459 if (sample_size > player->media->size || player->current_offset > player->media->size - sample_size) { |
465 player->current_offset = player->wave->format_header.size + offsetof(wave_header, audio_format); | 460 player->current_offset = player->wave->format_header.size + offsetof(wave_header, audio_format); |
466 player->state = STATE_PAUSED; | 461 player->state = STATE_PAUSED; |
462 player->playback_time = 0; | |
467 return; | 463 return; |
468 } | 464 } |
469 if (player->wave->bits_per_sample == 16) { | 465 if (player->wave->bits_per_sample == 16) { |
470 int16_t value = read_word_le(player); | 466 int16_t value = read_word_le(player); |
471 if (player->wave->num_channels == 1) { | 467 if (player->wave->num_channels == 1) { |
496 int16_t samples[2]; | 492 int16_t samples[2]; |
497 if (flac_get_sample(player->flac, samples, 2)) { | 493 if (flac_get_sample(player->flac, samples, 2)) { |
498 render_put_stereo_sample(player->audio, samples[0], samples[1]); | 494 render_put_stereo_sample(player->audio, samples[0], samples[1]); |
499 } else { | 495 } else { |
500 player->state = STATE_PAUSED; | 496 player->state = STATE_PAUSED; |
497 player->playback_time = 0; | |
501 return; | 498 return; |
502 } | 499 } |
503 } | 500 } |
504 } | 501 } |
505 | 502 |
652 while (!player->header.should_exit && !player->should_return) | 649 while (!player->header.should_exit && !player->should_return) |
653 { | 650 { |
654 switch (player->state) | 651 switch (player->state) |
655 { | 652 { |
656 case STATE_PLAY: | 653 case STATE_PLAY: |
654 player->playback_time++; | |
657 switch(player->media_type) | 655 switch(player->media_type) |
658 { | 656 { |
659 case AUDIO_VGM: | 657 case AUDIO_VGM: |
660 vgm_frame(player); | 658 vgm_frame(player); |
661 break; | 659 break; |