Changeset 445d63e0e38053c1e724982fcc9f661a3bf03ec3
- Timestamp:
- 04/23/08 19:35:01 (2 months ago)
- git-parent:
- Files:
-
- include/vlc/mediacontrol.h (modified) (6 diffs)
- src/control/mediacontrol_audio_video.c (modified) (15 diffs)
- src/control/mediacontrol_core.c (modified) (14 diffs)
- src/control/mediacontrol_internal.h (modified) (2 diffs)
- src/control/mediacontrol_util.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
include/vlc/mediacontrol.h
r449fd28 r445d63e 132 132 133 133 /** 134 * Get the associated libvlc_media_player 135 * \param self: the mediacontrol instance 136 * \return a libvlc_media_player_t instance 137 */ 138 VLC_PUBLIC_API libvlc_media_player_t* 139 mediacontrol_get_media_player( mediacontrol_Instance* self ); 140 141 /** 134 142 * Get the current position 135 143 * \param self the mediacontrol instance … … 168 176 * Pause the movie at a given position 169 177 * \param self the mediacontrol instance 170 * \param a_position a mediacontrol_Position (ignored for now)171 178 * \param exception an initialized exception pointer 172 179 */ 173 180 VLC_PUBLIC_API void mediacontrol_pause( mediacontrol_Instance *self, 174 const mediacontrol_Position *a_position,175 181 mediacontrol_Exception *exception ); 176 182 … … 178 184 * Resume the movie at a given position 179 185 * \param self the mediacontrol instance 180 * \param a_position a mediacontrol_Position (ignored for now)181 186 * \param exception an initialized exception pointer 182 187 */ 183 188 VLC_PUBLIC_API void mediacontrol_resume( mediacontrol_Instance *self, 184 const mediacontrol_Position *a_position,185 189 mediacontrol_Exception *exception ); 186 190 … … 188 192 * Stop the movie at a given position 189 193 * \param self the mediacontrol instance 190 * \param a_position a mediacontrol_Position (ignored for now)191 194 * \param exception an initialized exception pointer 192 195 */ 193 196 VLC_PUBLIC_API void mediacontrol_stop( mediacontrol_Instance *self, 194 const mediacontrol_Position *a_position,195 197 mediacontrol_Exception *exception ); 196 198 … … 202 204 203 205 /** 204 * Add a new MRL to the playlist206 * Set the MRL to be played. 205 207 * \param self the mediacontrol instance 206 208 * \param psz_file the MRL 207 209 * \param exception an initialized exception pointer 208 210 */ 209 VLC_PUBLIC_API void mediacontrol_ playlist_add_item( mediacontrol_Instance *self,211 VLC_PUBLIC_API void mediacontrol_set_mrl( mediacontrol_Instance *self, 210 212 const char* psz_file, 211 213 mediacontrol_Exception *exception ); 212 /** 213 * Clear the playlist 214 * \param self the mediacontrol instance 215 * \param exception an initialized exception pointer 216 */ 217 VLC_PUBLIC_API void mediacontrol_playlist_clear( mediacontrol_Instance *self, 218 mediacontrol_Exception *exception ); 219 /** 220 * Get a flattened view of the playlist 221 * \param self the mediacontrol instance 222 * \param exception an initialized exception pointer 223 * \return a list of strings 224 */ 225 VLC_PUBLIC_API mediacontrol_PlaylistSeq * 226 mediacontrol_playlist_get_list( mediacontrol_Instance *self, 227 mediacontrol_Exception *exception ); 228 229 /** 230 * Play the next item 231 * \param self the mediacontrol instance 232 * \param exception an initialized exception pointer 233 */ 234 VLC_PUBLIC_API void 235 mediacontrol_playlist_next_item( mediacontrol_Instance *self, 236 mediacontrol_Exception *exception ); 214 215 /** 216 * Get the MRL to be played. 217 * \param self the mediacontrol instance 218 * \param exception an initialized exception pointer 219 */ 220 VLC_PUBLIC_API char * mediacontrol_get_mrl( mediacontrol_Instance *self, 221 mediacontrol_Exception *exception ); 237 222 238 223 /***************************************************************************** … … 250 235 const mediacontrol_Position *a_position, 251 236 mediacontrol_Exception *exception ); 252 253 /* Return a NULL terminated list */254 /**255 * Get a list of all cached snapshots (unimplemented)256 * \param self the mediacontrol instance257 * \param exception an initialized exception pointer258 * \return a NULL-terminated list of RGBpicture259 */260 VLC_PUBLIC_API mediacontrol_RGBPicture **261 mediacontrol_all_snapshots( mediacontrol_Instance *self,262 mediacontrol_Exception *exception );263 237 264 238 /** src/control/mediacontrol_audio_video.c
r449fd28 r445d63e 26 26 #endif 27 27 #include "mediacontrol_internal.h" 28 #include "libvlc_internal.h" 28 29 29 30 #include <vlc/mediacontrol.h> 30 31 #include <vlc/libvlc.h> 31 32 #include <vlc_playlist.h>33 34 #include <vlc_aout.h>35 32 36 33 #include <vlc_vout.h> … … 61 58 vlc_object_t* p_cache; 62 59 vout_thread_t* p_vout; 60 input_thread_t *p_input; 63 61 mediacontrol_RGBPicture *p_pic = NULL; 64 62 char path[256]; 65 63 snapshot_t *p_snapshot; 66 67 mediacontrol_exception_init( exception ); 68 69 p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD ); 64 libvlc_exception_t ex; 65 66 libvlc_exception_init( &ex ); 67 mediacontrol_exception_init( exception ); 68 69 p_input = libvlc_get_input_thread( self->p_media_player, &ex ); 70 if( ! p_input ) 71 { 72 RAISE_NULL( mediacontrol_InternalException, "No input" ); 73 } 74 p_vout = vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); 70 75 if( ! p_vout ) 71 76 { 72 77 RAISE_NULL( mediacontrol_InternalException, "No video output" ); 73 78 } 74 p_cache = vlc_object_create( self->p_playlist, VLC_OBJECT_GENERIC );79 p_cache = vlc_object_create( p_input, VLC_OBJECT_GENERIC ); 75 80 if( p_cache == NULL ) 76 81 { 77 82 vlc_object_release( p_vout ); 83 vlc_object_release( p_input ); 78 84 RAISE_NULL( mediacontrol_InternalException, "Out of memory" ); 79 85 } … … 90 96 vlc_object_unlock( p_cache ); 91 97 vlc_object_release( p_cache ); 98 vlc_object_release( p_input ); 92 99 93 100 if( p_snapshot ) … … 113 120 } 114 121 115 mediacontrol_RGBPicture **116 mediacontrol_all_snapshots( mediacontrol_Instance *self,117 mediacontrol_Exception *exception )118 {119 mediacontrol_exception_init( exception );120 121 RAISE_NULL( mediacontrol_InternalException, "unsupported method" );122 }123 124 122 static 125 123 int mediacontrol_showtext( vout_thread_t *p_vout, int i_channel, … … 175 173 mediacontrol_Exception *exception ) 176 174 { 177 input_thread_t *p_input = NULL;178 175 vout_thread_t *p_vout = NULL; 179 176 char* psz_message; 177 input_thread_t *p_input; 178 libvlc_exception_t ex; 179 180 libvlc_exception_init( &ex ); 181 mediacontrol_exception_init( exception ); 182 183 p_input = libvlc_get_input_thread( self->p_media_player, &ex ); 184 if( ! p_input ) 185 { 186 RAISE_VOID( mediacontrol_InternalException, "No input" ); 187 } 188 p_vout = vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); 189 if( ! p_vout ) 190 { 191 RAISE_VOID( mediacontrol_InternalException, "No video output" ); 192 } 180 193 181 194 psz_message = strdup( message ); … … 183 196 { 184 197 RAISE_VOID( mediacontrol_InternalException, "no more memory" ); 185 }186 187 p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD );188 if( ! p_vout )189 {190 RAISE_VOID( mediacontrol_InternalException, "no video output" );191 198 } 192 199 … … 199 206 200 207 i_duration = 1000 * private_mediacontrol_unit_convert( 201 self->p_playlist->p_input,202 end->key,203 mediacontrol_MediaTime,204 end->value );208 self->p_media_player, 209 end->key, 210 mediacontrol_MediaTime, 211 end->value ); 205 212 206 213 mediacontrol_showtext( p_vout, DEFAULT_CHAN, psz_message, NULL, … … 212 219 mtime_t i_debut, i_fin, i_now; 213 220 214 p_input = self->p_playlist->p_input;215 if( ! p_input )216 {217 vlc_object_release( p_vout );218 RAISE_VOID( mediacontrol_InternalException, "No input" );219 }220 221 221 /* FIXME */ 222 222 /* i_now = input_ClockGetTS( p_input, NULL, 0 ); */ 223 223 i_now = mdate(); 224 224 225 i_debut = private_mediacontrol_position2microsecond( p_input,225 i_debut = private_mediacontrol_position2microsecond( self->p_media_player, 226 226 ( mediacontrol_Position* ) begin ); 227 227 i_debut += i_now; 228 228 229 i_fin = private_mediacontrol_position2microsecond( p_input,229 i_fin = private_mediacontrol_position2microsecond( self->p_media_player, 230 230 ( mediacontrol_Position * ) end ); 231 231 i_fin += i_now; … … 279 279 libvlc_exception_init( &ex ); 280 280 281 libvlc_ video_set_parent( self->p_instance, visual_id, &ex );281 libvlc_media_player_set_drawable( self->p_media_player, visual_id, &ex ); 282 282 HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); 283 283 return true; … … 289 289 { 290 290 libvlc_exception_t ex; 291 libvlc_media_player_t* p_mi;292 291 int i_ret; 293 292 … … 295 294 libvlc_exception_init( &ex ); 296 295 297 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex ); 298 HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); 299 300 i_ret = libvlc_media_player_get_rate( p_mi, &ex ); 301 libvlc_media_player_release( p_mi ); 296 i_ret = libvlc_media_player_get_rate( self->p_media_player, &ex ); 302 297 HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); 303 298 … … 311 306 { 312 307 libvlc_exception_t ex; 313 libvlc_media_player_t* p_mi; 314 315 mediacontrol_exception_init( exception ); 316 libvlc_exception_init( &ex ); 317 318 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex ); 319 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 320 321 libvlc_media_player_set_rate( p_mi, rate * 10, &ex ); 322 libvlc_media_player_release( p_mi ); 308 309 mediacontrol_exception_init( exception ); 310 libvlc_exception_init( &ex ); 311 312 libvlc_media_player_set_rate( self->p_media_player, rate * 10, &ex ); 323 313 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 324 314 } … … 329 319 { 330 320 libvlc_exception_t ex; 331 libvlc_media_player_t* p_mi;332 321 int i_ret; 333 322 … … 335 324 libvlc_exception_init( &ex ); 336 325 337 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex ); 338 HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); 339 340 i_ret = libvlc_get_fullscreen( p_mi, &ex ); 341 libvlc_media_player_release( p_mi ); 326 i_ret = libvlc_get_fullscreen( self->p_media_player, &ex ); 342 327 HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); 343 328 … … 351 336 { 352 337 libvlc_exception_t ex; 353 libvlc_media_player_t* p_mi; 354 355 mediacontrol_exception_init( exception ); 356 libvlc_exception_init( &ex ); 357 358 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex ); 338 339 mediacontrol_exception_init( exception ); 340 libvlc_exception_init( &ex ); 341 342 libvlc_set_fullscreen( self->p_media_player, b_fullscreen, &ex ); 359 343 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 360 361 libvlc_set_fullscreen( p_mi, b_fullscreen, &ex ); 362 libvlc_media_player_release( p_mi ); 363 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 364 } 344 } src/control/mediacontrol_core.c
rbf1292e r445d63e 70 70 retval->p_instance = libvlc_new( argc, (const char**)argv, &ex ); 71 71 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 72 retval->p_playlist = retval->p_instance->p_libvlc_int->p_playlist; 72 retval->p_media_player = libvlc_media_player_new( retval->p_instance, &ex ); 73 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 73 74 return retval; 74 75 } … … 83 84 mediacontrol_get_libvlc_instance( mediacontrol_Instance *self ) 84 85 { 85 return self->p_instance; 86 return self->p_instance; 87 } 88 89 libvlc_media_player_t* 90 mediacontrol_get_media_player( mediacontrol_Instance *self ) 91 { 92 return self->p_media_player; 86 93 } 87 94 … … 90 97 mediacontrol_Exception *exception ) 91 98 { 92 mediacontrol_Instance* retval; 93 94 retval = ( mediacontrol_Instance* )malloc( sizeof( mediacontrol_Instance ) ); 95 if( ! retval ) 96 { 97 RAISE_NULL( mediacontrol_InternalException, "Out of memory" ); 98 } 99 retval->p_instance = p_instance; 100 retval->p_playlist = retval->p_instance->p_libvlc_int->p_playlist; 101 return retval; 99 mediacontrol_Instance* retval; 100 libvlc_exception_t ex; 101 102 libvlc_exception_init( &ex ); 103 104 retval = ( mediacontrol_Instance* )malloc( sizeof( mediacontrol_Instance ) ); 105 if( ! retval ) 106 { 107 RAISE_NULL( mediacontrol_InternalException, "Out of memory" ); 108 } 109 retval->p_instance = p_instance; 110 retval->p_media_player = libvlc_media_player_new( retval->p_instance, &ex ); 111 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 112 return retval; 102 113 } 103 114 … … 114 125 libvlc_exception_t ex; 115 126 vlc_int64_t pos; 116 libvlc_media_player_t * p_mi;117 127 118 128 mediacontrol_exception_init( exception ); … … 123 133 retval->key = a_key; 124 134 125 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex);126 HANDLE_LIBVLC_EXCEPTION_NULL( &ex );127 128 135 if( an_origin != mediacontrol_AbsolutePosition ) 129 136 { 130 libvlc_media_player_release( p_mi );131 137 /* Relative or ModuloPosition make no sense */ 132 138 RAISE_NULL( mediacontrol_PositionOriginNotSupported, … … 135 141 136 142 /* We are asked for an AbsolutePosition. */ 137 pos = libvlc_media_player_get_time( p_mi, &ex );143 pos = libvlc_media_player_get_time( self->p_media_player, &ex ); 138 144 139 145 if( a_key == mediacontrol_MediaTime ) … … 143 149 else 144 150 { 145 if( ! self->p_playlist->p_input ) 146 { 147 libvlc_media_player_release( p_mi ); 148 RAISE_NULL( mediacontrol_InternalException, 149 "No input" ); 150 } 151 retval->value = private_mediacontrol_unit_convert( self->p_playlist->p_input, 152 mediacontrol_MediaTime, 153 a_key, 154 pos ); 155 } 156 libvlc_media_player_release( p_mi ); 151 retval->value = private_mediacontrol_unit_convert( self->p_media_player, 152 mediacontrol_MediaTime, 153 a_key, 154 pos ); 155 } 157 156 return retval; 158 157 } … … 164 163 mediacontrol_Exception *exception ) 165 164 { 166 libvlc_media_player_t * p_mi;167 165 libvlc_exception_t ex; 168 166 vlc_int64_t i_pos; … … 171 169 mediacontrol_exception_init( exception ); 172 170 173 p_mi = libvlc_playlist_get_media_player( self->p_instance, &ex); 174 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 175 176 i_pos = private_mediacontrol_position2microsecond( self->p_playlist->p_input, a_position ); 177 libvlc_media_player_set_time( p_mi, i_pos / 1000, &ex ); 178 libvlc_media_player_release( p_mi ); 171 i_pos = private_mediacontrol_position2microsecond( self->p_media_player, a_position ); 172 libvlc_media_player_set_time( self->p_media_player, i_pos / 1000, &ex ); 179 173 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 180 174 } … … 195 189 mediacontrol_Exception *exception ) 196 190 { 197 playlist_t * p_playlist = self->p_playlist; 198 199 mediacontrol_exception_init( exception ); 200 if( ! p_playlist ) 201 { 202 RAISE( mediacontrol_PlaylistException, "No available playlist" ); 203 return; 204 } 205 206 vlc_mutex_lock( &p_playlist->object_lock ); 207 if( p_playlist->items.i_size ) 208 { 209 int i_from; 210 char *psz_from = NULL; 211 212 psz_from = ( char * )malloc( 20 * sizeof( char ) ); 213 if( psz_from && p_playlist->status.p_item ) 191 libvlc_media_t * p_media; 192 char * psz_name; 193 libvlc_exception_t ex; 194 195 mediacontrol_exception_init( exception ); 196 libvlc_exception_init( &ex ); 197 198 p_media = libvlc_media_player_get_media( self->p_media_player, &ex ); 199 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 200 201 if ( ! p_media ) 202 { 203 /* No media was defined. */ 204 RAISE( mediacontrol_PlaylistException, "No defined media." ); 205 } 206 else 207 { 208 /* A media was defined. Get its mrl to reuse it, but reset the options 209 (because start-time may have been set on the previous invocation */ 210 psz_name = libvlc_media_get_mrl( p_media, &ex ); 211 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 212 213 /* Create a new media */ 214 p_media = libvlc_media_new( self->p_instance, psz_name, &ex ); 215 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 216 217 if( a_position->value ) 214 218 { 215 i_from = private_mediacontrol_position2microsecond( p_playlist->p_input, a_position ) / 1000000; 216 217 /* Set start time */ 218 snprintf( psz_from, 20, "start-time=%i", i_from ); 219 input_ItemAddOption( p_playlist->status.p_item->p_input, psz_from ); 220 free( psz_from ); 219 char * psz_from; 220 libvlc_time_t i_from; 221 222 /* A start position was specified. Add it to media options */ 223 psz_from = ( char * )malloc( 20 * sizeof( char ) ); 224 i_from = private_mediacontrol_position2microsecond( self->p_media_player, a_position ) / 1000000; 225 snprintf( psz_from, 20, "start-time=%ld", i_from ); 226 libvlc_media_add_option( p_media, psz_from, &ex ); 227 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 221 228 } 222 223 vlc_mutex_unlock( &p_playlist->object_lock ); 224 playlist_Play( p_playlist ); 229 230 libvlc_media_player_set_media( self->p_media_player, p_media, &ex ); 231 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 232 233 libvlc_media_player_play( self->p_media_player, &ex ); 234 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 235 } 236 } 237 238 void 239 mediacontrol_pause( mediacontrol_Instance *self, 240 mediacontrol_Exception *exception ) 241 { 242 libvlc_exception_t ex; 243 244 mediacontrol_exception_init( exception ); 245 libvlc_exception_init( &ex ); 246 libvlc_media_player_pause( self->p_media_player, &ex ); 247 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 248 } 249 250 void 251 mediacontrol_resume( mediacontrol_Instance *self, 252 mediacontrol_Exception *exception ) 253 { 254 libvlc_exception_t ex; 255 256 mediacontrol_exception_init( exception ); 257 libvlc_exception_init( &ex ); 258 libvlc_media_player_pause( self->p_media_player, &ex ); 259 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 260 } 261 262 void 263 mediacontrol_stop( mediacontrol_Instance *self, 264 mediacontrol_Exception *exception ) 265 { 266 libvlc_exception_t ex; 267 268 mediacontrol_exception_init( exception ); 269 libvlc_exception_init( &ex ); 270 libvlc_media_player_stop( self->p_media_player, &ex ); 271 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 272 } 273 274 /************************************************************************** 275 * File management 276 **************************************************************************/ 277 278 void 279 mediacontrol_set_mrl( mediacontrol_Instance *self, 280 const char * psz_file, 281 mediacontrol_Exception *exception ) 282 { 283 libvlc_media_t * p_media; 284 libvlc_exception_t ex; 285 286 mediacontrol_exception_init( exception ); 287 libvlc_exception_init( &ex ); 288 289 p_media = libvlc_media_new( self->p_instance, psz_file, &ex ); 290 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 291 292 libvlc_media_player_set_media( self->p_media_player, p_media, &ex ); 293 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 294 } 295 296 char * 297 mediacontrol_get_mrl( mediacontrol_Instance *self, 298 mediacontrol_Exception *exception ) 299 { 300 libvlc_media_t * p_media; 301 libvlc_exception_t ex; 302 303 mediacontrol_exception_init( exception ); 304 libvlc_exception_init( &ex ); 305 306 p_media = libvlc_media_player_get_media( self->p_media_player, &ex ); 307 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 308 309 if ( ! p_media ) 310 { 311 return strdup( "" ); 225 312 } 226 313 else 227 314 { 228 RAISE( mediacontrol_PlaylistException, "Empty playlist." ); 229 vlc_mutex_unlock( &p_playlist->object_lock ); 230 } 231 } 232 233 void 234 mediacontrol_pause( mediacontrol_Instance *self, 235 const mediacontrol_Position * a_position, 236 mediacontrol_Exception *exception ) 237 { 238 input_thread_t *p_input = self->p_playlist->p_input; 239 240 /* FIXME: use the a_position parameter */ 241 mediacontrol_exception_init( exception ); 242 if( p_input != NULL ) 243 { 244 var_SetInteger( p_input, "state", PAUSE_S ); 245 } 246 else 247 { 248 RAISE( mediacontrol_InternalException, "No input" ); 249 } 250 } 251 252 void 253 mediacontrol_resume( mediacontrol_Instance *self, 254 const mediacontrol_Position * a_position, 255 mediacontrol_Exception *exception ) 256 { 257 input_thread_t *p_input = self->p_playlist->p_input; 258 259 /* FIXME: use the a_position parameter */ 260 mediacontrol_exception_init( exception ); 261 if( p_input != NULL ) 262 { 263 var_SetInteger( p_input, "state", PAUSE_S ); 264 } 265 else 266 { 267 RAISE( mediacontrol_InternalException, "No input" ); 268 } 269 } 270 271 void 272 mediacontrol_stop( mediacontrol_Instance *self, 273 const mediacontrol_Position * a_position, 274 mediacontrol_Exception *exception ) 275 { 276 /* FIXME: use the a_position parameter */ 277 mediacontrol_exception_init( exception ); 278 if( !self->p_playlist ) 279 { 280 RAISE( mediacontrol_PlaylistException, "No playlist" ); 281 } 282 else 283 playlist_Stop( self->p_playlist ); 284 } 285 286 /************************************************************************** 287 * Playlist management 288 **************************************************************************/ 289 290 void 291 mediacontrol_playlist_add_item( mediacontrol_Instance *self, 292 const char * psz_file, 293 mediacontrol_Exception *exception ) 294 { 295 libvlc_exception_t ex; 296 297 mediacontrol_exception_init( exception ); 298 libvlc_exception_init( &ex ); 299 300 libvlc_playlist_add( self->p_instance, psz_file, psz_file, &ex ); 301 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 302 } 303 304 void 305 mediacontrol_playlist_next_item( mediacontrol_Instance *self, 306 mediacontrol_Exception *exception ) 307 { 308 libvlc_exception_t ex; 309 310 mediacontrol_exception_init( exception ); 311 libvlc_exception_init( &ex ); 312 313 libvlc_playlist_next( self->p_instance, &ex ); 314 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 315 } 316 317 void 318 mediacontrol_playlist_clear( mediacontrol_Instance *self, 319 mediacontrol_Exception *exception ) 320 { 321 libvlc_exception_t ex; 322 323 mediacontrol_exception_init( exception ); 324 libvlc_exception_init( &ex ); 325 326 libvlc_playlist_clear( self->p_instance, &ex ); 327 HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); 328 } 329 330 mediacontrol_PlaylistSeq * 331 mediacontrol_playlist_get_list( mediacontrol_Instance *self, 332 mediacontrol_Exception *exception ) 333 { 334 mediacontrol_PlaylistSeq *retval = NULL; 335 int i_index; 336 playlist_t * p_playlist = self->p_playlist; 337 playlist_item_t *p_root; 338 int i_playlist_size; 339 340 mediacontrol_exception_init( exception ); 341 if( !p_playlist ) 342 { 343 RAISE( mediacontrol_PlaylistException, "No playlist" ); 344 return NULL; 345 } 346 347 vlc_mutex_lock( &p_playlist->object_lock ); 348 349 p_root = p_playlist->p_root_onelevel->pp_children[0]; 350 i_playlist_size = p_root->i_children; 351 retval = private_mediacontrol_PlaylistSeq__alloc( i_playlist_size ); 352 353 for( i_index = 0 ; i_index < i_playlist_size ; i_index++ ) 354 { 355 retval->data[i_index] = strdup( p_root->pp_children[i_index]->p_input->psz_name ); 356 } 357 vlc_mutex_unlock( &p_playlist->object_lock ); 358 359 return retval; 315 char * psz_mrl; 316 317 psz_mrl = libvlc_media_get_mrl( p_media, &ex ); 318 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 319 return psz_mrl; 320 } 360 321 } 361 322 … … 370 331 { 371 332 mediacontrol_StreamInformation *retval = NULL; 372 input_thread_t *p_input = self->p_playlist->p_input; 373 vlc_value_t val; 333 libvlc_media_t * p_media; 334 libvlc_exception_t ex; 335 336 libvlc_exception_init( &ex ); 374 337 375 338 retval = ( mediacontrol_StreamInformation* ) … … 381 344 } 382 345 383 if( ! p_input ) 384 { 385 /* No p_input defined */ 346 p_media = libvlc_media_player_get_media( self->p_media_player, &ex ); 347 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 348 if( ! p_media ) 349 { 350 /* No p_media defined */ 386 351 retval->streamstatus = mediacontrol_UndefinedStatus; 387 352 retval->url = strdup( "None" ); … … 391 356 else 392 357 { 393 switch( var_GetInteger( p_input, "state" ) ) 358 libvlc_state_t state; 359 360 state = libvlc_media_player_get_state( self->p_media_player, &ex ); 361 HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); 362 switch( state ) 394 363 { 395 case PLAYING_S:364 case libvlc_Playing : 396 365 retval->streamstatus = mediacontrol_PlayingStatus; 397 366 break; 398 case PAUSE_S:367 case libvlc_Paused : 399 368 retval->streamstatus = mediacontrol_PauseStatus; 400 369 break; 401 case INIT_S : 370 case libvlc_Opening : 371 case libvlc_Buffering: 402 372 retval->streamstatus = mediacontrol_InitStatus; 403 373 break; 404 case END_S : 374 case libvlc_Stopped: 375 case libvlc_Ended: 405 376 retval->streamstatus = mediacontrol_EndStatus; 406 377 break; … … 410 381 } 411 382 412 retval->url = input_item_GetURI( input_GetItem( p_input ));383 retval->url = libvlc_media_get_mrl( p_media, &ex ); 413 384 414 385 /* TIME and LENGTH are in microseconds. We want them in ms */ 415 var_Get( p_input, "time", &val); 416 retval->position = val.i_time / 1000; 417 418 var_Get( p_input, "length", &val); 419 retval->length = val.i_time / 1000; 420 421 retval->position = private_mediacontrol_unit_convert( p_input, 386 retval->position = libvlc_media_player_get_time( self->p_media_player, &ex ); 387 388 retval->length = libvlc_media_player_get_length( self->p_media_player, &ex ); 389 390 retval->position = private_mediacontrol_unit_convert( self->p_media_player, 422 391 mediacontrol_MediaTime, a_key, 423 392 retval->position ); 424 retval->length = private_mediacontrol_unit_convert( p_input,393 retval->length = private_mediacontrol_unit_convert( self->p_media_player, 425 394 mediacontrol_MediaTime, a_key, 426 395 retval->length ); src/control/mediacontrol_internal.h
r3b0c979 r445d63e 31 31 #include <vlc/vlc.h> 32 32 #include <vlc/mediacontrol_structures.h> 33 #include "libvlc_internal.h"33 #include <vlc/libvlc_structures.h> 34 34 #include <vlc/libvlc.h> 35 35 36 36 struct mediacontrol_Instance { 37 structlibvlc_instance_t * p_instance;38 playlist_t *p_playlist;37 libvlc_instance_t * p_instance; 38 libvlc_media_player_t * p_media_player; 39 39 }; 40 40 41 vlc_int64_t private_mediacontrol_unit_convert( input_thread_t *p_input,42 mediacontrol_PositionKey from,43 mediacontrol_PositionKey to,44 vlc_int64_t value );45 vlc_int64_t private_mediacontrol_position2microsecond( input_thread_t *p_input,46 const mediacontrol_Position *pos );41 libvlc_time_t private_mediacontrol_unit_convert( libvlc_media_player_t *p_media_player, 42 mediacontrol_PositionKey from, 43 mediacontrol_PositionKey to, 44 vlc_int64_t value ); 45 libvlc_time_t private_mediacontrol_position2microsecond( libvlc_media_player_t *p_media_player, 46 const mediacontrol_Position *pos ); 47 47 48 48 /** … … 53 53 54 54 mediacontrol_RGBPicture *private_mediacontrol_createRGBPicture( int, int, long, vlc_int64_t l_date, char *, int); 55 56 mediacontrol_PlaylistSeq *private_mediacontrol_PlaylistSeq__alloc( int size );57 55 58 56 src/control/mediacontrol_util.c
r57bbabb r445d63e 27 27 28 28 #include <vlc/mediacontrol.h> 29 30 #include <vlc_interface.h> 31 #include <vlc_aout.h> 32 #include <vlc_input.h> 33 #include <vlc_demux.h> 29 #include <vlc/libvlc.h> 34 30 35 31 #include <vlc_vout.h> … … 54 50 #endif 55 51 56 /* FIXME: Need to stop accessing private input structures !! */ 57 #include "input/input_internal.h" 58 59 vlc_int64_t private_mediacontrol_unit_convert( input_thread_t *p_input, 60 mediacontrol_PositionKey from, 61 mediacontrol_PositionKey to, 62 vlc_int64_t value ) 52 libvlc_time_t private_mediacontrol_unit_convert( libvlc_media_player_t *p_media_player, 53 mediacontrol_PositionKey from, 54 mediacontrol_PositionKey to, 55 vlc_int64_t value ) 63 56 { 64 57 if( to == from ) 65 58 return value; 66 59 67 /* For all conversions, we need data from p_input */ 68 if( !p_input ) 60 if( !p_media_player ) 69 61 return 0; 70 62 … … 74 66 if( to == mediacontrol_ByteCount ) 75 67 { 76 /* FIXME */68 /* FIXME Unsupported */ 77 69 /* vlc < 0.8 API */ 78 70 /* return value * 50 * p_input->stream.i_mux_rate / 1000; */ … … 82 74 { 83 75 double f_fps; 84 85 if( demux_Control( p_input->p->input.p_demux, DEMUX_GET_FPS, &f_fps ) || f_fps < 0.1 ) 76 libvlc_exception_t ex; 77 libvlc_exception_init( &ex ); 78 79 f_fps = libvlc_media_player_get_rate( p_media_player, &ex ); 80 if( f_fps < 0 ) 86 81 return 0; 87 82 else … … 95 90 { 96 91 double f_fps; 97 98 if( demux_Control( p_input->p->input.p_demux, DEMUX_GET_FPS, &f_fps ) || 99 f_fps < 0.1 ) 92 libvlc_exception_t ex; 93 libvlc_exception_init( &ex ); 94 95 f_fps = libvlc_media_player_get_rate( p_media_player, &ex ); 96 if( f_fps < 0 ) 100 97 return 0; 101 98 … … 117 114 /* FIXME */ 118 115 return 0; 119 /* vlc < 0.8 API: */120 121 // if( p_input->stream.i_mux_rate == 0 )122 // return 0;123 //124 // /* Convert an offset into milliseconds. Taken from input_ext-intf.c.125 // The 50 hardcoded constant comes from the definition of i_mux_rate :126 // i_mux_rate : the rate we read the stream (in units of 50 bytes/s) ;127 // 0 if undef */128 // if( to == mediacontrol_MediaTime )129 // return ( vlc_int64_t )( 1000 * value / 50 / p_input->stream.i_mux_rate );130 //131 // if( to == mediacontrol_SampleCount )132 // {133 // double f_fps;134 // if( demux_Control( p_input->input.p_demux, DEMUX_GET_FPS, &f_fps ) || f_fps < 0.1 )135 // return 0;136 // else137 // return ( vlc_int64_t )( value * f_fps / 50 / p_input->stream.i_mux_rate );138 // }139 /* Cannot happen */140 break;141 116 } 142 117 /* Cannot happen */ … … 146 121 /* Converts a mediacontrol_Position into a time in microseconds in 147 122 movie clock time */ 148 vlc_int64_t 149 private_mediacontrol_position2microsecond( input_thread_t* p_input, const mediacontrol_Position * pos ) 123 libvlc_time_t 124 private_mediacontrol_position2microsecond( libvlc_media_player_t * p_media_player, 125 const mediacontrol_Position * pos ) 150 126 { 151 127 switch( pos->origin ) 152 128 { 153 129 case mediacontrol_AbsolutePosition: 154 return ( 1000 * private_mediacontrol_unit_convert( p_ input,130 return ( 1000 * private_mediacontrol_unit_convert( p_media_player, 155 131 pos->key, /* from */ 156 132 mediacontrol_MediaTime, /* to */ … … 159 135 case mediacontrol_RelativePosition: 160 136 { 161 vlc_int64_t l_pos; 162 vlc_value_t val; 163 164 val.i_time = 0; 165 if( p_input ) 166 { 167 var_Get( p_input, "time", &val ); 168 } 169 170 l_pos = 1000 * private_mediacontrol_unit_convert( p_input, 171 pos->key, 172
