forked from len0rd/rockbox
		
	git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19377 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			160 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /***************************************************************************
 | |
|  *             __________               __   ___.
 | |
|  *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 | |
|  *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 | |
|  *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 | |
|  *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 | |
|  *                     \/            \/     \/    \/            \/
 | |
|  * $Id$
 | |
|  *
 | |
|  * AV stream manager decalarations
 | |
|  *
 | |
|  * Copyright (c) 2007 Michael Sevakis
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU General Public License
 | |
|  * as published by the Free Software Foundation; either version 2
 | |
|  * of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | |
|  * KIND, either express or implied.
 | |
|  *
 | |
|  ****************************************************************************/
 | |
| #ifndef STREAM_MGR_H
 | |
| #define STREAM_MGR_H
 | |
| 
 | |
| /* Basic media control interface - this handles state changes and stream
 | |
|  * coordination with assistance from the parser */
 | |
| struct stream_mgr
 | |
| {
 | |
|     unsigned int thread;         /* Playback control thread */
 | |
|     struct event_queue *q;       /* event queue for control thread */
 | |
|     const char *filename;        /* Current filename */
 | |
|     uint32_t resume_time;        /* The stream tick where playback was
 | |
|                                     stopped (or started) */
 | |
|     bool seeked;                 /* A seek happened and things must be
 | |
|                                     resynced */
 | |
|     int    status;          /* Current playback status */
 | |
|     struct list_item strl;  /* List of available streams */
 | |
|     struct list_item actl;  /* List of active streams */
 | |
|     struct mutex str_mtx;   /* Main stream manager mutex */
 | |
|     struct mutex actl_mtx;  /* Lock for current-streams list */
 | |
|     union /* A place for reusable non-cacheable parameters */
 | |
|     {
 | |
|         struct vo_rect rc;
 | |
|         struct stream_seek_data skd;
 | |
|     } parms;
 | |
| };
 | |
| 
 | |
| extern struct stream_mgr stream_mgr SHAREDBSS_ATTR;
 | |
| 
 | |
| struct stream_window
 | |
| {
 | |
|     off_t left, right;
 | |
| };
 | |
| 
 | |
| /** Interface for use by streams and other internal objects **/
 | |
| bool stream_get_window(struct stream_window *sw);
 | |
| void stream_clear_notify(struct stream *str, int for_msg);
 | |
| int str_next_data_not_ready(struct stream *str);
 | |
| /* Called by a stream to say it got its buffering notification */
 | |
| void str_data_notify_received(struct stream *str);
 | |
| void stream_add_stream(struct stream *str);
 | |
| void stream_remove_streams(void);
 | |
| 
 | |
| enum stream_events
 | |
| {
 | |
|     __STREAM_EV_FIRST = STREAM_MESSAGE_LAST-1,
 | |
|     STREAM_EV_COMPLETE,
 | |
| };
 | |
| 
 | |
| void stream_generate_event(struct stream *str, long id, intptr_t data);
 | |
| 
 | |
| /** Main control functions **/
 | |
| 
 | |
| /* Initialize the playback engine */
 | |
| int stream_init(void);
 | |
| 
 | |
| /* Close the playback engine */
 | |
| void stream_exit(void);
 | |
| 
 | |
| /* Open a new file */
 | |
| int stream_open(const char *filename);
 | |
| 
 | |
| /* Close the current file */
 | |
| int stream_close(void);
 | |
| 
 | |
| /* Plays from the current seekpoint if stopped */
 | |
| int stream_play(void);
 | |
| 
 | |
| /* Pauses playback if playing */
 | |
| int stream_pause(void);
 | |
| 
 | |
| /* Resumes playback if paused */
 | |
| int stream_resume(void);
 | |
| 
 | |
| /* Stops all streaming activity if playing or paused */
 | |
| int stream_stop(void);
 | |
| 
 | |
| /* Point stream at a particular time.
 | |
|  * whence = one of SEEK_SET, SEEK_CUR, SEEK_END */
 | |
| int stream_seek(uint32_t time, int whence);
 | |
| 
 | |
| /* Show/Hide the video image at the current seekpoint */
 | |
| bool stream_show_vo(bool show);
 | |
| 
 | |
| /* Set the visible section of video */
 | |
| void stream_vo_set_clip(const struct vo_rect *rc);
 | |
| 
 | |
| #ifndef HAVE_LCD_COLOR
 | |
| void stream_gray_show(bool show);
 | |
| #endif
 | |
| 
 | |
| /* Display thumbnail of the current seekpoint */
 | |
| bool stream_display_thumb(const struct vo_rect *rc);
 | |
| 
 | |
| /* Draw the frame at the current position */
 | |
| bool stream_draw_frame(bool no_prepare);
 | |
| 
 | |
| /* Return video dimensions */
 | |
| bool stream_vo_get_size(struct vo_ext *sz);
 | |
| 
 | |
| /* Returns the resume time in timestamp ticks */
 | |
| uint32_t stream_get_resume_time(void);
 | |
| 
 | |
| /* Returns stream_get_time if no seek is pending or else the
 | |
|    last time give to seek */
 | |
| uint32_t stream_get_seek_time(uint32_t *start);
 | |
| 
 | |
| /* Return the absolute stream time in clock ticks - adjusted by
 | |
|  * master clock stream via audio timestamps */
 | |
| static inline uint32_t stream_get_time(void)
 | |
|     { return pcm_output_get_clock(); }
 | |
| 
 | |
| /* Return the absolute clock time in clock ticks - unadjusted */
 | |
| static inline uint32_t stream_get_ticks(uint32_t *start)
 | |
|     { return pcm_output_get_ticks(start); }
 | |
| 
 | |
| /* Returns the current playback status */
 | |
| static inline int stream_status(void)
 | |
|     { return stream_mgr.status; }
 | |
| 
 | |
| /* Wait for a state transistion to complete */
 | |
| void stream_wait_status(void);
 | |
| 
 | |
| /* Returns the playback length of the stream */
 | |
| static inline uint32_t stream_get_duration(void)
 | |
|     { return str_parser.duration; }
 | |
| 
 | |
| static inline bool stream_can_seek(void)
 | |
|     { return parser_can_seek(); }
 | |
| 
 | |
| /* Keep the disk spinning (for seeking and browsing) */
 | |
| static inline void stream_keep_disk_active(void)
 | |
| {
 | |
| #ifdef HAVE_DISK_STORAGE
 | |
|     rb->storage_spin();
 | |
| #endif
 | |
|     }
 | |
| 
 | |
| #endif /* STREAM_MGR_H */
 |