summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/stream_mgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/mpegplayer/stream_mgr.c')
-rw-r--r--apps/plugins/mpegplayer/stream_mgr.c111
1 files changed, 32 insertions, 79 deletions
diff --git a/apps/plugins/mpegplayer/stream_mgr.c b/apps/plugins/mpegplayer/stream_mgr.c
index dbc8ce9427..096ac4b0f9 100644
--- a/apps/plugins/mpegplayer/stream_mgr.c
+++ b/apps/plugins/mpegplayer/stream_mgr.c
@@ -710,75 +710,13 @@ void stream_vo_set_clip(const struct vo_rect *rc)
710 stream_mgr.parms.rc = *rc; 710 stream_mgr.parms.rc = *rc;
711 rc = &stream_mgr.parms.rc; 711 rc = &stream_mgr.parms.rc;
712 } 712 }
713#ifndef HAVE_LCD_COLOR
714 else
715 {
716 vo_rect_set_ext(&stream_mgr.parms.rc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
717 rc = &stream_mgr.parms.rc;
718 }
719#endif
720 713
721 parser_send_video_msg(VIDEO_SET_CLIP_RECT, (intptr_t)rc); 714 parser_send_video_msg(VIDEO_SET_CLIP_RECT, (intptr_t)rc);
722 715
723#ifndef HAVE_LCD_COLOR
724 stream_set_gray_rect(rc);
725#endif
726
727 stream_mgr_unlock(); 716 stream_mgr_unlock();
728} 717}
729 718
730#ifndef HAVE_LCD_COLOR 719#ifndef HAVE_LCD_COLOR
731/* Set the rectangle for the gray video overlay - clipped to screen */
732bool stream_set_gray_rect(const struct vo_rect *rc)
733{
734 bool retval = false;
735 struct vo_rect rc_gray;
736
737 stream_mgr_lock();
738
739 vo_rect_set_ext(&rc_gray, 0, 0, LCD_WIDTH, LCD_HEIGHT);
740
741 if (vo_rect_intersect(&rc_gray, &rc_gray, rc))
742 {
743 bool vis = parser_send_video_msg(VIDEO_DISPLAY_SHOW, false);
744
745 /* The impudence! Keeps the image from disappearing anyway. */
746#ifdef SIMULATOR
747 rb->sim_lcd_ex_init(0, NULL);
748#else
749 rb->timer_unregister();
750#endif
751 GRAY_VIDEO_INVALIDATE_ICACHE();
752 GRAY_INVALIDATE_ICACHE();
753
754 vo_lock();
755
756 grey_init(rb, stream_mgr.graymem, stream_mgr.graysize, false,
757 rc_gray.r - rc_gray.l, rc_gray.b - rc_gray.t, NULL);
758
759 grey_set_position(rc_gray.l, rc_gray.t);
760
761 vo_unlock();
762
763 GRAY_INVALIDATE_ICACHE();
764
765 if (stream_mgr.status != STREAM_PLAYING)
766 parser_send_video_msg(VIDEO_PRINT_FRAME, true);
767
768 GRAY_VIDEO_FLUSH_ICACHE();
769
770 if (vis)
771 {
772 grey_show(true);
773 parser_send_video_msg(VIDEO_DISPLAY_SHOW, true);
774 }
775 }
776
777 stream_mgr_unlock();
778
779 return retval;
780}
781
782/* Show/hide the gray video overlay (independently of vo visibility). */ 720/* Show/hide the gray video overlay (independently of vo visibility). */
783void stream_gray_show(bool show) 721void stream_gray_show(bool show)
784{ 722{
@@ -793,6 +731,29 @@ void stream_gray_show(bool show)
793 731
794 stream_mgr_unlock(); 732 stream_mgr_unlock();
795} 733}
734
735#ifdef GRAY_CACHE_MAINT
736void stream_gray_pause(bool pause)
737{
738 static bool gray_paused = false;
739
740 if (pause && !gray_paused)
741 {
742 if (_grey_info.flags & _GREY_RUNNING)
743 {
744 rb->timer_unregister();
745 _grey_info.flags &= ~_GREY_RUNNING;
746 gray_paused = true;
747 }
748 }
749 else if (!pause && gray_paused)
750 {
751 gray_paused = false;
752 grey_show(true);
753 }
754}
755#endif
756
796#endif 757#endif
797 758
798/* Display a thumbnail at the last seek point */ 759/* Display a thumbnail at the last seek point */
@@ -805,14 +766,10 @@ bool stream_display_thumb(const struct vo_rect *rc)
805 766
806 stream_mgr_lock(); 767 stream_mgr_lock();
807 768
808 GRAY_INVALIDATE_ICACHE();
809
810 stream_mgr.parms.rc = *rc; 769 stream_mgr.parms.rc = *rc;
811 retval = parser_send_video_msg(VIDEO_PRINT_THUMBNAIL, 770 retval = parser_send_video_msg(VIDEO_PRINT_THUMBNAIL,
812 (intptr_t)&stream_mgr.parms.rc); 771 (intptr_t)&stream_mgr.parms.rc);
813 772
814 GRAY_VIDEO_FLUSH_ICACHE();
815
816 stream_mgr_unlock(); 773 stream_mgr_unlock();
817 774
818 return retval; 775 return retval;
@@ -823,12 +780,8 @@ bool stream_draw_frame(bool no_prepare)
823 bool retval; 780 bool retval;
824 stream_mgr_lock(); 781 stream_mgr_lock();
825 782
826 GRAY_INVALIDATE_ICACHE();
827
828 retval = parser_send_video_msg(VIDEO_PRINT_FRAME, no_prepare); 783 retval = parser_send_video_msg(VIDEO_PRINT_FRAME, no_prepare);
829 784
830 GRAY_VIDEO_FLUSH_ICACHE();
831
832 stream_mgr_unlock(); 785 stream_mgr_unlock();
833 786
834 return retval; 787 return retval;
@@ -1055,26 +1008,27 @@ int stream_init(void)
1055 /* Initialize non-allocator blocks first */ 1008 /* Initialize non-allocator blocks first */
1056#ifndef HAVE_LCD_COLOR 1009#ifndef HAVE_LCD_COLOR
1057 bool success; 1010 bool success;
1011 long graysize;
1058 1012
1059 /* This can run on another processor - align data */ 1013 /* This can run on another processor - align data */
1060 memsize = CACHEALIGN_BUFFER(&mem, memsize); 1014 memsize = CACHEALIGN_BUFFER(&mem, memsize);
1061 stream_mgr.graymem = mem;
1062 1015
1063 success = grey_init(rb, mem, memsize, false, LCD_WIDTH, 1016 success = grey_init(rb, mem, memsize, true, LCD_WIDTH,
1064 LCD_HEIGHT, &stream_mgr.graysize); 1017 LCD_HEIGHT, &graysize);
1065 1018
1066 /* This can run on another processor - align size */ 1019 /* This can run on another processor - align size */
1067 stream_mgr.graysize = CACHEALIGN_UP(stream_mgr.graysize); 1020 graysize = CACHEALIGN_UP(graysize);
1068 1021
1069 mem += stream_mgr.graysize; 1022 mem += graysize;
1070 memsize -= stream_mgr.graysize; 1023 memsize -= graysize;
1071 1024
1072 if (!success || (ssize_t)memsize <= 0) 1025 if (!success || (ssize_t)memsize <= 0)
1073 { 1026 {
1074 rb->splash(HZ, "greylib init failed!"); 1027 rb->splash(HZ, "greylib init failed!");
1075 stream_mgr.graymem = NULL;
1076 return STREAM_ERROR; 1028 return STREAM_ERROR;
1077 } 1029 }
1030
1031 grey_clear_display();
1078#endif /* !HAVE_LCD_COLOR */ 1032#endif /* !HAVE_LCD_COLOR */
1079 1033
1080 stream_mgr.thread = rb->create_thread(stream_mgr_thread, 1034 stream_mgr.thread = rb->create_thread(stream_mgr_thread,
@@ -1144,7 +1098,6 @@ void stream_exit(void)
1144 } 1098 }
1145 1099
1146#ifndef HAVE_LCD_COLOR 1100#ifndef HAVE_LCD_COLOR
1147 if (stream_mgr.graymem != NULL) 1101 grey_release();
1148 grey_release();
1149#endif 1102#endif
1150} 1103}