void CFfmpegDec::GetMeta(AVDictionary * metadata) { AVDictionaryEntry *tag = NULL; while ((tag = av_dict_get(metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { if(!strcasecmp(tag->key,"Title")) { if (title.empty()) { title = isUTF8(tag->value) ? tag->value : convertLatin1UTF8(tag->value); title = trim(title); } continue; } if(!strcasecmp(tag->key,"Artist")) { if (artist.empty()) { artist = isUTF8(tag->value) ? tag->value : convertLatin1UTF8(tag->value); artist = trim(artist); } continue; } if(!strcasecmp(tag->key,"Year")) { if (date.empty()) { date = isUTF8(tag->value) ? tag->value : convertLatin1UTF8(tag->value); date = trim(date); } continue; } if(!strcasecmp(tag->key,"Album")) { if (album.empty()) { album = isUTF8(tag->value) ? tag->value : convertLatin1UTF8(tag->value); album = trim(album); } continue; } if(!strcasecmp(tag->key,"Genre")) { if (genre.empty()) { genre = isUTF8(tag->value) ? tag->value : convertLatin1UTF8(tag->value); genre = trim(genre); } continue; } } }
void CAudioPlayer::sc_callback(void *arg) { bool changed=false; CSTATE *stat = (CSTATE*)arg; const std::string artist = isUTF8(stat->artist) ? stat->artist : convertLatin1UTF8(stat->artist); const std::string title = isUTF8(stat->title) ? stat->title : convertLatin1UTF8(stat->title); const std::string station = isUTF8(stat->station) ? stat->station : convertLatin1UTF8(stat->station); const std::string genre = isUTF8(stat->genre) ? stat->artist : convertLatin1UTF8(stat->genre); if(m_Audiofile.MetaData.artist != artist) { m_Audiofile.MetaData.artist = artist; changed=true; } if (m_Audiofile.MetaData.title != title) { m_Audiofile.MetaData.title = title; changed=true; } if (m_Audiofile.MetaData.sc_station != station) { m_Audiofile.MetaData.sc_station = station; changed=true; } if (m_Audiofile.MetaData.genre != genre) { m_Audiofile.MetaData.genre = genre; changed=true; } if(changed) { m_played_time = 0; } m_sc_buffered = stat->buffered; m_Audiofile.MetaData.changed = changed; //printf("Callback %s %s %s %d\n",stat->artist, stat->title, stat->station, stat->buffered); }
eService *eServiceHandlerDVB::createService(const eServiceReference &node) { #ifndef DISABLE_FILE if (node.data[0]>=0) { eString l=node.path.mid(node.path.rfind('/')+1); if (!isUTF8(l)) l=convertLatin1UTF8(l); if (node.descr) l=node.descr; /* moved to dvbservice.cpp, function eDVBServiceController::FillPIDsFromFile int fd=open(node.path.c_str(), O_RDONLY|O_LARGEFILE); if (fd < 0) return 0; __u8 packet[188]; eServiceDVB *dvb=0; do { if (::read(fd, packet, 188) != 188) break; // i know that THIS is not really a SIT parser :) if ((packet[0] != 0x47) || (packet[1] != 0x40) || (packet[2] != 0x1f) || (packet[3] != 0x10)) break; int nameoffset = 6; if (memcmp(packet+0x15, "ENIGMA", 6)) { //failed so check another if (!memcmp(packet+0x15, "NEUTRINONG", 10)) nameoffset = 10; else break; } // we found our private descriptor: __u8 *descriptor=packet+0x13; int len=descriptor[1]; dvb=new eServiceDVB(eServiceID((packet[0xf]<<8)|packet[0x10]), l.c_str()); len-=nameoffset; descriptor+=2+nameoffset; // skip tag, len, ENIGMA or NEUTRINONG for (int i=0; i<len; i+=descriptor[i+1]+2) { int tag=descriptor[i]; switch (tag) { case eServiceDVB::cVPID: dvb->set(eServiceDVB::cVPID, (descriptor[i+2]<<8)|(descriptor[i+3])); break; case eServiceDVB::cAPID: if (descriptor[i+4] == 0) dvb->set(eServiceDVB::cAPID, (descriptor[i+2]<<8)|(descriptor[i+3])); else dvb->set(eServiceDVB::cAC3PID, (descriptor[i+2]<<8)|(descriptor[i+3])); break; case eServiceDVB::cTPID: dvb->set(eServiceDVB::cTPID, (descriptor[i+2]<<8)|(descriptor[i+3])); break; case eServiceDVB::cPCRPID: dvb->set(eServiceDVB::cPCRPID, (descriptor[i+2]<<8)|(descriptor[i+3])); break; } } } while (0); close(fd); if (!dvb) return new eService(l); return dvb; */ return new eServiceDVB(eServiceID(), l.c_str()); } #endif // DISABLE_FILE switch (node.data[0]) { case -1: // for satellites... { eSatellite *sat = eTransponderList::getInstance()->findSatellite(node.data[2] >> 16 ); if (!sat) return 0; else return new eService( eString().sprintf("%s - %s",sat->getDescription().c_str(),_("Providers"))); } case -2: // for satellites... { eSatellite *sat = eTransponderList::getInstance()->findSatellite(node.data[2] >> 16 ); if (!sat) return 0; else return new eService( eString().sprintf("%s - %s",sat->getDescription().c_str(),_("Services"))); } case -5: // for satellites... { eSatellite *sat = eTransponderList::getInstance()->findSatellite(node.data[2] >> 16 ); if (!sat) return 0; else return new eService( eString().sprintf("%s - %s",sat->getDescription().c_str(),_("new found"))); } case -6: { return new eService( _("current transponder")); } case -3: { eBouquet *b=eDVB::getInstance()->settings->getBouquet(node.data[2]); if (!b) return 0; return new eService(b->bouquet_name.c_str()); } } return 0; }