本文整理汇总了C++中CDVDInputStream::Open方法的典型用法代码示例。如果您正苦于以下问题:C++ CDVDInputStream::Open方法的具体用法?C++ CDVDInputStream::Open怎么用?C++ CDVDInputStream::Open使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDVDInputStream
的用法示例。
在下文中一共展示了CDVDInputStream::Open方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetFileStreamDetails
/**
* \brief Open the item pointed to by pItem and extact streamdetails
* \return true if the stream details have changed
*/
bool CDVDFileInfo::GetFileStreamDetails(CFileItem *pItem)
{
if (!pItem)
return false;
std::string strFileNameAndPath;
if (pItem->HasVideoInfoTag())
strFileNameAndPath = pItem->GetVideoInfoTag()->m_strFileNameAndPath;
if (strFileNameAndPath.empty())
strFileNameAndPath = pItem->GetPath();
std::string playablePath = strFileNameAndPath;
if (URIUtils::IsStack(playablePath))
playablePath = XFILE::CStackDirectory::GetFirstStackedFile(playablePath);
CFileItem item(playablePath, false);
item.SetMimeTypeForInternetFile();
CDVDInputStream *pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, item);
if (!pInputStream)
return false;
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER))
{
delete pInputStream;
return false;
}
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) || !pInputStream->Open())
{
delete pInputStream;
return false;
}
CDVDDemux *pDemuxer = CDVDFactoryDemuxer::CreateDemuxer(pInputStream, true);
if (pDemuxer)
{
bool retVal = DemuxerToStreamDetails(pInputStream, pDemuxer, pItem->GetVideoInfoTag()->m_streamDetails, strFileNameAndPath);
delete pDemuxer;
delete pInputStream;
return retVal;
}
else
{
delete pInputStream;
return false;
}
}
示例2: GetFileStreamDetails
/**
* \brief Open the item pointed to by pItem and extact streamdetails
* \return true if the stream details have changed
*/
bool CDVDFileInfo::GetFileStreamDetails(CFileItem *pItem)
{
if (!pItem)
return false;
CStdString strFileNameAndPath;
if (pItem->HasVideoInfoTag())
strFileNameAndPath = pItem->GetVideoInfoTag()->m_strFileNameAndPath;
else
return false;
CStdString playablePath = strFileNameAndPath;
if (URIUtils::IsStack(playablePath))
playablePath = XFILE::CStackDirectory::GetFirstStackedFile(playablePath);
CDVDInputStream *pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, playablePath, "");
if (!pInputStream)
return false;
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) || !pInputStream->Open(playablePath.c_str(), ""))
{
delete pInputStream;
return false;
}
CDVDDemux *pDemuxer = CDVDFactoryDemuxer::CreateDemuxer(pInputStream);
if (pDemuxer)
{
bool retVal = DemuxerToStreamDetails(pInputStream, pDemuxer, pItem->GetVideoInfoTag()->m_streamDetails, strFileNameAndPath);
delete pDemuxer;
delete pInputStream;
return retVal;
}
else
{
delete pInputStream;
return false;
}
}
示例3: ExtractThumb
bool CDVDFileInfo::ExtractThumb(const std::string &strPath,
CTextureDetails &details,
CStreamDetails *pStreamDetails, int pos)
{
std::string redactPath = CURL::GetRedacted(strPath);
unsigned int nTime = XbmcThreads::SystemClockMillis();
CDVDInputStream *pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, strPath, "");
if (!pInputStream)
{
CLog::Log(LOGERROR, "InputStream: Error creating stream for %s", redactPath.c_str());
return false;
}
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
|| pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY))
{
CLog::Log(LOGDEBUG, "%s: disc streams not supported for thumb extraction, file: %s", __FUNCTION__, redactPath.c_str());
delete pInputStream;
return false;
}
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER))
{
SAFE_DELETE(pInputStream);
return false;
}
if (!pInputStream->Open(strPath.c_str(), "", true))
{
CLog::Log(LOGERROR, "InputStream: Error opening, %s", redactPath.c_str());
if (pInputStream)
SAFE_DELETE(pInputStream);
return false;
}
CDVDDemux *pDemuxer = NULL;
try
{
pDemuxer = CDVDFactoryDemuxer::CreateDemuxer(pInputStream, true);
if(!pDemuxer)
{
SAFE_DELETE(pInputStream);
CLog::Log(LOGERROR, "%s - Error creating demuxer", __FUNCTION__);
return false;
}
}
catch(...)
{
CLog::Log(LOGERROR, "%s - Exception thrown when opening demuxer", __FUNCTION__);
if (pDemuxer)
SAFE_DELETE(pDemuxer);
SAFE_DELETE(pInputStream);
return false;
}
if (pStreamDetails)
{
DemuxerToStreamDetails(pInputStream, pDemuxer, *pStreamDetails, strPath);
//extern subtitles
std::vector<std::string> filenames;
std::string video_path;
if (strPath.empty())
video_path = pInputStream->GetFileName();
else
video_path = strPath;
CUtil::ScanForExternalSubtitles(video_path, filenames);
for(unsigned int i=0;i<filenames.size();i++)
{
// if vobsub subtitle:
if (URIUtils::GetExtension(filenames[i]) == ".idx")
{
std::string strSubFile;
if ( CUtil::FindVobSubPair(filenames, filenames[i], strSubFile) )
AddExternalSubtitleToDetails(video_path, *pStreamDetails, filenames[i], strSubFile);
}
else
{
if ( !CUtil::IsVobSub(filenames, filenames[i]) )
{
AddExternalSubtitleToDetails(video_path, *pStreamDetails, filenames[i]);
}
}
}
}
int nVideoStream = -1;
for (int i = 0; i < pDemuxer->GetNrOfStreams(); i++)
{
CDemuxStream* pStream = pDemuxer->GetStream(i);
if (pStream)
{
// ignore if it's a picture attachment (e.g. jpeg artwork)
if(pStream->type == STREAM_VIDEO && !(pStream->flags & AV_DISPOSITION_ATTACHED_PIC))
nVideoStream = i;
else
pStream->SetDiscard(AVDISCARD_ALL);
//.........这里部分代码省略.........
示例4: Open
bool CDVDSubtitleStream::Open(const string& strFile)
{
CDVDInputStream* pInputStream;
pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, strFile, "");
if (pInputStream && pInputStream->Open(strFile.c_str(), ""))
{
unsigned char buffer[16384];
int size_read = 0;
size_read = pInputStream->Read(buffer,3);
bool isUTF8 = false;
bool isUTF16 = false;
if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
isUTF8 = true;
else if (buffer[0] == 0xFF && buffer[1] == 0xFE)
{
isUTF16 = true;
pInputStream->Seek(2, SEEK_SET);
}
else
pInputStream->Seek(0, SEEK_SET);
if (isUTF16)
{
std::wstringstream wstringstream;
while( (size_read = pInputStream->Read(buffer, sizeof(buffer)-2) ) > 0 )
{
buffer[size_read] = buffer[size_read + 1] = '\0';
CStdStringW temp;
g_charsetConverter.utf16LEtoW(std::u16string((char16_t*)buffer),temp);
wstringstream << temp;
}
delete pInputStream;
CStdString strUTF8;
g_charsetConverter.wToUTF8(CStdStringW(wstringstream.str()),strUTF8);
m_stringstream.str("");
m_stringstream << strUTF8;
}
else
{
while( (size_read = pInputStream->Read(buffer, sizeof(buffer)-1) ) > 0 )
{
buffer[size_read] = '\0';
m_stringstream << buffer;
}
delete pInputStream;
if (!isUTF8)
isUTF8 = CUtf8Utils::isValidUtf8(m_stringstream.str());
if (!isUTF8)
{
CStdStringW strUTF16;
CStdString strUTF8;
g_charsetConverter.subtitleCharsetToW(m_stringstream.str(), strUTF16);
g_charsetConverter.wToUTF8(strUTF16,strUTF8);
m_stringstream.str("");
m_stringstream << strUTF8;
}
}
return true;
}
delete pInputStream;
return false;
}
示例5: ExtractThumb
bool CDVDFileInfo::ExtractThumb(const std::string &strPath,
CTextureDetails &details,
CStreamDetails *pStreamDetails, int pos)
{
std::string redactPath = CURL::GetRedacted(strPath);
unsigned int nTime = XbmcThreads::SystemClockMillis();
CFileItem item(strPath, false);
item.SetMimeTypeForInternetFile();
CDVDInputStream *pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, item);
if (!pInputStream)
{
CLog::Log(LOGERROR, "InputStream: Error creating stream for %s", redactPath.c_str());
return false;
}
if (!pInputStream->Open())
{
CLog::Log(LOGERROR, "InputStream: Error opening, %s", redactPath.c_str());
if (pInputStream)
delete pInputStream;
return false;
}
CDVDDemux *pDemuxer = NULL;
try
{
pDemuxer = CDVDFactoryDemuxer::CreateDemuxer(pInputStream, true);
if(!pDemuxer)
{
delete pInputStream;
CLog::Log(LOGERROR, "%s - Error creating demuxer", __FUNCTION__);
return false;
}
}
catch(...)
{
CLog::Log(LOGERROR, "%s - Exception thrown when opening demuxer", __FUNCTION__);
if (pDemuxer)
delete pDemuxer;
delete pInputStream;
return false;
}
if (pStreamDetails)
{
DemuxerToStreamDetails(pInputStream, pDemuxer, *pStreamDetails, strPath);
//extern subtitles
std::vector<std::string> filenames;
std::string video_path;
if (strPath.empty())
video_path = pInputStream->GetFileName();
else
video_path = strPath;
CUtil::ScanForExternalSubtitles(video_path, filenames);
for(unsigned int i=0;i<filenames.size();i++)
{
// if vobsub subtitle:
if (URIUtils::GetExtension(filenames[i]) == ".idx")
{
std::string strSubFile;
if ( CUtil::FindVobSubPair(filenames, filenames[i], strSubFile) )
AddExternalSubtitleToDetails(video_path, *pStreamDetails, filenames[i], strSubFile);
}
else
{
if ( !CUtil::IsVobSub(filenames, filenames[i]) )
{
AddExternalSubtitleToDetails(video_path, *pStreamDetails, filenames[i]);
}
}
}
}
int nVideoStream = -1;
int64_t demuxerId = -1;
for (CDemuxStream* pStream : pDemuxer->GetStreams())
{
if (pStream)
{
// ignore if it's a picture attachment (e.g. jpeg artwork)
if (pStream->type == STREAM_VIDEO && !(pStream->flags & AV_DISPOSITION_ATTACHED_PIC))
{
nVideoStream = pStream->uniqueId;
demuxerId = pStream->demuxerId;
}
else
pDemuxer->EnableStream(pStream->demuxerId, pStream->uniqueId, false);
}
}
bool bOk = false;
int packetsTried = 0;
if (nVideoStream != -1)
{
//.........这里部分代码省略.........
示例6: ExtractThumb
bool CDVDFileInfo::ExtractThumb(const CStdString &strPath, CTextureDetails &details, CStreamDetails *pStreamDetails)
{
unsigned int nTime = XbmcThreads::SystemClockMillis();
CDVDInputStream *pInputStream = CDVDFactoryInputStream::CreateInputStream(NULL, strPath, "");
if (!pInputStream)
{
CLog::Log(LOGERROR, "InputStream: Error creating stream for %s", strPath.c_str());
return false;
}
if (pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
{
CLog::Log(LOGERROR, "InputStream: dvd streams not supported for thumb extraction, file: %s", strPath.c_str());
delete pInputStream;
return false;
}
if (!pInputStream->Open(strPath.c_str(), ""))
{
CLog::Log(LOGERROR, "InputStream: Error opening, %s", strPath.c_str());
if (pInputStream)
delete pInputStream;
return false;
}
CDVDDemux *pDemuxer = NULL;
try
{
pDemuxer = CDVDFactoryDemuxer::CreateDemuxer(pInputStream);
if(!pDemuxer)
{
delete pInputStream;
CLog::Log(LOGERROR, "%s - Error creating demuxer", __FUNCTION__);
return false;
}
}
catch(...)
{
CLog::Log(LOGERROR, "%s - Exception thrown when opening demuxer", __FUNCTION__);
if (pDemuxer)
delete pDemuxer;
delete pInputStream;
return false;
}
if (pStreamDetails)
DemuxerToStreamDetails(pInputStream, pDemuxer, *pStreamDetails, strPath);
CDemuxStream* pStream = NULL;
int nVideoStream = -1;
for (int i = 0; i < pDemuxer->GetNrOfStreams(); i++)
{
pStream = pDemuxer->GetStream(i);
if (pStream)
{
if(pStream->type == STREAM_VIDEO)
nVideoStream = i;
else
pStream->SetDiscard(AVDISCARD_ALL);
}
}
bool bOk = false;
int packetsTried = 0;
if (nVideoStream != -1)
{
CDVDVideoCodec *pVideoCodec;
CDVDStreamInfo hint(*pDemuxer->GetStream(nVideoStream), true);
hint.software = true;
if (hint.codec == CODEC_ID_MPEG2VIDEO || hint.codec == CODEC_ID_MPEG1VIDEO)
{
// libmpeg2 is not thread safe so use ffmepg for mpeg2/mpeg1 thumb extraction
CDVDCodecOptions dvdOptions;
pVideoCodec = CDVDFactoryCodec::OpenCodec(new CDVDVideoCodecFFmpeg(), hint, dvdOptions);
}
else
{
pVideoCodec = CDVDFactoryCodec::CreateVideoCodec( hint );
}
if (pVideoCodec)
{
int nTotalLen = pDemuxer->GetStreamLength();
int nSeekTo = nTotalLen / 3;
CLog::Log(LOGDEBUG,"%s - seeking to pos %dms (total: %dms) in %s", __FUNCTION__, nSeekTo, nTotalLen, strPath.c_str());
if (pDemuxer->SeekTime(nSeekTo, true))
{
DemuxPacket* pPacket = NULL;
int iDecoderState = VC_ERROR;
DVDVideoPicture picture;
memset(&picture, 0, sizeof(picture));
// num streams * 80 frames, should get a valid frame, if not abort.
int abort_index = pDemuxer->GetNrOfStreams() * 80;
//.........这里部分代码省略.........