⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 access.c

📁 VLC媒体播放程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    meta_info_add_str( "Genre", p_cdda->cddb.disc->genre );    meta_info_add_str( "Extended Data", p_cdda->cddb.disc->ext_data );    {      char year[5];      if (p_cdda->cddb.disc->year != 0) {        snprintf(year, 5, "%d", p_cdda->cddb.disc->year);        meta_info_add_str( "Year", year );      }      if ( p_cdda->cddb.disc->discid ) {        input_AddInfo( p_cat, _("CDDB Disc ID"), "%x",                       p_cdda->cddb.disc->discid );      }      if ( p_cdda->cddb.disc->category != CDDB_CAT_INVALID ) {        input_AddInfo( p_cat, _("CDDB Disc Category"), "%s",                       CDDB_CATEGORY[p_cdda->cddb.disc->category] );      }    }  }#endif /*HAVE_LIBCDDB*/#define TITLE_MAX 30  {    track_t i_track = p_cdda->i_nb_tracks;    char psz_buffer[MSTRTIME_MAX_SIZE];    mtime_t i_duration =      (p_cdda->p_sectors[i_track] - p_cdda->p_sectors[0])      / CDIO_CD_FRAMES_PER_SEC;    dbg_print( INPUT_DBG_META, "Duration %ld", (long int) i_duration );    input_AddInfo( p_cat, _("Duration"), "%s",                   secstotimestr( psz_buffer, i_duration ) );    for( i_track = 0 ; i_track < p_cdda->i_nb_tracks ; i_track++ ) {      char track_str[TITLE_MAX];      mtime_t i_duration =	(p_cdda->p_sectors[i_track+1] - p_cdda->p_sectors[i_track])	/ CDIO_CD_FRAMES_PER_SEC;      snprintf(track_str, TITLE_MAX, "%s %02d", _("Track"), i_track+1);      p_cat = input_InfoCategory( p_input, track_str );      input_AddInfo( p_cat, _("Duration"), "%s",		     secstotimestr( psz_buffer, i_duration ) );#ifdef HAVE_LIBCDDB      if (p_cdda->i_cddb_enabled) {        cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,                                            i_track);        if (t != NULL && t->artist != NULL) {	  input_AddInfo( p_cat, _("Artist"), "%s", t->artist );	  input_AddInfo( p_cat, _("Title"), "%s",  t->title );	}      }#endif    }  }  if( p_playlist ) vlc_object_release( p_playlist );}#ifdef HAVE_LIBCDDB#define free_and_dup(var, val) \  if (var) free(var);          \  if (val) var=strdup(val);static voidGetCDDBInfo( const input_thread_t *p_input, cdda_data_t *p_cdda ){  dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "" );  if (config_GetInt( p_input, MODULE_STRING "-cddb-enabled" )) {    int i, i_matches;    cddb_conn_t  *conn = cddb_new();    const CdIo *cdio = p_cdda->p_cddev->cdio;    cddb_log_set_handler (uninit_log_handler);    if (!conn) {      msg_Warn( p_input, "unable to initialize libcddb" );      goto cddb_destroy;    }    cddb_set_email_address( conn,                            config_GetPsz( p_input,                                           MODULE_STRING "-cddb-email") );    cddb_set_server_name( conn,                          config_GetPsz( p_input,                                         MODULE_STRING "-cddb-server") );    cddb_set_server_port(conn,                          config_GetInt( p_input,                                         MODULE_STRING "-cddb-port") );    /* Set the location of the local CDDB cache directory.       The default location of this directory is */    if (!config_GetInt( p_input, MODULE_STRING "-cddb-enable-cache" ))      cddb_cache_disable(conn);    cddb_cache_set_dir(conn,                       config_GetPsz( p_input,                                      MODULE_STRING "-cddb-cachedir") );    cddb_set_timeout(conn,                     config_GetInt( p_input, MODULE_STRING "-cddb-timeout") );    if (config_GetInt( p_input, MODULE_STRING "-cddb-httpd" )) {      cddb_http_enable(conn);    } else      cddb_http_disable(conn);    p_cdda->cddb.disc = cddb_disc_new();    if (!p_cdda->cddb.disc) {      msg_Err( p_input, "Unable to create CDDB disc structure." );      goto cddb_end;    }    for(i = 1; i <= p_cdda->i_nb_tracks; i++) {      cddb_track_t *t = cddb_track_new();      t->frame_offset = cdio_get_track_lba(cdio, i);      cddb_disc_add_track(p_cdda->cddb.disc, t);    }    p_cdda->cddb.disc->length =      cdio_get_track_lba(cdio, CDIO_CDROM_LEADOUT_TRACK)      / CDIO_CD_FRAMES_PER_SEC;    if (!cddb_disc_calc_discid(p_cdda->cddb.disc)) {      msg_Err( p_input, "CDDB disc calc failed" );      goto cddb_destroy;    }    i_matches = cddb_query(conn, p_cdda->cddb.disc);    if (i_matches > 0) {      if (i_matches > 1)        msg_Warn( p_input, "Found %d matches in CDDB. Using first one.",                  i_matches);      cddb_read(conn, p_cdda->cddb.disc);      if (p_cdda->i_debug & INPUT_DBG_CDDB)        cddb_disc_print(p_cdda->cddb.disc);    } else {      msg_Warn( p_input, "CDDB error: %s", cddb_error_str(errno));    }  cddb_destroy:    cddb_destroy(conn);  }  cddb_end: ;}#endif /*HAVE_LIBCDDB*/#define add_format_str_info(val)                         \  {                                                      \    const char *str = val;                               \    unsigned int len;                                    \    if (val != NULL) {                                   \      len=strlen(str);                                   \      if (len != 0) {                                    \        strncat(tp, str, TEMP_STR_LEN-(tp-temp_str));    \        tp += len;                                       \      }                                                  \      saw_control_prefix = false;                        \    }                                                    \  }#define add_format_num_info(val, fmt)                    \  {                                                      \    char num_str[10];                                    \    unsigned int len;                                    \    sprintf(num_str, fmt, val);                          \    len=strlen(num_str);                                 \    if (len != 0) {                                      \      strncat(tp, num_str, TEMP_STR_LEN-(tp-temp_str));  \      tp += len;                                         \    }                                                    \    saw_control_prefix = false;                          \  }/*!   Take a format string and expand escape sequences, that is sequences that   begin with %, with information from the current CD.   The expanded string is returned. Here is a list of escape sequences:   %a : The album artist **   %A : The album information **   %C : Category **   %I : CDDB disk ID **   %G : Genre **   %M : The current MRL   %m : The CD-DA Media Catalog Number (MCN)   %n : The number of tracks on the CD   %p : The artist/performer/composer in the track **   %T : The track number **   %s : Number of seconds in this track   %t : The name **   %Y : The year 19xx or 20xx **   %% : a %*/static char *CDDAFormatStr(const input_thread_t *p_input, cdda_data_t *p_cdda,              const char format_str[], const char *mrl, int i_track){#define TEMP_STR_SIZE 256#define TEMP_STR_LEN (TEMP_STR_SIZE-1)  static char    temp_str[TEMP_STR_SIZE];  size_t i;  char * tp = temp_str;  bool saw_control_prefix = false;  size_t format_len = strlen(format_str);  bzero(temp_str, TEMP_STR_SIZE);  for (i=0; i<format_len; i++) {    if (!saw_control_prefix && format_str[i] != '%') {      *tp++ = format_str[i];      saw_control_prefix = false;      continue;    }    switch(format_str[i]) {    case '%':      if (saw_control_prefix) {        *tp++ = '%';      }      saw_control_prefix = !saw_control_prefix;      break;#ifdef HAVE_LIBCDDB    case 'a':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_str_info(p_cdda->cddb.disc->artist);      break;    case 'A':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_str_info(p_cdda->cddb.disc->title);      break;    case 'C':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_str_info(CDDB_CATEGORY[p_cdda->cddb.disc->category]);      break;    case 'G':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_str_info(p_cdda->cddb.disc->genre);      break;    case 'I':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_num_info(p_cdda->cddb.disc->discid, "%x");      break;    case 'Y':      if (!p_cdda->i_cddb_enabled) goto not_special;      add_format_num_info(p_cdda->cddb.disc->year, "%5d");      break;    case 't':      if (p_cdda->i_cddb_enabled) {        cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,                                            i_track-1);        if (t != NULL && t->title != NULL)          add_format_str_info(t->title);      } else goto not_special;      break;    case 'p':      if (p_cdda->i_cddb_enabled) {        cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,                                            i_track-1);        if (t != NULL && t->artist != NULL)          add_format_str_info(t->artist);      } else goto not_special;      break;#endif    case 'M':      add_format_str_info(mrl);      break;#if FINISHED    case 'm':      add_format_str_info(p_cdda->mcn);      break;#endif    case 'n':      add_format_num_info(p_cdda->i_nb_tracks, "%d");      break;#ifdef HAVE_LIBCDDB    case 's':      if (p_cdda->i_cddb_enabled) {        char psz_buffer[MSTRTIME_MAX_SIZE];        mtime_t i_duration =          (p_cdda->p_sectors[i_track] - p_cdda->p_sectors[i_track-1])          / CDIO_CD_FRAMES_PER_SEC;        add_format_str_info(secstotimestr( psz_buffer, i_duration ) );      } else goto not_special;      break;#endif    case 'T':      add_format_num_info(i_track, "%02d");      break;#ifdef HAVE_LIBCDDB    not_special:#endif    default:      *tp++ = '%';      *tp++ = format_str[i];      saw_control_prefix = false;    }  }  return strdup(temp_str);}static voidCDDACreatePlayListItem(const input_thread_t *p_input, cdda_data_t *p_cdda,                       playlist_t *p_playlist, unsigned int i_track,                       char *psz_mrl, int psz_mrl_max,                       const char *psz_source, int playlist_operation,                       int i_pos){  mtime_t i_duration =    (p_cdda->p_sectors[i_track] - p_cdda->p_sectors[i_track-1])    * (1000000 / CDIO_CD_FRAMES_PER_SEC) ;  char *p_author;  char *p_title;  char *config_varname = MODULE_STRING "-title-format";  playlist_item_t *p_item;#ifdef HAVE_LIBCDDB  if (p_cdda->i_cddb_enabled) {    config_varname = MODULE_STRING "-cddb-title-format";  }#endif /*HAVE_LIBCDDB*/  snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u",           CDDA_MRL_PREFIX, psz_source, i_track);  p_title = CDDAFormatStr(p_input, p_cdda,                          config_GetPsz( p_input, config_varname ),                          psz_mrl, i_track);  dbg_print( INPUT_DBG_META, "mrl: %s, title: %s, duration, %ld, pos %d",             psz_mrl, p_title, (long int) i_duration / 1000000 , i_pos );  playlist_AddExt( p_playlist, psz_mrl, p_title, playlist_operation,                         i_pos, i_duration , NULL, 0);  if( i_pos == PLAYLIST_END ) i_pos = p_playlist->i_size - 1;  vlc_mutex_lock( &p_playlist->object_lock );  p_item = playlist_ItemGetByPos( p_playlist, i_pos );  vlc_mutex_unlock( &p_playlist->object_lock );  if( !p_item )      return;  vlc_mutex_lock( &p_item->lock );  p_author =    CDDAFormatStr( p_input, p_cdda,                   config_GetPsz( p_input, MODULE_STRING "-author-format" ),                   psz_mrl, i_track );  playlist_ItemAddInfo( p_item ,  _("General"),_("Author"), p_author);#ifdef HAVE_LIBCDDB  if (p_cdda->i_cddb_enabled) {    const char *psz_general_cat = _("General");    playlist_ItemAddInfo( p_item, psz_general_cat, _("Album"),                      "%s", p_cdda->cddb.disc->title);    playlist_ItemAddInfo( p_item, psz_general_cat, _("Disc Artist(s)"),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -