diff options
-rw-r--r-- | apps/wps.c | 22 | ||||
-rw-r--r-- | firmware/mpeg.c | 17 |
2 files changed, 27 insertions, 12 deletions
diff --git a/apps/wps.c b/apps/wps.c index c14cbb4488..8667ad9969 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -597,7 +597,8 @@ int wps_show(void) | |||
597 | { | 597 | { |
598 | if ( mpeg_is_playing() && id3 && id3->length ) | 598 | if ( mpeg_is_playing() && id3 && id3->length ) |
599 | { | 599 | { |
600 | mpeg_pause(); | 600 | if (!paused) |
601 | mpeg_pause(); | ||
601 | #ifdef HAVE_PLAYER_KEYPAD | 602 | #ifdef HAVE_PLAYER_KEYPAD |
602 | lcd_stop_scroll(); | 603 | lcd_stop_scroll(); |
603 | #endif | 604 | #endif |
@@ -629,7 +630,8 @@ int wps_show(void) | |||
629 | { | 630 | { |
630 | if ( mpeg_is_playing() && id3 && id3->length ) | 631 | if ( mpeg_is_playing() && id3 && id3->length ) |
631 | { | 632 | { |
632 | mpeg_pause(); | 633 | if (!paused) |
634 | mpeg_pause(); | ||
633 | #ifdef HAVE_PLAYER_KEYPAD | 635 | #ifdef HAVE_PLAYER_KEYPAD |
634 | lcd_stop_scroll(); | 636 | lcd_stop_scroll(); |
635 | #endif | 637 | #endif |
@@ -664,8 +666,12 @@ int wps_show(void) | |||
664 | mpeg_ff_rewind(ff_rewind_count); | 666 | mpeg_ff_rewind(ff_rewind_count); |
665 | ff_rewind_count = 0; | 667 | ff_rewind_count = 0; |
666 | ff_rewind = false; | 668 | ff_rewind = false; |
667 | mpeg_resume(); | 669 | if (paused) |
668 | status_set_playmode(STATUS_PLAY); | 670 | status_set_playmode(STATUS_PAUSE); |
671 | else { | ||
672 | mpeg_resume(); | ||
673 | status_set_playmode(STATUS_PLAY); | ||
674 | } | ||
669 | #ifdef HAVE_LCD_CHARCELLS | 675 | #ifdef HAVE_LCD_CHARCELLS |
670 | draw_screen(id3); | 676 | draw_screen(id3); |
671 | #endif | 677 | #endif |
@@ -710,8 +716,12 @@ int wps_show(void) | |||
710 | mpeg_ff_rewind(ff_rewind_count); | 716 | mpeg_ff_rewind(ff_rewind_count); |
711 | ff_rewind_count = 0; | 717 | ff_rewind_count = 0; |
712 | ff_rewind = false; | 718 | ff_rewind = false; |
713 | mpeg_resume(); | 719 | if (paused) |
714 | status_set_playmode(STATUS_PLAY); | 720 | status_set_playmode(STATUS_PAUSE); |
721 | else { | ||
722 | mpeg_resume(); | ||
723 | status_set_playmode(STATUS_PLAY); | ||
724 | } | ||
715 | #ifdef HAVE_LCD_CHARCELLS | 725 | #ifdef HAVE_LCD_CHARCELLS |
716 | draw_screen(id3); | 726 | draw_screen(id3); |
717 | #endif | 727 | #endif |
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 0c6a1a3355..0117102e57 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -285,7 +285,6 @@ static bool playing = false; | |||
285 | static bool play_pending = false; | 285 | static bool play_pending = false; |
286 | #else | 286 | #else |
287 | static int last_dma_tick = 0; | 287 | static int last_dma_tick = 0; |
288 | static int pause_tick = 0; | ||
289 | 288 | ||
290 | #ifdef HAVE_MAS3507D | 289 | #ifdef HAVE_MAS3507D |
291 | 290 | ||
@@ -683,6 +682,8 @@ static void track_change(void) | |||
683 | 682 | ||
684 | static void mpeg_thread(void) | 683 | static void mpeg_thread(void) |
685 | { | 684 | { |
685 | static int pause_tick = 0; | ||
686 | static unsigned int pause_track = 0; | ||
686 | struct event ev; | 687 | struct event ev; |
687 | int len; | 688 | int len; |
688 | int free_space_left; | 689 | int free_space_left; |
@@ -760,6 +761,7 @@ static void mpeg_thread(void) | |||
760 | paused = true; | 761 | paused = true; |
761 | playing = false; | 762 | playing = false; |
762 | pause_tick = current_tick; | 763 | pause_tick = current_tick; |
764 | pause_track = current_track_counter; | ||
763 | stop_dma(); | 765 | stop_dma(); |
764 | break; | 766 | break; |
765 | 767 | ||
@@ -769,10 +771,13 @@ static void mpeg_thread(void) | |||
769 | paused = false; | 771 | paused = false; |
770 | if (!play_pending) | 772 | if (!play_pending) |
771 | { | 773 | { |
772 | playing = true; | 774 | playing = true; |
773 | last_dma_tick += current_tick - pause_tick; | 775 | if ( current_track_counter == pause_track ) |
774 | pause_tick = 0; | 776 | last_dma_tick += current_tick - pause_tick; |
775 | start_dma(); | 777 | else |
778 | last_dma_tick = current_tick; | ||
779 | pause_tick = 0; | ||
780 | start_dma(); | ||
776 | } | 781 | } |
777 | break; | 782 | break; |
778 | 783 | ||
@@ -1276,7 +1281,7 @@ void mpeg_prev(void) | |||
1276 | #else | 1281 | #else |
1277 | char* file = playlist_next(-1,NULL); | 1282 | char* file = playlist_next(-1,NULL); |
1278 | mp3info(&taginfo, file); | 1283 | mp3info(&taginfo, file); |
1279 | current_track_counter--; | 1284 | current_track_counter++; |
1280 | playing = true; | 1285 | playing = true; |
1281 | #endif | 1286 | #endif |
1282 | } | 1287 | } |