本文整理汇总了C++中CMusicInfoTag::SetGenre方法的典型用法代码示例。如果您正苦于以下问题:C++ CMusicInfoTag::SetGenre方法的具体用法?C++ CMusicInfoTag::SetGenre怎么用?C++ CMusicInfoTag::SetGenre使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMusicInfoTag
的用法示例。
在下文中一共展示了CMusicInfoTag::SetGenre方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetGenre
void CTagLoaderTagLib::SetGenre(CMusicInfoTag &tag, const vector<string> &values)
{
if (values.size() == 1)
tag.SetGenre(values[0]);
else
tag.SetGenre(values);
}
示例2: Load
bool CMusicInfoTagLoaderMod::Load(const CStdString& strFileName, CMusicInfoTag& tag, EmbeddedArt *art)
{
tag.SetURL(strFileName);
// first, does the module have a .mdz?
CStdString strMDZ(URIUtils::ReplaceExtension(strFileName,".mdz"));
if (CFile::Exists(strMDZ))
{
if (!getFile(strMDZ,strMDZ))
{
tag.SetLoaded(false);
return( false );
}
ifstream inMDZ(CSpecialProtocol::TranslatePath(strMDZ.c_str()));
char temp[8192];
char temp2[8192];
while (!inMDZ.eof())
{
inMDZ.getline(temp,8191);
if (strstr(temp,"COMPOSER"))
{
strcpy(temp2,temp+strlen("COMPOSER "));
tag.SetArtist(temp2);
}
else if (strstr(temp,"TITLE"))
{
strcpy(temp2,temp+strlen("TITLE "));
tag.SetTitle(temp2);
tag.SetLoaded(true);
}
else if (strstr(temp,"PLAYTIME"))
{
char* temp3 = strtok(temp+strlen("PLAYTIME "),":");
int iSecs = atoi(temp3)*60;
temp3 = strtok(NULL,":");
iSecs += atoi(temp3);
tag.SetDuration(iSecs);
}
else if (strstr(temp,"STYLE"))
{
strcpy(temp2,temp+strlen("STYLE "));
tag.SetGenre(temp2);
}
}
return( tag.Loaded() );
}
else
{
// TODO: no, then try to atleast fetch the title
}
return tag.Loaded();
}
示例3: ParseTag
bool CTagLoaderTagLib::ParseTag(ID3v1::Tag *id3v1, EmbeddedArt *art, CMusicInfoTag& tag)
{
if (!id3v1) return false;
tag.SetTitle(id3v1->title().to8Bit(true));
tag.SetArtist(id3v1->artist().to8Bit(true));
tag.SetAlbum(id3v1->album().to8Bit(true));
tag.SetComment(id3v1->comment().to8Bit(true));
tag.SetGenre(id3v1->genre().to8Bit(true));
tag.SetYear(id3v1->year());
tag.SetTrackNumber(id3v1->track());
return true;
}
示例4: SetGenre
void CTagLoaderTagLib::SetGenre(CMusicInfoTag &tag, const std::vector<std::string> &values)
{
/*
TagLib doesn't resolve ID3v1 genre numbers in the case were only
a number is specified, thus this workaround.
*/
std::vector<std::string> genres;
for (std::vector<std::string>::const_iterator i = values.begin(); i != values.end(); ++i)
{
std::string genre = *i;
if (StringUtils::IsNaturalNumber(genre))
{
int number = strtol(i->c_str(), NULL, 10);
if (number >= 0 && number < 256)
genre = ID3v1::genre(number).to8Bit(true);
}
genres.push_back(genre);
}
if (genres.size() == 1)
tag.SetGenre(genres[0]);
else
tag.SetGenre(genres);
}
示例5: Close
bool CEncoderLame::Close()
{
// may return one more mp3 frames
int iBytes = m_dll.lame_encode_flush(m_pGlobalFlags, m_buffer, sizeof(m_buffer));
if (iBytes < 0)
{
CLog::Log(LOGERROR, "Internal Lame error: %i", iBytes);
return false;
}
WriteStream(m_buffer, iBytes);
FlushStream();
FileClose();
// open again, but now the old way, lame only accepts FILE pointers
FILE* file = fopen_utf8(m_strFile.c_str(), "rb+");
if (!file)
{
CLog::Log(LOGERROR, "Error: Cannot open file for writing tags: %s", m_strFile.c_str());
return false;
}
m_dll.lame_mp3_tags_fid(m_pGlobalFlags, file); /* add VBR tags to mp3 file */
fclose(file);
m_dll.lame_close(m_pGlobalFlags);
// unload the lame dll
m_dll.Unload();
// Store a id3 tag in the ripped file
CID3Tag id3tag;
CMusicInfoTag tag;
tag.SetAlbum(m_strAlbum);
tag.SetAlbumArtist(m_strAlbumArtist);
tag.SetArtist(m_strArtist);
tag.SetGenre(m_strGenre);
tag.SetTitle(m_strTitle);
tag.SetTrackNumber(atoi(m_strTrack.c_str()));
SYSTEMTIME time;
time.wYear=atoi(m_strYear.c_str());
tag.SetReleaseDate(time);
id3tag.SetMusicInfoTag(tag);
id3tag.Write(m_strFile);
return true;
}
示例6: Load
bool CMusicInfoTagLoaderApe::Load(const CStdString& strFileName, CMusicInfoTag& tag, EmbeddedArt *art)
{
try
{
// retrieve the APE Tag info from strFileName
// and put it in tag
tag.SetURL(strFileName);
DVDPlayerCodec codec;
if (codec.Init(strFileName, 4096))
{
tag.SetDuration((int)(codec.m_TotalTime/1000));
codec.DeInit();
}
CAPEv2Tag myTag;
if (myTag.ReadTag((char*)strFileName.c_str())) // true to check ID3 tag as well
{
tag.SetTitle(myTag.GetTitle());
tag.SetAlbum(myTag.GetAlbum());
tag.SetArtist(myTag.GetArtist());
tag.SetAlbumArtist(myTag.GetAlbumArtist());
tag.SetGenre(myTag.GetGenre());
tag.SetTrackNumber(myTag.GetTrackNum());
tag.SetPartOfSet(myTag.GetDiscNum());
tag.SetComment(myTag.GetComment());
tag.SetLyrics(myTag.GetLyrics());
tag.SetMusicBrainzAlbumArtistID(myTag.GetMusicBrainzAlbumArtistID());
tag.SetMusicBrainzAlbumID(myTag.GetMusicBrainzAlbumID());
tag.SetMusicBrainzArtistID(myTag.GetMusicBrainzArtistID());
tag.SetMusicBrainzTrackID(myTag.GetMusicBrainzTrackID());
tag.SetMusicBrainzTRMID(myTag.GetMusicBrainzTRMID());
SYSTEMTIME dateTime;
ZeroMemory(&dateTime, sizeof(SYSTEMTIME));
dateTime.wYear = atoi(myTag.GetYear());
tag.SetRating(myTag.GetRating());
tag.SetReleaseDate(dateTime);
tag.SetLoaded();
return true;
}
}
catch (...)
{
CLog::Log(LOGERROR, "Tag loader ape: exception in file %s", strFileName.c_str());
}
tag.SetLoaded(false);
return false;
}
示例7: GetChannels
int CPVRChannels::GetChannels(CFileItemList* results, int iGroupID /* = -1 */, bool bHidden /* = false */)
{
int iAmount = 0;
SortByChannelNumber();
for (unsigned int ptr = 0; ptr < size(); ptr++)
{
CPVRChannel *channel = at(ptr);
if (channel->IsHidden() != bHidden)
continue;
if (iGroupID != -1 && channel->GroupID() != iGroupID)
continue;
CFileItemPtr channelFile(new CFileItem(*channel));
if (channel->IsRadio())
{
CMusicInfoTag* musictag = channelFile->GetMusicInfoTag();
if (musictag)
{
const CPVREpgInfoTag *epgNow = channel->GetEPGNow();
musictag->SetURL(channel->Path());
musictag->SetTitle(epgNow->Title());
musictag->SetArtist(channel->ChannelName());
musictag->SetAlbumArtist(channel->ChannelName());
musictag->SetGenre(epgNow->Genre());
musictag->SetDuration(epgNow->GetDuration());
musictag->SetLoaded(true);
musictag->SetComment("");
musictag->SetLyrics("");
}
}
results->Add(channelFile);
iAmount++;
}
return iAmount;
}
示例8: Load
bool CMusicInfoTagLoaderApe::Load(const CStdString& strFileName, CMusicInfoTag& tag)
{
try
{
// retrieve the APE Tag info from strFileName
// and put it in tag
tag.SetURL(strFileName);
CAPEv2Tag myTag;
if (myTag.ReadTag((char*)strFileName.c_str())) // true to check ID3 tag as well
{
tag.SetTitle(myTag.GetTitle());
tag.SetAlbum(myTag.GetAlbum());
tag.SetArtist(myTag.GetArtist());
tag.SetAlbumArtist(myTag.GetAlbumArtist());
tag.SetGenre(myTag.GetGenre());
tag.SetTrackNumber(myTag.GetTrackNum());
tag.SetPartOfSet(myTag.GetDiscNum());
tag.SetComment(myTag.GetComment());
tag.SetLyrics(myTag.GetLyrics());
SYSTEMTIME dateTime;
ZeroMemory(&dateTime, sizeof(SYSTEMTIME));
dateTime.wYear = atoi(myTag.GetYear());
tag.SetRating(myTag.GetRating());
tag.SetReleaseDate(dateTime);
tag.SetLoaded();
return true;
}
}
catch (...)
{
CLog::Log(LOGERROR, "Tag loader ape: exception in file %s", strFileName.c_str());
}
tag.SetLoaded(false);
return false;
}
示例9: UpdateItem
bool CPVRManager::UpdateItem(CFileItem& item)
{
/* Don't update if a recording is played */
if (item.IsPVRRecording())
return false;
if (!item.IsPVRChannel())
{
CLog::Log(LOGERROR, "CPVRManager - %s - no channel tag provided", __FUNCTION__);
return false;
}
CSingleLock lock(m_critSection);
if (!m_currentFile || *m_currentFile->GetPVRChannelInfoTag() == *item.GetPVRChannelInfoTag())
return false;
g_application.CurrentFileItem() = *m_currentFile;
g_infoManager.SetCurrentItem(*m_currentFile);
CPVRChannel* channelTag = item.GetPVRChannelInfoTag();
CEpgInfoTag epgTagNow;
bool bHasTagNow = channelTag->GetEPGNow(epgTagNow);
if (channelTag->IsRadio())
{
CMusicInfoTag* musictag = item.GetMusicInfoTag();
if (musictag)
{
musictag->SetTitle(bHasTagNow ? epgTagNow.Title() : g_localizeStrings.Get(19055));
if (bHasTagNow)
musictag->SetGenre(epgTagNow.Genre());
musictag->SetDuration(bHasTagNow ? epgTagNow.GetDuration() : 3600);
musictag->SetURL(channelTag->Path());
musictag->SetArtist(channelTag->ChannelName());
musictag->SetAlbumArtist(channelTag->ChannelName());
musictag->SetLoaded(true);
musictag->SetComment(StringUtils::EmptyString);
musictag->SetLyrics(StringUtils::EmptyString);
}
}
else
{
CVideoInfoTag *videotag = item.GetVideoInfoTag();
if (videotag)
{
videotag->m_strTitle = bHasTagNow ? epgTagNow.Title() : g_localizeStrings.Get(19055);
if (bHasTagNow)
videotag->m_genre = epgTagNow.Genre();
videotag->m_strPath = channelTag->Path();
videotag->m_strFileNameAndPath = channelTag->Path();
videotag->m_strPlot = bHasTagNow ? epgTagNow.Plot() : StringUtils::EmptyString;
videotag->m_strPlotOutline = bHasTagNow ? epgTagNow.PlotOutline() : StringUtils::EmptyString;
videotag->m_iEpisode = bHasTagNow ? epgTagNow.EpisodeNum() : 0;
}
}
CPVRChannel* tagPrev = item.GetPVRChannelInfoTag();
if (tagPrev && tagPrev->ChannelNumber() != m_LastChannel)
{
m_LastChannel = tagPrev->ChannelNumber();
m_LastChannelChanged = XbmcThreads::SystemClockMillis();
}
if (XbmcThreads::SystemClockMillis() - m_LastChannelChanged >= (unsigned int) g_guiSettings.GetInt("pvrplayback.channelentrytimeout") && m_LastChannel != m_PreviousChannel[m_PreviousChannelIndex])
m_PreviousChannel[m_PreviousChannelIndex ^= 1] = m_LastChannel;
else
m_LastChannelChanged = XbmcThreads::SystemClockMillis();
return false;
}
示例10: switch
void CMusicInfoTagLoaderMP4::ParseTag( unsigned int metaKey, const char* pMetaData, int metaSize, CMusicInfoTag& tag)
{
switch ( metaKey )
{
case g_TitleAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
// we use utf8 internally
tag.SetLoaded( true );
tag.SetTitle( dataWorkspace.get() );
break;
}
case g_ArtistAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetArtist( dataWorkspace.get() );
break;
}
case g_AlbumAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetAlbum( dataWorkspace.get() );
break;
}
case g_AlbumArtistAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetAlbumArtist( dataWorkspace.get() );
break;
}
case g_DayAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
SYSTEMTIME dateTime;
dateTime.wYear = atoi( dataWorkspace.get() );
tag.SetReleaseDate( dateTime );
break;
}
case g_GenreAtomName:
{
// When a genre number is specified, we need to translate to a string for display..
// Note that AAC/iTunes genre numbers are the same as ID3 numbers, but are offset by 1.
const char* pGenre = ID3_V1GENRE2DESCRIPTION( (unsigned char)pMetaData[ 1 ] - 1 );
if ( pGenre )
{
tag.SetGenre( pGenre );
}
break;
}
case g_CompilationAtomName:
{
if (metaSize == 1)
m_isCompilation = *pMetaData == 1;
break;
}
case g_CommentAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetComment( dataWorkspace.get() );
break;
}
case g_LyricsAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
//.........这里部分代码省略.........
示例11: UpdateItem
bool CPVRManager::UpdateItem(CFileItem& item)
{
/* Don't update if a recording is played */
if (item.IsPVRRecording())
return false;
if (!item.IsPVRChannel())
{
CLog::Log(LOGERROR, "CPVRManager - %s - no channel tag provided", __FUNCTION__);
return false;
}
CSingleLock lock(m_critSection);
if (!m_currentFile || *m_currentFile->GetPVRChannelInfoTag() == *item.GetPVRChannelInfoTag())
return false;
g_application.CurrentFileItem() = *m_currentFile;
g_infoManager.SetCurrentItem(*m_currentFile);
CPVRChannel* channelTag = item.GetPVRChannelInfoTag();
CEpgInfoTag epgTagNow;
bool bHasTagNow = channelTag->GetEPGNow(epgTagNow);
if (channelTag->IsRadio())
{
CMusicInfoTag* musictag = item.GetMusicInfoTag();
if (musictag)
{
musictag->SetTitle(bHasTagNow ?
epgTagNow.Title() :
g_guiSettings.GetBool("epg.hidenoinfoavailable") ?
StringUtils::EmptyString :
g_localizeStrings.Get(19055)); // no information available
if (bHasTagNow)
musictag->SetGenre(epgTagNow.Genre());
musictag->SetDuration(bHasTagNow ? epgTagNow.GetDuration() : 3600);
musictag->SetURL(channelTag->Path());
musictag->SetArtist(channelTag->ChannelName());
musictag->SetAlbumArtist(channelTag->ChannelName());
musictag->SetLoaded(true);
musictag->SetComment(StringUtils::EmptyString);
musictag->SetLyrics(StringUtils::EmptyString);
}
}
else
{
CVideoInfoTag *videotag = item.GetVideoInfoTag();
if (videotag)
{
videotag->m_strTitle = bHasTagNow ?
epgTagNow.Title() :
g_guiSettings.GetBool("epg.hidenoinfoavailable") ?
StringUtils::EmptyString :
g_localizeStrings.Get(19055); // no information available
if (bHasTagNow)
videotag->m_genre = epgTagNow.Genre();
videotag->m_strPath = channelTag->Path();
videotag->m_strFileNameAndPath = channelTag->Path();
videotag->m_strPlot = bHasTagNow ? epgTagNow.Plot() : StringUtils::EmptyString;
videotag->m_strPlotOutline = bHasTagNow ? epgTagNow.PlotOutline() : StringUtils::EmptyString;
videotag->m_iEpisode = bHasTagNow ? epgTagNow.EpisodeNum() : 0;
}
}
return false;
}
示例12: Load
bool CMusicInfoTagLoaderCDDA::Load(const std::string& strFileName, CMusicInfoTag& tag, EmbeddedArt *art)
{
#ifdef HAS_DVD_DRIVE
try
{
tag.SetURL(strFileName);
bool bResult = false;
// Get information for the inserted disc
CCdInfo* pCdInfo = g_mediaManager.GetCdInfo();
if (pCdInfo == NULL)
return bResult;
// Prepare cddb
Xcddb cddb;
cddb.setCacheDir(CProfilesManager::GetInstance().GetCDDBFolder());
int iTrack = atoi(strFileName.substr(13, strFileName.size() - 13 - 5).c_str());
// duration is always available
tag.SetDuration( ( pCdInfo->GetTrackInformation(iTrack).nMins * 60 )
+ pCdInfo->GetTrackInformation(iTrack).nSecs );
// Only load cached cddb info in this tag loader, the internet database query is made in CCDDADirectory
if (pCdInfo->HasCDDBInfo() && cddb.isCDCached(pCdInfo))
{
// get cddb information
if (cddb.queryCDinfo(pCdInfo))
{
// Fill the fileitems music tag with cddb information, if available
std::string strTitle = cddb.getTrackTitle(iTrack);
if (!strTitle.empty())
{
// Tracknumber
tag.SetTrackNumber(iTrack);
// Title
tag.SetTitle(strTitle);
// Artist: Use track artist or disc artist
std::string strArtist = cddb.getTrackArtist(iTrack);
if (strArtist.empty())
cddb.getDiskArtist(strArtist);
tag.SetArtist(strArtist);
// Album
std::string strAlbum;
cddb.getDiskTitle( strAlbum );
tag.SetAlbum(strAlbum);
// Album Artist
std::string strAlbumArtist;
cddb.getDiskArtist(strAlbumArtist);
tag.SetAlbumArtist(strAlbumArtist);
// Year
SYSTEMTIME dateTime;
dateTime.wYear = atoi(cddb.getYear().c_str());
tag.SetReleaseDate( dateTime );
// Genre
tag.SetGenre( cddb.getGenre() );
tag.SetLoaded(true);
bResult = true;
}
}
}
else
{
// No cddb info, maybe we have CD-Text
trackinfo ti = pCdInfo->GetTrackInformation(iTrack);
// Fill the fileitems music tag with CD-Text information, if available
std::string strTitle = ti.cdtext[CDTEXT_TITLE];
if (!strTitle.empty())
{
// Tracknumber
tag.SetTrackNumber(iTrack);
// Title
tag.SetTitle(strTitle);
// Get info for track zero, as we may have and need CD-Text Album info
xbmc_cdtext_t discCDText = pCdInfo->GetDiscCDTextInformation();
// Artist: Use track artist or disc artist
std::string strArtist = ti.cdtext[CDTEXT_PERFORMER];
if (strArtist.empty())
strArtist = discCDText[CDTEXT_PERFORMER];
tag.SetArtist(strArtist);
// Album
std::string strAlbum;
strAlbum = discCDText[CDTEXT_TITLE];
tag.SetAlbum(strAlbum);
// Genre: use track or disc genre
std::string strGenre = ti.cdtext[CDTEXT_GENRE];
if (strGenre.empty())
//.........这里部分代码省略.........
示例13: SetTagValueString
void CMusicInfoTagLoaderWMA::SetTagValueString(const CStdString& strFrameName, const CStdString& strValue, CMusicInfoTag& tag)
{
if (strFrameName == "WM/AlbumTitle")
{
tag.SetAlbum(strValue);
}
else if (strFrameName == "WM/AlbumArtist")
{
if (tag.GetAlbumArtist().IsEmpty()) tag.SetAlbumArtist(strValue);
}
else if (strFrameName == "Author")
{
// Multiple artists are stored in multiple "Author" tags we have get them
// separatly and merge them to our system
if (tag.GetArtist().IsEmpty())
tag.SetArtist(strValue);
else
tag.SetArtist(tag.GetArtist() + g_advancedSettings.m_musicItemSeparator + strValue);
}
else if (strFrameName == "WM/TrackNumber")
{
if (tag.GetTrackNumber() <= 0) tag.SetTrackNumber(atoi(strValue.c_str()));
}
else if (strFrameName == "WM/PartOfSet")
{
tag.SetPartOfSet(atoi(strValue.c_str()));
}
//else if (strFrameName=="WM/Track") // Old Tracknumber, should not be used anymore
else if (strFrameName == "WM/Year")
{
SYSTEMTIME dateTime;
dateTime.wYear = atoi(strValue.c_str());
tag.SetReleaseDate(dateTime);
}
else if (strFrameName == "WM/Genre")
{
// Multiple genres are stared in multiple "WM/Genre" tags we have to get them
// separatly and merge them to our system
if (tag.GetGenre().IsEmpty())
tag.SetGenre(strValue);
else
tag.SetGenre(tag.GetGenre() + g_advancedSettings.m_musicItemSeparator + strValue);
}
else if (strFrameName == "WM/Lyrics")
{
tag.SetLyrics(strValue);
}
//else if (strFrameName=="WM/DRM")
//{
// // File is DRM protected
// pwszValue;
//}
//else if (strFrameName=="WM/Codec")
//{
// pwszValue;
//}
//else if (strFrameName=="WM/BeatsPerMinute")
//{
// pwszValue;
//}
//else if (strFrameName=="WM/Mood")
//{
// pwszValue;
//}
//else if (strFrameName=="WM/RadioStationName")
//{
// pwszValue;
//}
//else if (strFrameName=="WM/RadioStationOwner")
//{
// pwszValue;
//}
}
示例14: UpdateItem
bool CPVRManager::UpdateItem(CFileItem& item)
{
/* Don't update if a recording is played */
if (item.IsPVRRecording())
return false;
if (!item.IsPVRChannel())
{
CLog::Log(LOGERROR, "CPVRManager - %s - no channel tag provided", __FUNCTION__);
return false;
}
CSingleLock lock(m_critSection);
if (!m_currentFile || *m_currentFile->GetPVRChannelInfoTag() == *item.GetPVRChannelInfoTag())
return false;
g_application.SetCurrentFileItem(*m_currentFile);
CFileItemPtr itemptr(new CFileItem(*m_currentFile));
g_infoManager.SetCurrentItem(itemptr);
CPVRChannelPtr channelTag(item.GetPVRChannelInfoTag());
CEpgInfoTagPtr epgTagNow(channelTag->GetEPGNow());
if (channelTag->IsRadio())
{
CMusicInfoTag* musictag = item.GetMusicInfoTag();
if (musictag)
{
musictag->SetTitle(epgTagNow ?
epgTagNow->Title() :
CSettings::GetInstance().GetBool(CSettings::SETTING_EPG_HIDENOINFOAVAILABLE) ?
"" :
g_localizeStrings.Get(19055)); // no information available
if (epgTagNow)
musictag->SetGenre(epgTagNow->Genre());
musictag->SetDuration(epgTagNow ? epgTagNow->GetDuration() : 3600);
musictag->SetURL(channelTag->Path());
musictag->SetArtist(channelTag->ChannelName());
musictag->SetAlbumArtist(channelTag->ChannelName());
musictag->SetLoaded(true);
musictag->SetComment("");
musictag->SetLyrics("");
}
}
else
{
CVideoInfoTag *videotag = item.GetVideoInfoTag();
if (videotag)
{
videotag->m_strTitle = epgTagNow ?
epgTagNow->Title() :
CSettings::GetInstance().GetBool(CSettings::SETTING_EPG_HIDENOINFOAVAILABLE) ?
"" :
g_localizeStrings.Get(19055); // no information available
if (epgTagNow)
videotag->m_genre = epgTagNow->Genre();
videotag->m_strPath = channelTag->Path();
videotag->m_strFileNameAndPath = channelTag->Path();
videotag->m_strPlot = epgTagNow ? epgTagNow->Plot() : "";
videotag->m_strPlotOutline = epgTagNow ? epgTagNow->PlotOutline() : "";
videotag->m_iEpisode = epgTagNow ? epgTagNow->EpisodeNumber() : 0;
}
}
return false;
}
示例15: if
void CMusicInfoTagLoaderMP4::ParseTag( unsigned int metaKey, const char* pMetaData, int metaSize, CMusicInfoTag& tag, EmbeddedArt *art)
{
switch ( metaKey )
{
case g_TitleAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
// we use utf8 internally
tag.SetLoaded( true );
tag.SetTitle( dataWorkspace.get() );
break;
}
case g_ArtistAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetArtist( dataWorkspace.get() );
break;
}
case g_AlbumAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetAlbum( dataWorkspace.get() );
break;
}
case g_AlbumArtistAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetAlbumArtist( dataWorkspace.get() );
break;
}
case g_DayAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
SYSTEMTIME dateTime;
dateTime.wYear = atoi( dataWorkspace.get() );
tag.SetReleaseDate( dateTime );
break;
}
case g_GenreAtomName:
{
// When a genre number is specified, we need to translate to a string for display..
// Note that AAC/iTunes genre numbers are the same as ID3 numbers, but are offset by 1.
const char* pGenre = ID3_V1GENRE2DESCRIPTION( (unsigned char)pMetaData[ 1 ] - 1 );
if ( pGenre )
{
tag.SetGenre( pGenre );
}
break;
}
case g_CompilationAtomName:
{
if (metaSize == 1)
tag.SetCompilation(*pMetaData == 1);
break;
}
case g_CommentAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
dataWorkspace[ metaSize ] = '\0';
tag.SetComment( dataWorkspace.get() );
break;
}
case g_LyricsAtomName:
{
// We need to zero-terminate the string, which needs workspace..
auto_aptr<char> dataWorkspace( new char[ metaSize + 1 ] );
memcpy( dataWorkspace.get(), pMetaData, metaSize );
//.........这里部分代码省略.........