summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/wps.c22
-rw-r--r--firmware/mpeg.c17
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;
285static bool play_pending = false; 285static bool play_pending = false;
286#else 286#else
287static int last_dma_tick = 0; 287static int last_dma_tick = 0;
288static 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
684static void mpeg_thread(void) 683static 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}