ICodec* CodecFactory::CreateCodecDemux(const CStdString& strFile, const CStdString& strContent, unsigned int filecache) { CURL urlFile(strFile); if( strContent.Equals("audio/mpeg") || strContent.Equals("audio/mp3") ) return new MP3Codec(); else if (strContent.Left(9).Equals("audio/l16")) { PCMCodec * pcm_codec = new PCMCodec(); pcm_codec->SetMimeParams(strContent); return pcm_codec; } else if( strContent.Equals("audio/aac") || strContent.Equals("audio/aacp") ) { DVDPlayerCodec *pCodec = new DVDPlayerCodec; if (urlFile.GetProtocol() == "shout" ) pCodec->SetContentType(strContent); return pCodec; } else if( strContent.Equals("audio/x-ms-wma") ) return new DVDPlayerCodec(); else if( strContent.Equals("application/ogg") || strContent.Equals("audio/ogg")) return CreateOGGCodec(strFile,filecache); else if (strContent.Equals("audio/x-xbmc-pcm")) return (ICodec*)new BXACodec(); else if (strContent.Equals("audio/flac") || strContent.Equals("audio/x-flac") || strContent.Equals("application/x-flac")) return new FLACCodec(); if (urlFile.GetProtocol() == "lastfm" || urlFile.GetProtocol() == "shout") { return new MP3Codec(); // if we got this far with internet radio - content-type was wrong. gamble on mp3. } if (urlFile.GetFileType().Equals("wav")) { ICodec* codec; //lets see what it contains... //this kinda sucks 'cause if it's a plain wav file the file //will be opened, sniffed and closed 2 times before it is opened *again* for wav //would be better if the papcodecs could work with bitstreams instead of filenames. DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType("audio/x-spdif-compressed"); if (dvdcodec->Init(strFile, filecache)) { return dvdcodec; } delete dvdcodec; codec = new ADPCMCodec(); if (codec->Init(strFile, filecache)) { return codec; } delete codec; codec = new WAVCodec(); if (codec->Init(strFile, filecache)) { return codec; } delete codec; } if (urlFile.GetFileType().Equals("cdda")) { //lets see what it contains... //this kinda sucks 'cause if it's plain cdda the file //will be opened, sniffed and closed before it is opened *again* for cdda //would be better if the papcodecs could work with bitstreams instead of filenames. DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType("audio/x-spdif-compressed"); if (dvdcodec->Init(strFile, filecache)) { return dvdcodec; } delete dvdcodec; } else if (urlFile.GetFileType().Equals("ogg") || urlFile.GetFileType().Equals("oggstream") || urlFile.GetFileType().Equals("oga")) return CreateOGGCodec(strFile,filecache); //default return CreateCodec(urlFile.GetFileType()); }
ICodec* CodecFactory::CreateCodecDemux(const CStdString& strFile, const CStdString& strContent, unsigned int filecache) { CURL urlFile(strFile); if( strContent.Equals("audio/mpeg") || strContent.Equals("audio/mpeg3") || strContent.Equals("audio/mp3") ) { DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType(strContent); return dvdcodec; } else if (StringUtils::StartsWithNoCase(strContent, "audio/l16")) { PCMCodec * pcm_codec = new PCMCodec(); pcm_codec->SetMimeParams(strContent); return pcm_codec; } else if( strContent.Equals("audio/aac") || strContent.Equals("audio/aacp") || strContent.Equals("audio/x-ms-wma") || strContent.Equals("audio/x-ape") || strContent.Equals("audio/ape")) { DVDPlayerCodec *pCodec = new DVDPlayerCodec; pCodec->SetContentType(strContent); return pCodec; } else if( strContent.Equals("application/ogg") || strContent.Equals("audio/ogg")) return CreateOGGCodec(strFile,filecache); else if (strContent.Equals("audio/x-xbmc-pcm")) { // audio/x-xbmc-pcm this is the used codec for AirTunes // (apples audio only streaming) DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType(strContent); return dvdcodec; } else if (strContent.Equals("audio/flac") || strContent.Equals("audio/x-flac") || strContent.Equals("application/x-flac")) { DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType(strContent); return dvdcodec; } if (urlFile.GetProtocol() == "shout") { DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType("audio/mp3"); return dvdcodec; // if we got this far with internet radio - content-type was wrong. gamble on mp3. } if (urlFile.GetFileType().Equals("wav") || strContent.Equals("audio/wav") || strContent.Equals("audio/x-wav")) { //lets see what it contains... //this kinda sucks 'cause if it's a plain wav file the file //will be opened, sniffed and closed 2 times before it is opened *again* for wav //would be better if the papcodecs could work with bitstreams instead of filenames. DVDPlayerCodec *dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType("audio/x-spdif-compressed"); if (dvdcodec->Init(strFile, filecache)) { return dvdcodec; } dvdcodec = new DVDPlayerCodec(); dvdcodec->SetContentType(strContent); return dvdcodec; } else if (urlFile.GetFileType().Equals("ogg") || urlFile.GetFileType().Equals("oggstream") || urlFile.GetFileType().Equals("oga")) return CreateOGGCodec(strFile,filecache); //default return CreateCodec(urlFile.GetFileType()); }