summaryrefslogtreecommitdiffstats
path: root/src/app/theStream.cpp
blob: 09005f949a42ebf85879ae2dfd483bc7ccf6b0ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// (C) 2005 Max Howell (max.howell@methylblue.com)
// See COPYING file for licensing information

#include <kurl.h>

#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<MetaData, TQString> TheStream::metaData()
   {
#define xmeta(x) xine_get_meta_info(e->m_stream, (x))

      TQMap<MetaData, TQString> 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<StreamInfo, TQString> TheStream::info()
   {
#define xinfo(x) TQString::number(xine_get_stream_info(e->m_stream, (x)))

      TQMap<StreamInfo, TQString> 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
}