// (C) 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information #include #include "../mxcl.library.h" #include "theStream.h" #include "xineEngine.h" namespace Codeine { #define e VideoWindow::s_instance TDEConfig* TheStream::profile() { //TODO a unique id for discs, and then even to also record chapters etc. // if( url().protocol() == "dvd" ) // return Codeine::config( TQString( "dvd:/" ) + prettyTitle() ); // else return Codeine::config( url().prettyURL() ); } const KURL& TheStream::url() { return e->m_url; } bool TheStream::canSeek() //FIXME! { return e->m_url.protocol() != "http"; } bool TheStream::hasAudio() { return xine_get_stream_info( e->m_stream, XINE_STREAM_INFO_HAS_AUDIO ); } bool TheStream::hasVideo() { return xine_get_stream_info( e->m_stream, XINE_STREAM_INFO_HAS_VIDEO ); } TQSize TheStream::defaultVideoSize() { return !e->m_stream ? TQSize() : TQSize( xine_get_stream_info( e->m_stream, XINE_STREAM_INFO_VIDEO_WIDTH ), xine_get_stream_info( e->m_stream, XINE_STREAM_INFO_VIDEO_HEIGHT ) ); } int TheStream::aspectRatio() { return xine_get_param( e->m_stream, XINE_PARAM_VO_ASPECT_RATIO ); } int TheStream::subtitleChannel() { return xine_get_param( e->m_stream, XINE_PARAM_SPU_CHANNEL ); } int TheStream::audioChannel() { return xine_get_param( e->m_stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL ); } TQString TheStream::prettyTitle() { const KURL &url = e->m_url; const TQString artist = TQString::fromUtf8( xine_get_meta_info( e->m_stream, XINE_META_INFO_ARTIST ) ); const TQString title = TQString::fromUtf8( xine_get_meta_info( e->m_stream, XINE_META_INFO_TITLE ) ); if (hasVideo() && !title.isEmpty()) return title; else if (!title.isEmpty() && !artist.isEmpty()) return artist + " - " + title; else if (url.protocol() != "http" && !url.fileName().isEmpty()) { const TQString n = url.fileName(); return KURL::decode_string( n.left( n.findRev( '.' ) ).replace( '_', ' ' ) ); } else return url.prettyURL(); } TQMap TheStream::metaData() { #define xmeta(x) xine_get_meta_info(e->m_stream, (x)) TQMap data; data[MetaData::Title] = xmeta(XINE_META_INFO_TITLE); data[MetaData::Comment] = xmeta(XINE_META_INFO_COMMENT); data[MetaData::Artist] = xmeta(XINE_META_INFO_ARTIST); data[MetaData::Genre] = xmeta(XINE_META_INFO_GENRE); data[MetaData::Album] = xmeta(XINE_META_INFO_ALBUM); data[MetaData::Year] = xmeta(XINE_META_INFO_YEAR); data[MetaData::VideoCodec] = xmeta(XINE_META_INFO_VIDEOCODEC); data[MetaData::AudioCodec] = xmeta(XINE_META_INFO_AUDIOCODEC); return data; #undef xmeta } TQMap TheStream::info() { #define xinfo(x) TQString::number(xine_get_stream_info(e->m_stream, (x))) TQMap data; data[StreamInfo::VideoWidth] = xinfo(XINE_STREAM_INFO_VIDEO_WIDTH); data[StreamInfo::VideoHeight] = xinfo(XINE_STREAM_INFO_VIDEO_HEIGHT); data[StreamInfo::VideoBitRate] = xinfo(XINE_STREAM_INFO_VIDEO_BITRATE); data[StreamInfo::AudioBits] = xinfo(XINE_STREAM_INFO_AUDIO_BITS); data[StreamInfo::AudioSampleRate] = xinfo(XINE_STREAM_INFO_AUDIO_SAMPLERATE); data[StreamInfo::AudioBitRate] = xinfo(XINE_STREAM_INFO_AUDIO_BITRATE); return data; #undef xinfo } #undef e }