void CPlayerCoreFactory::GetPlayers( VECPLAYERCORES &vecCores ) { vecCores.push_back(EPC_DVDPLAYER); vecCores.push_back(EPC_PAPLAYER); vecCores.push_back(EPC_QTPLAYER); vecCores.push_back(EPC_PMSPLAYER); }
void CPlayerSelectionRule::GetPlayers(const CFileItem& item, VECPLAYERCORES &vecCores) { CLog::Log(LOGDEBUG, "CPlayerSelectionRule::GetPlayers: considering rule: %s", m_name.c_str()); if (m_bStreamDetails && !item.HasVideoInfoTag()) return; if (m_tAudio >= 0 && (m_tAudio > 0) != item.IsAudio()) return; if (m_tVideo >= 0 && (m_tVideo > 0) != item.IsVideo()) return; if (m_tInternetStream >= 0 && (m_tInternetStream > 0) != item.IsInternetStream()) return; if (m_tDVD >= 0 && (m_tDVD > 0) != item.IsDVD()) return; if (m_tDVDFile >= 0 && (m_tDVDFile > 0) != item.IsDVDFile()) return; if (m_tDVDImage >= 0 && (m_tDVDImage > 0) != item.IsDVDImage()) return; CRegExp regExp; if (m_bStreamDetails) { if (!item.GetVideoInfoTag()->HasStreamDetails()) { CLog::Log(LOGDEBUG, "CPlayerSelectionRule::GetPlayers: cannot check rule: %s, no StreamDetails", m_name.c_str()); return; } CStreamDetails streamDetails = item.GetVideoInfoTag()->m_streamDetails; if (CompileRegExp(m_audioCodec, regExp) && !MatchesRegExp(streamDetails.GetAudioCodec(), regExp)) return; if (CompileRegExp(m_videoCodec, regExp) && !MatchesRegExp(streamDetails.GetVideoCodec(), regExp)) return; if (CompileRegExp(m_videoResolution, regExp) && !MatchesRegExp(CStreamDetails::VideoDimsToResolutionDescription(streamDetails.GetVideoWidth(), streamDetails.GetVideoHeight()), regExp)) return; if (CompileRegExp(m_videoAspect, regExp) && !MatchesRegExp(CStreamDetails::VideoAspectToAspectDescription(streamDetails.GetVideoAspect()), regExp)) return; } CURL url(item.GetPath()); if (CompileRegExp(m_fileTypes, regExp) && !MatchesRegExp(url.GetFileType(), regExp)) return; if (CompileRegExp(m_protocols, regExp) && !MatchesRegExp(url.GetProtocol(), regExp)) return; if (CompileRegExp(m_mimeTypes, regExp) && !MatchesRegExp(item.GetMimeType(), regExp)) return; if (CompileRegExp(m_fileName, regExp) && !MatchesRegExp(item.GetPath(), regExp)) return; CLog::Log(LOGDEBUG, "CPlayerSelectionRule::GetPlayers: matches rule: %s", m_name.c_str()); for (unsigned int i = 0; i < vecSubRules.size(); i++) vecSubRules[i]->GetPlayers(item, vecCores); PLAYERCOREID playerCoreId = GetPlayerCore(); if (playerCoreId != EPC_NONE) { CLog::Log(LOGDEBUG, "CPlayerSelectionRule::GetPlayers: adding player: %s (%d) for rule: %s", m_playerName.c_str(), playerCoreId, m_name.c_str()); vecCores.push_back(GetPlayerCore()); } }
void CPlayerCoreFactory::GetRemotePlayers( VECPLAYERCORES &vecCores ) const { CSingleLock lock(m_section); for(unsigned int i = 0; i < m_vecCoreConfigs.size(); i++) { if(m_vecCoreConfigs[i]->m_eCore != EPC_UPNPPLAYER) continue; vecCores.push_back(i+1); } }
void CPlayerCoreFactory::GetPlayers( VECPLAYERCORES &vecCores ) const { CSingleLock lock(m_section); for(unsigned int i = 0; i < m_vecCoreConfigs.size(); i++) { if(m_vecCoreConfigs[i]->m_eCore == EPC_NONE) continue; if (m_vecCoreConfigs[i]->m_bPlaysAudio || m_vecCoreConfigs[i]->m_bPlaysVideo) vecCores.push_back(i+1); } }
void CPlayerCoreFactory::GetPlayers( VECPLAYERCORES &vecCores, const bool audio, const bool video ) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: for video=%d, audio=%d", video, audio); for(unsigned int i = 0; i < s_vecCoreConfigs.size(); i++) { if (audio == s_vecCoreConfigs[i]->m_bPlaysAudio && video == s_vecCoreConfigs[i]->m_bPlaysVideo) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding player: %s (%d)", s_vecCoreConfigs[i]->m_name.c_str(), i+1); vecCores.push_back(i+1); } } }
void CPlayerCoreFactory::GetPlayers( VECPLAYERCORES &vecCores, const bool audio, const bool video ) const { CSingleLock lock(m_section); CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: for video=%d, audio=%d", video, audio); for(unsigned int i = 0; i < m_vecCoreConfigs.size(); i++) { if(m_vecCoreConfigs[i]->m_eCore == EPC_NONE) continue; if (audio == m_vecCoreConfigs[i]->m_bPlaysAudio && video == m_vecCoreConfigs[i]->m_bPlaysVideo) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding player: %s (%d)", m_vecCoreConfigs[i]->m_name.c_str(), i+1); vecCores.push_back(i+1); } } }
void CPlayerCoreFactory::GetPlayers( const CFileItem& item, VECPLAYERCORES &vecCores) { CURL url(item.GetPath()); CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers(%s)", item.GetPath().c_str()); // Process rules for(unsigned int i = 0; i < s_vecCoreSelectionRules.size(); i++) s_vecCoreSelectionRules[i]->GetPlayers(item, vecCores); CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: matched %"PRIuS" rules with players", vecCores.size()); if( PAPlayer::HandlesType(url.GetFileType()) ) { // We no longer force PAPlayer as our default audio player (used to be true): bool bAdd = false; if (url.GetProtocol().Equals("mms")) { bAdd = false; } else if (item.IsType(".wma")) { // bAdd = true; // DVDPlayerCodec codec; // if (!codec.Init(item.GetPath(),2048)) // bAdd = false; // codec.DeInit(); } if (bAdd) { if( g_guiSettings.GetInt("audiooutput.mode") == AUDIO_ANALOG && !AUDIO_IS_BITSTREAM(g_guiSettings.GetInt("audiooutput2.mode")) ) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding PAPlayer (%d)", EPC_PAPLAYER); vecCores.push_back(EPC_PAPLAYER); } else if (url.GetFileType().Equals("ac3") || url.GetFileType().Equals("dts")) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding DVDPlayer (%d)", EPC_DVDPLAYER); vecCores.push_back(EPC_DVDPLAYER); } else { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding PAPlayer (%d)", EPC_PAPLAYER); vecCores.push_back(EPC_PAPLAYER); } } } // Process defaults // Set video default player. Check whether it's video first (overrule audio check) // Also push these players in case it is NOT audio either if (item.IsVideo() || !item.IsAudio()) { PLAYERCOREID eVideoDefault = GetPlayerCore("videodefaultplayer"); if (eVideoDefault != EPC_NONE) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding videodefaultplayer (%d)", eVideoDefault); vecCores.push_back(eVideoDefault); } GetPlayers(vecCores, false, true); // Video-only players GetPlayers(vecCores, true, true); // Audio & video players } // Set audio default player // Pushback all audio players in case we don't know the type if (item.IsAudio()) { PLAYERCOREID eAudioDefault = GetPlayerCore("audiodefaultplayer"); if (eAudioDefault != EPC_NONE) { CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: adding audiodefaultplayer (%d)", eAudioDefault); vecCores.push_back(eAudioDefault); } GetPlayers(vecCores, true, false); // Audio-only players GetPlayers(vecCores, true, true); // Audio & video players } /* make our list unique, preserving first added players */ unique(vecCores); CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers: added %"PRIuS" players", vecCores.size()); }
void CPlayerCoreFactory::GetPlayers( VECPLAYERCORES &vecCores ) { for(unsigned int i = 0; i < s_vecCoreConfigs.size(); i++) if (s_vecCoreConfigs[i]->m_bPlaysAudio || s_vecCoreConfigs[i]->m_bPlaysVideo) vecCores.push_back(i+1); }
void CPlayerCoreFactory::GetPlayers( const CFileItem& item, VECPLAYERCORES &vecCores) { CURL url(item.m_strPath); CLog::Log(LOGDEBUG, "CPlayerCoreFactory::GetPlayers(%s)", item.m_strPath.c_str()); // ugly hack for ReplayTV. our filesystem is broken against real ReplayTV's (not the psuedo DVArchive) // it breaks down for small requests. As we can't allow truncated reads for all emulated dll file functions // we are often forced to do small reads to fill up the full buffer size wich seems gives garbage back if (url.GetProtocol().Equals("rtv")) { vecCores.push_back(EPC_MPLAYER); // vecCores.push_back(EPC_DVDPLAYER); } if (url.GetProtocol().Equals("hdhomerun") || url.GetProtocol().Equals("myth") || url.GetProtocol().Equals("cmyth") || url.GetProtocol().Equals("rtmp")) { vecCores.push_back(EPC_DVDPLAYER); } if (url.GetProtocol().Equals("lastfm") || url.GetProtocol().Equals("shout")) { vecCores.push_back(EPC_PAPLAYER); } if (url.GetProtocol().Equals("mms")) { vecCores.push_back(EPC_DVDPLAYER); } // dvdplayer can play standard rtsp streams if (url.GetProtocol().Equals("rtsp") && !url.GetFileType().Equals("rm") && !url.GetFileType().Equals("ra")) { vecCores.push_back(EPC_DVDPLAYER); } // Special care in case it's an internet stream if (item.IsInternetStream()) { CStdString content = item.GetContentType(); CLog::Log(LOGDEBUG, "%s - Item is an internet stream, content-type=%s", __FUNCTION__, content.c_str()); if (content == "video/x-flv" || content == "video/flv") { vecCores.push_back(EPC_DVDPLAYER); } else if (content == "audio/aacp") { vecCores.push_back(EPC_DVDPLAYER); } else if (content == "application/sdp") { vecCores.push_back(EPC_DVDPLAYER); } else if (content == "application/octet-stream") { //unknown contenttype, send mp2 to pap if( url.GetFileType() == "mp2") vecCores.push_back(EPC_PAPLAYER); } } if (item.IsDVD() || item.IsDVDFile() || item.IsDVDImage()) { if ( g_advancedSettings.m_videoDefaultDVDPlayer == "externalplayer" ) { vecCores.push_back(EPC_EXTPLAYER); vecCores.push_back(EPC_DVDPLAYER); } else { vecCores.push_back(EPC_DVDPLAYER); vecCores.push_back(EPC_EXTPLAYER); } } // only dvdplayer can handle these normally if (url.GetFileType().Equals("sdp") || url.GetFileType().Equals("asf")) { vecCores.push_back(EPC_DVDPLAYER); } // Set video default player. Check whether it's video first (overrule audio check) // Also push these players in case it is NOT audio either if (item.IsVideo() || !item.IsAudio()) { if ( g_advancedSettings.m_videoDefaultPlayer == "externalplayer" ) { vecCores.push_back(EPC_EXTPLAYER); vecCores.push_back(EPC_DVDPLAYER); } else { vecCores.push_back(EPC_DVDPLAYER); vecCores.push_back(EPC_EXTPLAYER); } } if( PAPlayer::HandlesType(url.GetFileType()) ) { // We no longer force PAPlayer as our default audio player (used to be true): bool bAdd = false; if (url.GetProtocol().Equals("mms")) { bAdd = false; } else if (item.IsType(".wma")) { bAdd = true; DVDPlayerCodec codec; if (!codec.Init(item.m_strPath,2048)) bAdd = false; codec.DeInit(); } if (bAdd) { if( g_guiSettings.GetInt("audiooutput.mode") == AUDIO_ANALOG ) { vecCores.push_back(EPC_PAPLAYER); } else if ((url.GetFileType().Equals("ac3") && g_audioConfig.GetAC3Enabled()) || (url.GetFileType().Equals("dts") && g_audioConfig.GetDTSEnabled())) { vecCores.push_back(EPC_DVDPLAYER); } else { vecCores.push_back(EPC_PAPLAYER); } } } // Set audio default player // Pushback all audio players in case we don't know the type if( item.IsAudio()) { if ( g_advancedSettings.m_audioDefaultPlayer == "dvdplayer" ) { vecCores.push_back(EPC_DVDPLAYER); vecCores.push_back(EPC_PAPLAYER); vecCores.push_back(EPC_EXTPLAYER); } else if ( g_advancedSettings.m_audioDefaultPlayer == "externalplayer" ) { vecCores.push_back(EPC_EXTPLAYER); vecCores.push_back(EPC_PAPLAYER); vecCores.push_back(EPC_DVDPLAYER); } else { // default to paplayer vecCores.push_back(EPC_PAPLAYER); vecCores.push_back(EPC_DVDPLAYER); vecCores.push_back(EPC_EXTPLAYER); } } // Always pushback DVDplayer as it can do both audio & video // vecCores.push_back(EPC_DVDPLAYER); /* make our list unique, preserving first added players */ unique(vecCores); }
void CPlayerCoreFactory::GetPlayers( const CFileItem& item, VECPLAYERCORES &vecCores) { CURL url(item.m_strPath); CLog::Log(LOGDEBUG,"CPlayerCoreFactor::GetPlayers(%s)",item.m_strPath.c_str()); // Plex media server streams. if (url.GetProtocol().Equals("plex", false)) vecCores.push_back(EPC_PMSPLAYER); // Play audio files with iTunes DRM using QuickTime if (url.GetFileType().Equals("m4p") || url.GetFileType().Equals("m4b")) { vecCores.push_back(EPC_QTPLAYER); CLog::Log(LOGDEBUG,"CPlayerCoreFactor::GetPlayers(%s) - matched M4P file",item.m_strPath.c_str()); } // ugly hack for ReplayTV. our filesystem is broken against real ReplayTV's (not the psuevdo DVArchive) // it breaks down for small requests. As we can't allow truncated reads for all emulated dll file functions // we are often forced to do small reads to fill up the full buffer size wich seems gives garbage back if (url.GetProtocol().Equals("rtv")) vecCores.push_back(EPC_MPLAYER); // vecCores.push_back(EPC_DVDPLAYER); if (url.GetProtocol().Equals("hdhomerun") || url.GetProtocol().Equals("myth") || url.GetProtocol().Equals("cmyth") || url.GetProtocol().Equals("rtmp")) vecCores.push_back(EPC_DVDPLAYER); if (url.GetProtocol().Equals("lastfm") || url.GetProtocol().Equals("shout")) { vecCores.push_back(EPC_PAPLAYER); } if (url.GetProtocol().Equals("mms")) { vecCores.push_back(EPC_DVDPLAYER); } // dvdplayer can play standard rtsp streams if (url.GetProtocol().Equals("rtsp") && !url.GetFileType().Equals("rm") && !url.GetFileType().Equals("ra")) vecCores.push_back(EPC_DVDPLAYER); // only dvdplayer can handle these normally if (url.GetFileType().Equals("sdp") || url.GetFileType().Equals("asf")) vecCores.push_back(EPC_DVDPLAYER); if ( item.IsInternetStream() ) { CStdString content = item.GetContentType(); if (content == "video/x-flv" || content == "video/flv") vecCores.push_back(EPC_DVDPLAYER); else if (content == "audio/aacp") vecCores.push_back(EPC_DVDPLAYER); else if (content == "application/sdp") vecCores.push_back(EPC_DVDPLAYER); else if (content == "application/octet-stream") { //unknown contenttype, send mp2 to pap if( url.GetFileType() == "mp2") vecCores.push_back(EPC_PAPLAYER); } } if (((item.IsDVD()) || item.IsDVDFile() || item.IsDVDImage())) { vecCores.push_back(EPC_DVDPLAYER); } if( PAPlayer::HandlesType(url.GetFileType()) ) { bool bAdd = true; if (url.GetProtocol().Equals("mms")) { bAdd = false; } else if (item.IsType(".wma")) { DVDPlayerCodec codec; if (!codec.Init(item.m_strPath,2048)) bAdd = false; codec.DeInit(); } if (bAdd) { if(!g_audioConfig.UseDigitalOutput()) { vecCores.push_back(EPC_PAPLAYER); } //else if( ( url.GetFileType().Equals("ac3") && g_audioConfig.GetAC3Enabled() ) // || ( url.GetFileType().Equals("dts") && g_audioConfig.GetDTSEnabled() ) ) //{ // vecCores.push_back(EPC_DVDPLAYER); //} //else { vecCores.push_back(EPC_PAPLAYER); } } } //Add all normal players last so you can force them, should you want to if ( item.IsAudio() ) vecCores.push_back(EPC_PAPLAYER); vecCores.push_back(EPC_DVDPLAYER); /* make our list unique, presevering first added players */ unique(vecCores); }