示例#1
0
void Xine::gather_info_internal(){
  if (quitting)
    return;
  if (!validate_stream())
    return;
  if (file.type == "media-track"){
    _title = "";
    _artist = "";
    _album = "";
  }
  else{
    const char *meta_info = xine_get_meta_info(stream, XINE_META_INFO_TITLE);
    _title = (meta_info) ? meta_info : "";
    meta_info = xine_get_meta_info(stream, XINE_META_INFO_ARTIST);
    _artist = (meta_info) ? meta_info : "";
    meta_info = xine_get_meta_info(stream, XINE_META_INFO_ALBUM);
    _album = (meta_info) ? meta_info : "";
    meta_info = xine_get_meta_info(stream, XINE_META_INFO_INPUT_PLUGIN);
    if (meta_info) /* If it is not a local file, _artist = _album, so that mms doesn't just show the filename */
      if (strcasecmp(meta_info, "pluginfile") != 0){
	_artist = _album;
	_album = "";
      }
  }


  int position_, length_ = 0;
  for (int t = 0; t < 5; t++){ /* sometimes xine doesn't return a valid position, especially after a seek
                                while playing an audio CD (it sucks) */
    xine_get_pos_length(stream, 0, &position_, &length_);
    if (position_ > 0)
      break;
    mmsUsleep(50000);
  }

  if (position_ > 0){
    _cur_time = position_/1000;
    _total_time = length_/1000;
  }
/*
  else
  {
    _title = "";
    _artist ="";
    _album = "Buffering...";
  }
*/ 
  //fprintf(stderr, "Gather info internal (position %d)\n", _cur_time);
}
示例#2
0
static char * engine_load_meta_info_update_field(char * old, xine_stream_t *stream, int info){
  const char * tmp = xine_get_meta_info(stream, info);
  if(tmp == NULL || !strlen(tmp)){
    return NULL;
  }
  char * edit = strdup(tmp);
  char * clean = ltrim(rtrim(edit));
  if(old != NULL){
    free(old);
  }
  char * result = strdup(clean);
  free(edit);
  return result;
}
示例#3
0
文件: engine.c 项目: debolk/mjs
static char * engine_load_meta_info_update_field(char * old, xine_stream_t *stream, int info)
{
	const char * tmp = xine_get_meta_info(stream, info);
	if(tmp == NULL || !strlen(tmp))
		return NULL;

	//Allowed because strtrim returns old pointer ;).
	char * clean = strtrim(strdup(tmp));

	if(old != NULL)
		free(old);

	char * result = strdup(clean);
	free(clean);

	return result;
}
示例#4
0
int framecatcher::open(const std::string& fileName){

	int errorCode = 0;


	/* ensure resources used previous stream have been released */
	if(stream != NULL)
		close();


	stream = xine_stream_new(xine,NULL,vo_port);

	if(stream == NULL)
		return 0;


	// open stream
	if(!xine_open(stream,fileName.c_str())){
		errorCode= xine_get_error(stream);
		return errorCode;
	}

	// get length of video file stream is attached to
	if(!xine_get_pos_length(stream,0,0,&length)){
		errorCode = xine_get_error(stream);
		return errorCode;
	}

	xine_play(stream,0,0);
	const char* temp_codec=xine_get_meta_info(stream, XINE_META_INFO_VIDEOCODEC);

	if(temp_codec == NULL)
		return 0;

	codec = temp_codec;
	return 1;
}