CPlayList* CPlayListFactory::Create(const CStdString& filename) { CFileItem item(filename,false); CFileItem currentItem = g_application.CurrentFileItem(); item.SetContentType(currentItem.GetContentType()); return Create(item); }
bool CAudioDecoder::Create(const CFileItem &file, __int64 seekOffset, unsigned int nBufferSize) { Destroy(); CSingleLock lock(m_critSection); // create our pcm buffer m_pcmBuffer.Create((int)std::max<unsigned int>(2, nBufferSize) * INTERNAL_BUFFER_LENGTH); // reset our playback timing variables m_eof = false; // get correct cache size unsigned int filecache = g_guiSettings.GetInt("cacheaudio.lan"); if ( file.IsHD() ) filecache = g_guiSettings.GetInt("cache.harddisk"); else if ( file.IsOnDVD() ) filecache = g_guiSettings.GetInt("cacheaudio.dvdrom"); else if ( file.IsInternetStream() ) filecache = g_guiSettings.GetInt("cacheaudio.internet"); // create our codec bool codecInitialized = false; m_codec=CodecFactory::CreateCodecDemux(file.m_strPath, file.GetContentType(), filecache * 1024, codecInitialized); if (!m_codec || (!codecInitialized && !m_codec->Init(file.m_strPath, filecache * 1024))) { CLog::Log(LOGERROR, "CAudioDecoder: Unable to Init Codec while loading file %s", file.m_strPath.c_str()); Destroy(); return false; } m_blockSize = m_codec->m_Channels * m_codec->m_BitsPerSample / 8; if( m_codec->UseHWDecoding() || m_codec->UsePassthrough() ) m_outputUnitSize = sizeof(char); else m_outputUnitSize = sizeof(float); if (seekOffset) m_codec->Seek(seekOffset); m_status = STATUS_QUEUING; return true; }
bool CPlayListFactory::IsPlaylist(const CFileItem& item, bool bAllowQuery) { CStdString extension = CUtil::GetExtension(item.m_strPath); extension.ToLower(); if (extension == ".m3u") return true; if (extension == ".m3u8") return true; if (extension == ".b4s") return true; if (extension == ".pls") return true; if (extension == ".strm") return true; if (extension == ".wpl") return true; if (extension == ".asx") return true; if (extension == ".ram") return true; if (item.IsLastFM()) return false; if (extension == ".url") return true; if (extension == ".pxml") return true; if (item.IsShoutCast()) return false; if( item.IsInternetStream() ) { CStdString strContentType = item.GetContentType(bAllowQuery); strContentType.MakeLower(); if (strContentType == "video/x-ms-asf" || strContentType == "video/x-ms-asx" || strContentType == "video/x-ms-wfs" || strContentType == "video/x-ms-wvx" || strContentType == "video/x-ms-wax" || strContentType == "audio/x-pn-realaudio" || strContentType == "audio/x-scpls" || strContentType == "playlist" || strContentType == "audio/x-mpegurl" || strContentType == "application/vnd.ms-wpl") return true; } return false; }
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); }