Mercurial > repos > blastem
comparison mediaplayer.c @ 2296:789802d99629
Add basic FLAC decoder and add FLAC playback support to the media player
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 19 Feb 2023 21:12:46 -0800 |
parents | c4980d89614b |
children | 0343f0d5add0 |
comparison
equal
deleted
inserted
replaced
2295:eb45ad9d8a3f | 2296:789802d99629 |
---|---|
441 } | 441 } |
442 } | 442 } |
443 | 443 |
444 void flac_frame(media_player *player) | 444 void flac_frame(media_player *player) |
445 { | 445 { |
446 render_sleep_ms(15); | 446 for (uint32_t remaining_samples = player->flac->sample_rate / 60; remaining_samples > 0; remaining_samples--) |
447 { | |
448 int16_t samples[2]; | |
449 if (flac_get_sample(player->flac, samples, 2)) { | |
450 render_put_stereo_sample(player->audio, samples[0], samples[1]); | |
451 } else { | |
452 player->state = STATE_PAUSED; | |
453 return; | |
454 } | |
455 } | |
447 } | 456 } |
448 | 457 |
449 void vgm_init(media_player *player, uint32_t opts) | 458 void vgm_init(media_player *player, uint32_t opts) |
450 { | 459 { |
451 player->vgm = calloc(1, sizeof(vgm_header)); | 460 player->vgm = calloc(1, sizeof(vgm_header)); |
569 format_error: | 578 format_error: |
570 player->media_type = MEDIA_UNKNOWN; | 579 player->media_type = MEDIA_UNKNOWN; |
571 free(player->wave); | 580 free(player->wave); |
572 } | 581 } |
573 | 582 |
583 static void flac_player_init(media_player *player) | |
584 { | |
585 player->flac = flac_file_from_buffer(player->media->buffer, player->media->size); | |
586 if (player->flac) { | |
587 player->audio = render_audio_source("Audio File", player->flac->sample_rate, 1, 2); | |
588 } | |
589 } | |
590 | |
574 static void resume_player(system_header *system) | 591 static void resume_player(system_header *system) |
575 { | 592 { |
576 media_player *player = (media_player *)system; | 593 media_player *player = (media_player *)system; |
577 player->should_return = 0; | 594 player->should_return = 0; |
578 while (!player->header.should_exit && !player->should_return) | 595 while (!player->header.should_exit && !player->should_return) |
687 vgm_init(player, opts); | 704 vgm_init(player, opts); |
688 break; | 705 break; |
689 case AUDIO_WAVE: | 706 case AUDIO_WAVE: |
690 wave_player_init(player); | 707 wave_player_init(player); |
691 break; | 708 break; |
709 case AUDIO_FLAC: | |
710 flac_player_init(player); | |
711 break; | |
692 } | 712 } |
693 | 713 |
694 return player; | 714 return player; |
695 } | 715 } |