mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added support for setting the video display mode
This commit is contained in:
parent
f038aaefc8
commit
51f41252cf
@ -1151,6 +1151,7 @@ Marco Schl
|
|||||||
for fixing calling cStatus::MsgChannelSwitch() in cDevice::SetChannel()
|
for fixing calling cStatus::MsgChannelSwitch() in cDevice::SetChannel()
|
||||||
for increasing POLLTIMEOUTS_BEFORE_DEVICECLEAR in transfer.c to 6 to avoid problems
|
for increasing POLLTIMEOUTS_BEFORE_DEVICECLEAR in transfer.c to 6 to avoid problems
|
||||||
with the larger buffer reserve
|
with the larger buffer reserve
|
||||||
|
for adding support for setting the video display mode
|
||||||
|
|
||||||
Jürgen Schmitz <j.schmitz@web.de>
|
Jürgen Schmitz <j.schmitz@web.de>
|
||||||
for reporting a bug in displaying the current channel when switching via the SVDRP
|
for reporting a bug in displaying the current channel when switching via the SVDRP
|
||||||
|
1
HISTORY
1
HISTORY
@ -3429,3 +3429,4 @@ Video Disk Recorder Revision History
|
|||||||
- Increased POLLTIMEOUTS_BEFORE_DEVICECLEAR in transfer.c to 6 to avoid problems
|
- Increased POLLTIMEOUTS_BEFORE_DEVICECLEAR in transfer.c to 6 to avoid problems
|
||||||
with the larger buffer reserve (thanks to Marco Schlüßler).
|
with the larger buffer reserve (thanks to Marco Schlüßler).
|
||||||
- Fixed the call to SetVideoFormat() in cDvbDevice::cDvbDevice() (parameter is _bool_).
|
- Fixed the call to SetVideoFormat() in cDvbDevice::cDvbDevice() (parameter is _bool_).
|
||||||
|
- Added support for setting the video display mode (thanks to Marco Schlüßler).
|
||||||
|
26
device.c
26
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 1.93 2005/02/19 12:20:39 kls Exp $
|
* $Id: device.c 1.94 2005/02/20 11:41:03 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -235,6 +235,7 @@ bool cDevice::SetPrimaryDevice(int n)
|
|||||||
primaryDevice->MakePrimaryDevice(false);
|
primaryDevice->MakePrimaryDevice(false);
|
||||||
primaryDevice = device[n];
|
primaryDevice = device[n];
|
||||||
primaryDevice->MakePrimaryDevice(true);
|
primaryDevice->MakePrimaryDevice(true);
|
||||||
|
primaryDevice->SetVideoFormat(Setup.VideoFormat);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
esyslog("ERROR: invalid primary device number: %d", n + 1);
|
esyslog("ERROR: invalid primary device number: %d", n + 1);
|
||||||
@ -327,6 +328,28 @@ bool cDevice::GrabImage(const char *FileName, bool Jpeg, int Quality, int SizeX,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
|
||||||
|
{
|
||||||
|
cSpuDecoder *spuDecoder = GetSpuDecoder();
|
||||||
|
if (spuDecoder) {
|
||||||
|
if (Setup.VideoFormat)
|
||||||
|
spuDecoder->setScaleMode(cSpuDecoder::eSpuNormal);
|
||||||
|
else {
|
||||||
|
switch (VideoDisplayFormat) {
|
||||||
|
case vdfPanAndScan:
|
||||||
|
spuDecoder->setScaleMode(cSpuDecoder::eSpuPanAndScan);
|
||||||
|
break;
|
||||||
|
case vdfLetterBox:
|
||||||
|
spuDecoder->setScaleMode(cSpuDecoder::eSpuLetterBox);
|
||||||
|
break;
|
||||||
|
case vdfCenterCutOut:
|
||||||
|
spuDecoder->setScaleMode(cSpuDecoder::eSpuNormal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cDevice::SetVideoFormat(bool VideoFormat16_9)
|
void cDevice::SetVideoFormat(bool VideoFormat16_9)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -836,6 +859,7 @@ void cDevice::Detach(cPlayer *Player)
|
|||||||
player->device = NULL;
|
player->device = NULL;
|
||||||
player = NULL;
|
player = NULL;
|
||||||
SetPlayMode(pmNone);
|
SetPlayMode(pmNone);
|
||||||
|
SetVideoDisplayFormat(vdfLetterBox);
|
||||||
Audios.ClearAudio();
|
Audios.ClearAudio();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
device.h
13
device.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.h 1.55 2005/02/06 11:43:04 kls Exp $
|
* $Id: device.h 1.56 2005/02/20 11:30:11 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DEVICE_H
|
#ifndef __DEVICE_H
|
||||||
@ -18,6 +18,7 @@
|
|||||||
#include "ringbuffer.h"
|
#include "ringbuffer.h"
|
||||||
#include "sdt.h"
|
#include "sdt.h"
|
||||||
#include "sections.h"
|
#include "sections.h"
|
||||||
|
#include "spu.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
@ -56,6 +57,11 @@ enum eVideoSystem { vsPAL,
|
|||||||
vsNTSC
|
vsNTSC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum eVideoDisplayFormat { vdfPanAndScan,
|
||||||
|
vdfLetterBox,
|
||||||
|
vdfCenterCutOut
|
||||||
|
};
|
||||||
|
|
||||||
enum eTrackType { ttNone,
|
enum eTrackType { ttNone,
|
||||||
ttAudio,
|
ttAudio,
|
||||||
ttAudioFirst = ttAudio,
|
ttAudioFirst = ttAudio,
|
||||||
@ -83,7 +89,6 @@ struct tTrackId {
|
|||||||
class cChannel;
|
class cChannel;
|
||||||
class cPlayer;
|
class cPlayer;
|
||||||
class cReceiver;
|
class cReceiver;
|
||||||
class cSpuDecoder;
|
|
||||||
class cPesAssembler;
|
class cPesAssembler;
|
||||||
|
|
||||||
/// The cDevice class is the base from which actual devices can be derived.
|
/// The cDevice class is the base from which actual devices can be derived.
|
||||||
@ -301,6 +306,10 @@ public:
|
|||||||
// Video format facilities
|
// Video format facilities
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
|
||||||
|
///< Sets the video display format to the given one (only useful
|
||||||
|
///< if this device has an MPEG decoder).
|
||||||
|
///< A derived class must first call the base class function!
|
||||||
virtual void SetVideoFormat(bool VideoFormat16_9);
|
virtual void SetVideoFormat(bool VideoFormat16_9);
|
||||||
///< Sets the output video format to either 16:9 or 4:3 (only useful
|
///< Sets the output video format to either 16:9 or 4:3 (only useful
|
||||||
///< if this device has an MPEG decoder).
|
///< if this device has an MPEG decoder).
|
||||||
|
29
dvbdevice.c
29
dvbdevice.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.c 1.122 2005/02/20 11:05:50 kls Exp $
|
* $Id: dvbdevice.c 1.123 2005/02/20 11:31:39 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbdevice.h"
|
#include "dvbdevice.h"
|
||||||
@ -599,10 +599,35 @@ bool cDvbDevice::GrabImage(const char *FileName, bool Jpeg, int Quality, int Siz
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cDvbDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
|
||||||
|
{
|
||||||
|
cDevice::SetVideoDisplayFormat(VideoDisplayFormat);
|
||||||
|
if (HasDecoder()) {
|
||||||
|
if (Setup.VideoFormat) {
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_CENTER_CUT_OUT));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (VideoDisplayFormat) {
|
||||||
|
case vdfPanAndScan:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_PAN_SCAN));
|
||||||
|
break;
|
||||||
|
case vdfLetterBox:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_LETTER_BOX));
|
||||||
|
break;
|
||||||
|
case vdfCenterCutOut:
|
||||||
|
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_CENTER_CUT_OUT));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cDvbDevice::SetVideoFormat(bool VideoFormat16_9)
|
void cDvbDevice::SetVideoFormat(bool VideoFormat16_9)
|
||||||
{
|
{
|
||||||
if (HasDecoder())
|
if (HasDecoder()) {
|
||||||
CHECK(ioctl(fd_video, VIDEO_SET_FORMAT, VideoFormat16_9 ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3));
|
CHECK(ioctl(fd_video, VIDEO_SET_FORMAT, VideoFormat16_9 ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3));
|
||||||
|
SetVideoDisplayFormat(vdfLetterBox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eVideoSystem cDvbDevice::GetVideoSystem(void)
|
eVideoSystem cDvbDevice::GetVideoSystem(void)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.h 1.33 2005/02/13 14:14:31 kls Exp $
|
* $Id: dvbdevice.h 1.34 2005/02/20 11:17:07 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBDEVICE_H
|
#ifndef __DVBDEVICE_H
|
||||||
@ -87,6 +87,7 @@ public:
|
|||||||
// Video format facilities
|
// Video format facilities
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
|
||||||
virtual void SetVideoFormat(bool VideoFormat16_9);
|
virtual void SetVideoFormat(bool VideoFormat16_9);
|
||||||
virtual eVideoSystem GetVideoSystem(void);
|
virtual eVideoSystem GetVideoSystem(void);
|
||||||
|
|
||||||
|
3
dvbspu.h
3
dvbspu.h
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* parts of this file are derived from the OMS program.
|
* parts of this file are derived from the OMS program.
|
||||||
*
|
*
|
||||||
* $Id: dvbspu.h 1.7 2005/01/08 09:59:44 kls Exp $
|
* $Id: dvbspu.h 1.8 2005/02/20 11:20:43 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBSPU_H
|
#ifndef __DVBSPU_H
|
||||||
@ -139,6 +139,7 @@ class cDvbSpuDecoder:public cSpuDecoder {
|
|||||||
|
|
||||||
int setTime(uint32_t pts);
|
int setTime(uint32_t pts);
|
||||||
|
|
||||||
|
cSpuDecoder::eScaleMode getScaleMode(void) { return scaleMode; }
|
||||||
void setScaleMode(cSpuDecoder::eScaleMode ScaleMode);
|
void setScaleMode(cSpuDecoder::eScaleMode ScaleMode);
|
||||||
void setPalette(uint32_t * pal);
|
void setPalette(uint32_t * pal);
|
||||||
void setHighlight(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey,
|
void setHighlight(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey,
|
||||||
|
3
spu.h
3
spu.h
@ -6,7 +6,7 @@
|
|||||||
* This code is distributed under the terms and conditions of the
|
* This code is distributed under the terms and conditions of the
|
||||||
* GNU GENERAL PUBLIC LICENSE. See the file COPYING for details.
|
* GNU GENERAL PUBLIC LICENSE. See the file COPYING for details.
|
||||||
*
|
*
|
||||||
* $Id: spu.h 1.3 2005/01/08 09:58:35 kls Exp $
|
* $Id: spu.h 1.4 2005/02/20 11:21:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __SPU_VDR_H
|
#ifndef __SPU_VDR_H
|
||||||
@ -25,6 +25,7 @@ class cSpuDecoder {
|
|||||||
|
|
||||||
virtual int setTime(uint32_t pts) = 0;
|
virtual int setTime(uint32_t pts) = 0;
|
||||||
|
|
||||||
|
virtual cSpuDecoder::eScaleMode getScaleMode(void) = 0;
|
||||||
virtual void setScaleMode(cSpuDecoder::eScaleMode ScaleMode) = 0;
|
virtual void setScaleMode(cSpuDecoder::eScaleMode ScaleMode) = 0;
|
||||||
virtual void setPalette(uint32_t * pal) = 0;
|
virtual void setPalette(uint32_t * pal) = 0;
|
||||||
virtual void setHighlight(uint16_t sx, uint16_t sy,
|
virtual void setHighlight(uint16_t sx, uint16_t sy,
|
||||||
|
Loading…
Reference in New Issue
Block a user