diff options
-rw-r--r-- | device.c | 34 | ||||
-rw-r--r-- | device.h | 11 |
2 files changed, 32 insertions, 13 deletions
@@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: device.c,v 1.82 2009-06-04 09:49:25 phintuka Exp $ + * $Id: device.c,v 1.83 2009-06-24 20:43:45 phintuka Exp $ * */ @@ -214,6 +214,8 @@ cXinelibDevice::cXinelibDevice() m_Cleared = true; m_h264 = false; + m_VideoSize = (video_size_t*)calloc(1, sizeof(video_size_t)); + TsBufferClear(); } @@ -224,6 +226,8 @@ cXinelibDevice::~cXinelibDevice() StopDevice(); m_pInstance = NULL; + + free (m_VideoSize); } bool cXinelibDevice::StartDevice() @@ -1189,6 +1193,7 @@ int cXinelibDevice::PlayTsAudio(const uchar *Data, int Length) int cXinelibDevice::PlayTsVideo(const uchar *Data, int Length) { +#warning PlayVideo: get_size, trickspeed stuff, ... !!! return PlayTsAny(Data, Length); } #endif // VDRVERSNUM >= 10701 @@ -1228,12 +1233,10 @@ int cXinelibDevice::PlayVideo(const uchar *buf, int length) m_h264 = true; } - video_size_t Size; - if (pes_get_video_size(buf, length, &Size, m_h264 ? 1:0)) { + if (pes_get_video_size(buf, length, m_VideoSize, m_h264 ? 1:0)) { m_StreamStart = false; - /*if (m_h264)*/ LOGMSG("Detected video size %dx%d", Size.width, Size.height); - //LOGDBG("Detected video size %dx%d", Width, Height); - ForEach(m_clients, &cXinelibThread::SetHDMode, (Size.width > 800)); + LOGDBG("Detected video size %dx%d", m_VideoSize->width, m_VideoSize->height); + ForEach(m_clients, &cXinelibThread::SetHDMode, (m_VideoSize->width > 800)); } } @@ -1526,14 +1529,25 @@ eVideoSystem cXinelibDevice::GetVideoSystem(void) return cDevice::GetVideoSystem(); } -#if VDRVERSNUM >= 10707 -void cXinelibDevice::GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect) +#if VDRVERSNUM >= 10708 +void cXinelibDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect) +{ + Width = m_VideoSize->width; + Height = m_VideoSize->height; + VideoAspect = 1.0; + if (m_VideoSize->pixel_aspect.den) { + VideoAspect = (double)m_VideoSize->pixel_aspect.num / (double)m_VideoSize->pixel_aspect.den; + VideoAspect *= (double)Width / (double)Height; + } +} +#endif + +void cXinelibDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect) { Width = 720; Height = 576; - Aspect = va4_3; + PixelAspect = 16.0 / 9.0 / (double)Width * (double)Height; } -#endif // // SPU decoder @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: device.h,v 1.47 2009-05-06 15:16:31 phintuka Exp $ + * $Id: device.h,v 1.48 2009-06-24 20:43:45 phintuka Exp $ * */ @@ -20,6 +20,8 @@ class cXinelibThread; class cChannel; class cFunctor; +struct video_size_s; + typedef enum { miTitle = 0, miTracknumber = 1, @@ -112,9 +114,12 @@ class cXinelibDevice : public cDevice virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat); virtual void SetVideoFormat(bool VideoFormat16_9); virtual eVideoSystem GetVideoSystem(void); -#if VDRVERSNUM >= 10707 - virtual void GetVideoSize(int &Width, int &Height, eVideoAspect &Aspect); + + struct video_size_s *m_VideoSize; +#if VDRVERSNUM >= 10708 + virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect); #endif + virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect); // Track facilities |