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); }
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; }
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; }
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; }