comparison src/cue/cuesheet.c @ 1737:b729c7a72c20

- remove get_song_info interface. - remove dependency to real_ip's get_song_info.
author Yoshiki Yazawa <yaz@cc.rim.or.jp>
date Wed, 19 Sep 2007 18:00:10 +0900
parents 81ae3fcc9673
children cf97a7767faa
comparison
equal deleted inserted replaced
1736:35f8a5fbd1b6 1737:b729c7a72c20
45 static void seek(InputPlayback *data, gint time); 45 static void seek(InputPlayback *data, gint time);
46 static void stop(InputPlayback *data); 46 static void stop(InputPlayback *data);
47 static void cue_pause(InputPlayback *data, short); 47 static void cue_pause(InputPlayback *data, short);
48 static Tuple *get_tuple(gchar *uri); 48 static Tuple *get_tuple(gchar *uri);
49 static Tuple *get_tuple_uri(gchar *uri); 49 static Tuple *get_tuple_uri(gchar *uri);
50 static void get_song_info(gchar *uri, gchar **title, gint *length);
51 static void cue_init(void); 50 static void cue_init(void);
52 static void cue_cleanup(void); 51 static void cue_cleanup(void);
53 static gpointer watchdog_func(gpointer data); 52 static gpointer watchdog_func(gpointer data);
54 53
55 static GThread *watchdog_thread = NULL; 54 static GThread *watchdog_thread = NULL;
100 .stop = stop, 99 .stop = stop,
101 .pause = cue_pause, 100 .pause = cue_pause,
102 .seek = seek, 101 .seek = seek,
103 .get_time = get_time, 102 .get_time = get_time,
104 .cleanup = cue_cleanup, /* cleanup */ 103 .cleanup = cue_cleanup, /* cleanup */
105 .get_song_info = get_song_info, /* XXX get_song_info iface */
106 .get_song_tuple = get_tuple, 104 .get_song_tuple = get_tuple,
107 }; 105 };
108 106
109 InputPlugin *cue_iplist[] = { &cue_ip, NULL }; 107 InputPlugin *cue_iplist[] = { &cue_ip, NULL };
110 108
296 tuple_associate_int(out, FIELD_TRACK_NUMBER, NULL, track + 1); 294 tuple_associate_int(out, FIELD_TRACK_NUMBER, NULL, track + 1);
297 295
298 return out; 296 return out;
299 } 297 }
300 298
301 static void get_song_info(gchar *uri, gchar **title, gint *length)
302 {
303 Tuple *tuple;
304
305 /* this isn't a cue:// uri? */
306 if (strncasecmp("cue://", uri, 6))
307 {
308 gchar *tmp = g_strdup_printf("cue://%s?0", uri);
309 tuple = get_tuple_uri(tmp);
310 g_free(tmp);
311 }
312 else
313 tuple = get_tuple_uri(uri);
314
315 g_return_if_fail(tuple != NULL);
316
317 *title = tuple_formatter_make_title_string(tuple, get_gentitle_format());
318 *length = tuple_get_int(tuple, FIELD_LENGTH, NULL);
319
320 tuple_free(tuple);
321 }
322
323 static void seek(InputPlayback * data, gint time) 299 static void seek(InputPlayback * data, gint time)
324 { 300 {
325 g_mutex_lock(cue_target_time_mutex); 301 g_mutex_lock(cue_target_time_mutex);
326 target_time = time * 1000; 302 target_time = time * 1000;
327 g_mutex_unlock(cue_target_time_mutex); 303 g_mutex_unlock(cue_target_time_mutex);
456 432
457 static void play_cue_uri(InputPlayback * data, gchar *uri) 433 static void play_cue_uri(InputPlayback * data, gchar *uri)
458 { 434 {
459 gchar *path2 = g_strdup(uri + 6); // "cue://" is stripped. 435 gchar *path2 = g_strdup(uri + 6); // "cue://" is stripped.
460 gchar *_path = strchr(path2, '?'); 436 gchar *_path = strchr(path2, '?');
461 gint file_length = 0;
462 gint track = 0; 437 gint track = 0;
463 gchar *dummy = NULL;
464 ProbeResult *pr; 438 ProbeResult *pr;
465 InputPlugin *real_ip_plugin; 439 InputPlugin *real_ip_plugin;
440 Tuple *tuple = NULL;
466 441
467 #ifdef DEBUG 442 #ifdef DEBUG
468 g_print("f: play_cue_uri\n"); 443 g_print("f: play_cue_uri\n");
469 g_print("play_cue_uri: playback = %p\n", data); 444 g_print("play_cue_uri: playback = %p\n", data);
470 g_print("play_cue_uri: path2 = %s\n", path2); 445 g_print("play_cue_uri: path2 = %s\n", path2);
530 target_time = finetune_seek ? finetune_seek : cue_tracks[track].index; 505 target_time = finetune_seek ? finetune_seek : cue_tracks[track].index;
531 g_mutex_unlock(cue_target_time_mutex); 506 g_mutex_unlock(cue_target_time_mutex);
532 #ifdef DEBUG 507 #ifdef DEBUG
533 g_print("cue: play_cue_uri: target_time = %d\n", target_time); 508 g_print("cue: play_cue_uri: target_time = %d\n", target_time);
534 #endif 509 #endif
535 /* in some plugins, NULL as 2nd arg causes crash. */ 510
536 real_ip->plugin->get_song_info(cue_file, &dummy, &file_length); 511 tuple = real_ip->plugin->get_song_tuple(cue_file);
537 g_free(dummy); 512 if(tuple) {
538 cue_tracks[last_cue_track].index = file_length; 513 cue_tracks[last_cue_track].index = tuple_get_int(tuple, FIELD_LENGTH, NULL);
514 tuple_free(tuple); tuple = NULL;
515 }
539 516
540 /* kick watchdog thread */ 517 /* kick watchdog thread */
541 g_mutex_lock(cue_mutex); 518 g_mutex_lock(cue_mutex);
542 watchdog_state = RUN; 519 watchdog_state = RUN;
543 g_mutex_unlock(cue_mutex); 520 g_mutex_unlock(cue_mutex);