mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Cutting pixels configured for each resolution.
This commit is contained in:
parent
c986d285ea
commit
ac2e10a308
@ -2,6 +2,15 @@ User johns
|
|||||||
Date:
|
Date:
|
||||||
|
|
||||||
Release Version 0.5.0
|
Release Version 0.5.0
|
||||||
|
|
||||||
|
User: CafeDelMar
|
||||||
|
Date: Thu Apr 5 22:44:06 CEST 2012
|
||||||
|
|
||||||
|
Cutting pixels are now configured for each resolution.
|
||||||
|
|
||||||
|
User johns
|
||||||
|
Date: Thu Apr 5 15:47:59 CEST 2012
|
||||||
|
|
||||||
Buffer less video and audio.
|
Buffer less video and audio.
|
||||||
Fix 100% cpu use, with mp3 plugin.
|
Fix 100% cpu use, with mp3 plugin.
|
||||||
Audio/Video sync rewrite, trick-speed support moved to video.
|
Audio/Video sync rewrite, trick-speed support moved to video.
|
||||||
|
12
README.txt
12
README.txt
@ -138,6 +138,12 @@ Setup: /etc/vdr/setup.conf
|
|||||||
-1000 .. 1000 noise reduction level (0 off, -1000 max blur,
|
-1000 .. 1000 noise reduction level (0 off, -1000 max blur,
|
||||||
1000 max sharp)
|
1000 max sharp)
|
||||||
|
|
||||||
|
softhddevice.<res>.CutTopBottom = 0
|
||||||
|
Cut 'n' pixels at at top and bottom of the video picture.
|
||||||
|
|
||||||
|
softhddevice.<res>.CutLeftRight = 0
|
||||||
|
Cut 'n' pixels at at left and right of the video picture.
|
||||||
|
|
||||||
softhddevice.AudioDelay = 0
|
softhddevice.AudioDelay = 0
|
||||||
+n or -n ms
|
+n or -n ms
|
||||||
delay audio or delay video
|
delay audio or delay video
|
||||||
@ -171,12 +177,6 @@ Setup: /etc/vdr/setup.conf
|
|||||||
in the setup menu this is entered as (24bit RGB and 8bit Alpha)
|
in the setup menu this is entered as (24bit RGB and 8bit Alpha)
|
||||||
(Red * 65536 + Green * 256 + Blue)
|
(Red * 65536 + Green * 256 + Blue)
|
||||||
|
|
||||||
softhddevice.SkipLines = 0
|
|
||||||
skip 'n' lines at top and bottom of the video picture.
|
|
||||||
|
|
||||||
softhddevice.SkipPixels = 0
|
|
||||||
skip 'n' pixels at left and right of the video picture.
|
|
||||||
|
|
||||||
softhddevice.StudioLevels = 0
|
softhddevice.StudioLevels = 0
|
||||||
0 use PC levels (0-255) with vdpau.
|
0 use PC levels (0-255) with vdpau.
|
||||||
1 use studio levels (16-235) with vdpau.
|
1 use studio levels (16-235) with vdpau.
|
||||||
|
@ -77,8 +77,6 @@ static char ConfigMakePrimary; ///< config primary wanted
|
|||||||
static char ConfigHideMainMenuEntry; ///< config hide main menu entry
|
static char ConfigHideMainMenuEntry; ///< config hide main menu entry
|
||||||
|
|
||||||
static uint32_t ConfigVideoBackground; ///< config video background color
|
static uint32_t ConfigVideoBackground; ///< config video background color
|
||||||
static int ConfigVideoSkipLines; ///< config skip lines top/bottom
|
|
||||||
static int ConfigVideoSkipPixels; ///< config skip pixels left/right
|
|
||||||
static char ConfigVideoStudioLevels; ///< config use studio levels
|
static char ConfigVideoStudioLevels; ///< config use studio levels
|
||||||
static char ConfigVideo60HzMode; ///< config use 60Hz display mode
|
static char ConfigVideo60HzMode; ///< config use 60Hz display mode
|
||||||
static char ConfigVideoSoftStartSync; ///< config use softstart sync
|
static char ConfigVideoSoftStartSync; ///< config use softstart sync
|
||||||
@ -101,6 +99,12 @@ static int ConfigVideoSharpen[RESOLUTIONS];
|
|||||||
/// config scaling
|
/// config scaling
|
||||||
static int ConfigVideoScaling[RESOLUTIONS];
|
static int ConfigVideoScaling[RESOLUTIONS];
|
||||||
|
|
||||||
|
/// config cut top and bottom pixels
|
||||||
|
static int ConfigVideoCutTopBottom[RESOLUTIONS];
|
||||||
|
|
||||||
|
/// config cut left and right pixels
|
||||||
|
static int ConfigVideoCutLeftRight[RESOLUTIONS];
|
||||||
|
|
||||||
static int ConfigVideoAudioDelay; ///< config audio delay
|
static int ConfigVideoAudioDelay; ///< config audio delay
|
||||||
static int ConfigAudioPassthrough; ///< config audio pass-through
|
static int ConfigAudioPassthrough; ///< config audio pass-through
|
||||||
static int ConfigAudioDownmix; ///< config audio downmix
|
static int ConfigAudioDownmix; ///< config audio downmix
|
||||||
@ -469,8 +473,6 @@ class cMenuSetupSoft:public cMenuSetupPage
|
|||||||
int HideMainMenuEntry;
|
int HideMainMenuEntry;
|
||||||
uint32_t Background;
|
uint32_t Background;
|
||||||
uint32_t BackgroundAlpha;
|
uint32_t BackgroundAlpha;
|
||||||
int SkipLines;
|
|
||||||
int SkipPixels;
|
|
||||||
int StudioLevels;
|
int StudioLevels;
|
||||||
int _60HzMode;
|
int _60HzMode;
|
||||||
int SoftStartSync;
|
int SoftStartSync;
|
||||||
@ -480,6 +482,8 @@ class cMenuSetupSoft:public cMenuSetupPage
|
|||||||
int InverseTelecine[RESOLUTIONS];
|
int InverseTelecine[RESOLUTIONS];
|
||||||
int Denoise[RESOLUTIONS];
|
int Denoise[RESOLUTIONS];
|
||||||
int Sharpen[RESOLUTIONS];
|
int Sharpen[RESOLUTIONS];
|
||||||
|
int CutTopBottom[RESOLUTIONS];
|
||||||
|
int CutLeftRight[RESOLUTIONS];
|
||||||
int AudioDelay;
|
int AudioDelay;
|
||||||
int AudioPassthrough;
|
int AudioPassthrough;
|
||||||
int AudioDownmix;
|
int AudioDownmix;
|
||||||
@ -550,12 +554,6 @@ cMenuSetupSoft::cMenuSetupSoft(void)
|
|||||||
(int *)&Background, 0, 0x00FFFFFF));
|
(int *)&Background, 0, 0x00FFFFFF));
|
||||||
Add(new cMenuEditIntItem(tr("video background color (Alpha)"),
|
Add(new cMenuEditIntItem(tr("video background color (Alpha)"),
|
||||||
(int *)&BackgroundAlpha, 0, 0xFF));
|
(int *)&BackgroundAlpha, 0, 0xFF));
|
||||||
SkipLines = ConfigVideoSkipLines;
|
|
||||||
Add(new cMenuEditIntItem(tr("Skip lines top+bot (pixel)"), &SkipLines, 0,
|
|
||||||
64));
|
|
||||||
SkipPixels = ConfigVideoSkipPixels;
|
|
||||||
Add(new cMenuEditIntItem(tr("Skip pixels left+right (pixel)"), &SkipPixels,
|
|
||||||
0, 64));
|
|
||||||
StudioLevels = ConfigVideoStudioLevels;
|
StudioLevels = ConfigVideoStudioLevels;
|
||||||
Add(new cMenuEditBoolItem(tr("Use studio levels (vdpau only)"),
|
Add(new cMenuEditBoolItem(tr("Use studio levels (vdpau only)"),
|
||||||
&StudioLevels, trVDR("no"), trVDR("yes")));
|
&StudioLevels, trVDR("no"), trVDR("yes")));
|
||||||
@ -585,6 +583,13 @@ cMenuSetupSoft::cMenuSetupSoft(void)
|
|||||||
Sharpen[i] = ConfigVideoSharpen[i];
|
Sharpen[i] = ConfigVideoSharpen[i];
|
||||||
Add(new cMenuEditIntItem(tr("Sharpen (-1000..1000) (vdpau)"),
|
Add(new cMenuEditIntItem(tr("Sharpen (-1000..1000) (vdpau)"),
|
||||||
&Sharpen[i], -1000, 1000, tr("blur max"), tr("sharpen max")));
|
&Sharpen[i], -1000, 1000, tr("blur max"), tr("sharpen max")));
|
||||||
|
|
||||||
|
CutTopBottom[i] = ConfigVideoCutTopBottom[i];
|
||||||
|
Add(new cMenuEditIntItem(tr("Cut top and bottom (pixel)"),
|
||||||
|
&CutTopBottom[i], 0, 250));
|
||||||
|
CutLeftRight[i] = ConfigVideoCutLeftRight[i];
|
||||||
|
Add(new cMenuEditIntItem(tr("Cut left and right (pixel)"),
|
||||||
|
&CutLeftRight[i], 0, 250));
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// audio
|
// audio
|
||||||
@ -638,10 +643,6 @@ void cMenuSetupSoft::Store(void)
|
|||||||
ConfigVideoBackground = Background << 8 | (BackgroundAlpha & 0xFF);
|
ConfigVideoBackground = Background << 8 | (BackgroundAlpha & 0xFF);
|
||||||
SetupStore("Background", ConfigVideoBackground);
|
SetupStore("Background", ConfigVideoBackground);
|
||||||
VideoSetBackground(ConfigVideoBackground);
|
VideoSetBackground(ConfigVideoBackground);
|
||||||
SetupStore("SkipLines", ConfigVideoSkipLines = SkipLines);
|
|
||||||
VideoSetSkipLines(ConfigVideoSkipLines);
|
|
||||||
SetupStore("SkipPixels", ConfigVideoSkipPixels = SkipPixels);
|
|
||||||
VideoSetSkipPixels(ConfigVideoSkipPixels);
|
|
||||||
SetupStore("StudioLevels", ConfigVideoStudioLevels = StudioLevels);
|
SetupStore("StudioLevels", ConfigVideoStudioLevels = StudioLevels);
|
||||||
VideoSetStudioLevels(ConfigVideoStudioLevels);
|
VideoSetStudioLevels(ConfigVideoStudioLevels);
|
||||||
SetupStore("60HzMode", ConfigVideo60HzMode = _60HzMode);
|
SetupStore("60HzMode", ConfigVideo60HzMode = _60HzMode);
|
||||||
@ -666,6 +667,11 @@ void cMenuSetupSoft::Store(void)
|
|||||||
SetupStore(buf, ConfigVideoDenoise[i] = Denoise[i]);
|
SetupStore(buf, ConfigVideoDenoise[i] = Denoise[i]);
|
||||||
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Sharpen");
|
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Sharpen");
|
||||||
SetupStore(buf, ConfigVideoSharpen[i] = Sharpen[i]);
|
SetupStore(buf, ConfigVideoSharpen[i] = Sharpen[i]);
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutTopBottom");
|
||||||
|
SetupStore(buf, ConfigVideoCutTopBottom[i] = CutTopBottom[i]);
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutLeftRight");
|
||||||
|
SetupStore(buf, ConfigVideoCutLeftRight[i] = CutLeftRight[i]);
|
||||||
}
|
}
|
||||||
VideoSetScaling(ConfigVideoScaling);
|
VideoSetScaling(ConfigVideoScaling);
|
||||||
VideoSetDeinterlace(ConfigVideoDeinterlace);
|
VideoSetDeinterlace(ConfigVideoDeinterlace);
|
||||||
@ -673,6 +679,8 @@ void cMenuSetupSoft::Store(void)
|
|||||||
VideoSetInverseTelecine(ConfigVideoInverseTelecine);
|
VideoSetInverseTelecine(ConfigVideoInverseTelecine);
|
||||||
VideoSetDenoise(ConfigVideoDenoise);
|
VideoSetDenoise(ConfigVideoDenoise);
|
||||||
VideoSetSharpen(ConfigVideoSharpen);
|
VideoSetSharpen(ConfigVideoSharpen);
|
||||||
|
VideoSetCutTopBottom(ConfigVideoCutTopBottom);
|
||||||
|
VideoSetCutLeftRight(ConfigVideoCutLeftRight);
|
||||||
|
|
||||||
SetupStore("AudioDelay", ConfigVideoAudioDelay = AudioDelay);
|
SetupStore("AudioDelay", ConfigVideoAudioDelay = AudioDelay);
|
||||||
VideoSetAudioDelay(ConfigVideoAudioDelay);
|
VideoSetAudioDelay(ConfigVideoAudioDelay);
|
||||||
@ -1606,14 +1614,6 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
|
|||||||
VideoSetBackground(ConfigVideoBackground = strtoul(value, NULL, 0));
|
VideoSetBackground(ConfigVideoBackground = strtoul(value, NULL, 0));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!strcasecmp(name, "SkipLines")) {
|
|
||||||
VideoSetSkipLines(ConfigVideoSkipLines = atoi(value));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!strcasecmp(name, "SkipPixels")) {
|
|
||||||
VideoSetSkipPixels(ConfigVideoSkipPixels = atoi(value));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!strcasecmp(name, "StudioLevels")) {
|
if (!strcasecmp(name, "StudioLevels")) {
|
||||||
VideoSetStudioLevels(ConfigVideoStudioLevels = atoi(value));
|
VideoSetStudioLevels(ConfigVideoStudioLevels = atoi(value));
|
||||||
return true;
|
return true;
|
||||||
@ -1666,6 +1666,19 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
|
|||||||
VideoSetSharpen(ConfigVideoSharpen);
|
VideoSetSharpen(ConfigVideoSharpen);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutTopBottom");
|
||||||
|
if (!strcasecmp(name, buf)) {
|
||||||
|
ConfigVideoCutTopBottom[i] = atoi(value);
|
||||||
|
VideoSetCutTopBottom(ConfigVideoCutTopBottom);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutLeftRight");
|
||||||
|
if (!strcasecmp(name, buf)) {
|
||||||
|
ConfigVideoCutLeftRight[i] = atoi(value);
|
||||||
|
VideoSetCutLeftRight(ConfigVideoCutLeftRight);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp(name, "AudioDelay")) {
|
if (!strcasecmp(name, "AudioDelay")) {
|
||||||
|
112
video.c
112
video.c
@ -304,8 +304,6 @@ static char VideoSurfaceModesChanged; ///< flag surface modes changed
|
|||||||
static const char VideoTransparentOsd = 1;
|
static const char VideoTransparentOsd = 1;
|
||||||
|
|
||||||
static uint32_t VideoBackground; ///< video background color
|
static uint32_t VideoBackground; ///< video background color
|
||||||
static int VideoSkipLines; ///< skip video lines top/bottom
|
|
||||||
static int VideoSkipPixels; ///< skip video pixels left/right
|
|
||||||
static char VideoStudioLevels; ///< flag use studio levels
|
static char VideoStudioLevels; ///< flag use studio levels
|
||||||
|
|
||||||
/// Default deinterlace mode.
|
/// Default deinterlace mode.
|
||||||
@ -323,9 +321,15 @@ static char VideoInverseTelecine[VideoResolutionMax];
|
|||||||
/// Default amount of noise reduction algorithm to apply (0 .. 1000).
|
/// Default amount of noise reduction algorithm to apply (0 .. 1000).
|
||||||
static int VideoDenoise[VideoResolutionMax];
|
static int VideoDenoise[VideoResolutionMax];
|
||||||
|
|
||||||
/// Default amount of of sharpening, or blurring, to apply (-1000 .. 1000).
|
/// Default amount of sharpening, or blurring, to apply (-1000 .. 1000).
|
||||||
static int VideoSharpen[VideoResolutionMax];
|
static int VideoSharpen[VideoResolutionMax];
|
||||||
|
|
||||||
|
/// Default cut top and bottom in pixels
|
||||||
|
static int VideoCutTopBottom[VideoResolutionMax];
|
||||||
|
|
||||||
|
/// Default cut left and right in pixels
|
||||||
|
static int VideoCutLeftRight[VideoResolutionMax];
|
||||||
|
|
||||||
/// Color space ITU-R BT.601, ITU-R BT.709, ...
|
/// Color space ITU-R BT.601, ITU-R BT.709, ...
|
||||||
static const VideoColorSpace VideoColorSpaces[VideoResolutionMax] = {
|
static const VideoColorSpace VideoColorSpaces[VideoResolutionMax] = {
|
||||||
VideoColorSpaceBt601, VideoColorSpaceBt709, VideoColorSpaceBt709,
|
VideoColorSpaceBt601, VideoColorSpaceBt709, VideoColorSpaceBt709,
|
||||||
@ -438,9 +442,9 @@ static void VideoSetPts(int64_t * pts_p, int interlaced, const AVFrame * frame)
|
|||||||
/// @param input_aspect_ratio video stream aspect
|
/// @param input_aspect_ratio video stream aspect
|
||||||
///
|
///
|
||||||
static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
|
static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
|
||||||
int input_height, int *output_x, int *output_y, int *output_width,
|
int input_height, VideoResolutions resolution, int *output_x,
|
||||||
int *output_height, int *crop_x, int *crop_y, int *crop_width,
|
int *output_y, int *output_width, int *output_height, int *crop_x,
|
||||||
int *crop_height)
|
int *crop_y, int *crop_width, int *crop_height)
|
||||||
{
|
{
|
||||||
AVRational display_aspect_ratio;
|
AVRational display_aspect_ratio;
|
||||||
|
|
||||||
@ -464,10 +468,10 @@ static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
|
|||||||
Debug(3, "video: aspect %d:%d\n", display_aspect_ratio.num,
|
Debug(3, "video: aspect %d:%d\n", display_aspect_ratio.num,
|
||||||
display_aspect_ratio.den);
|
display_aspect_ratio.den);
|
||||||
|
|
||||||
*crop_x = VideoSkipPixels;
|
*crop_x = VideoCutLeftRight[resolution];
|
||||||
*crop_y = VideoSkipLines;
|
*crop_y = VideoCutTopBottom[resolution];
|
||||||
*crop_width = input_width - VideoSkipPixels * 2;
|
*crop_width = input_width - VideoCutLeftRight[resolution] * 2;
|
||||||
*crop_height = input_height - VideoSkipLines * 2;
|
*crop_height = input_height - VideoCutTopBottom[resolution] * 2;
|
||||||
|
|
||||||
// FIXME: store different positions for the ratios
|
// FIXME: store different positions for the ratios
|
||||||
if (display_aspect_ratio.num == 4 && display_aspect_ratio.den == 3) {
|
if (display_aspect_ratio.num == 4 && display_aspect_ratio.den == 3) {
|
||||||
@ -525,14 +529,14 @@ static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
|
|||||||
if ((unsigned)*crop_width > VideoWindowWidth) {
|
if ((unsigned)*crop_width > VideoWindowWidth) {
|
||||||
*crop_height = input_height;
|
*crop_height = input_height;
|
||||||
|
|
||||||
// adjust scaiing
|
// adjust scaling
|
||||||
*crop_x = ((*crop_width - (signed)VideoWindowWidth) * input_width)
|
*crop_x = ((*crop_width - (signed)VideoWindowWidth) * input_width)
|
||||||
/ (2 * VideoWindowWidth);
|
/ (2 * VideoWindowWidth);
|
||||||
*crop_width = input_width - *crop_x * 2;
|
*crop_width = input_width - *crop_x * 2;
|
||||||
} else if ((unsigned)*crop_height > VideoWindowHeight) {
|
} else if ((unsigned)*crop_height > VideoWindowHeight) {
|
||||||
*crop_width = input_width;
|
*crop_width = input_width;
|
||||||
|
|
||||||
// adjust scaiing
|
// adjust scaling
|
||||||
*crop_y = ((*crop_height - (signed)VideoWindowHeight) * input_height)
|
*crop_y = ((*crop_height - (signed)VideoWindowHeight) * input_height)
|
||||||
/ (2 * VideoWindowHeight);
|
/ (2 * VideoWindowHeight);
|
||||||
*crop_height = input_height - *crop_y * 2;
|
*crop_height = input_height - *crop_y * 2;
|
||||||
@ -2155,9 +2159,10 @@ static void VaapiExit(void)
|
|||||||
static void VaapiUpdateOutput(VaapiDecoder * decoder)
|
static void VaapiUpdateOutput(VaapiDecoder * decoder)
|
||||||
{
|
{
|
||||||
VideoUpdateOutput(decoder->InputAspect, decoder->InputWidth,
|
VideoUpdateOutput(decoder->InputAspect, decoder->InputWidth,
|
||||||
decoder->InputHeight, &decoder->OutputX, &decoder->OutputY,
|
decoder->InputHeight, decoder->Resolution, &decoder->OutputX,
|
||||||
&decoder->OutputWidth, &decoder->OutputHeight, &decoder->CropX,
|
&decoder->OutputY, &decoder->OutputWidth, &decoder->OutputHeight,
|
||||||
&decoder->CropY, &decoder->CropWidth, &decoder->CropHeight);
|
&decoder->CropX, &decoder->CropY, &decoder->CropWidth,
|
||||||
|
&decoder->CropHeight);
|
||||||
#ifdef USE_AUTOCROP
|
#ifdef USE_AUTOCROP
|
||||||
decoder->AutoCrop->State = 0;
|
decoder->AutoCrop->State = 0;
|
||||||
decoder->AutoCrop->Count = AutoCropDelay;
|
decoder->AutoCrop->Count = AutoCropDelay;
|
||||||
@ -2900,9 +2905,11 @@ static void VaapiAutoCrop(VaapiDecoder * decoder)
|
|||||||
|
|
||||||
decoder->AutoCrop->State = next_state;
|
decoder->AutoCrop->State = next_state;
|
||||||
if (next_state) {
|
if (next_state) {
|
||||||
decoder->CropX = VideoSkipPixels;
|
decoder->CropX = VideoCutLeftRight[decoder->Resolution];
|
||||||
decoder->CropY = (next_state == 16 ? crop16 : crop14) + VideoSkipLines;
|
decoder->CropY =
|
||||||
decoder->CropWidth = decoder->InputWidth;
|
(next_state ==
|
||||||
|
16 ? crop16 : crop14) + VideoCutTopBottom[decoder->Resolution];
|
||||||
|
decoder->CropWidth = decoder->InputWidth - decoder->CropX * 2;
|
||||||
decoder->CropHeight = decoder->InputHeight - decoder->CropY * 2;
|
decoder->CropHeight = decoder->InputHeight - decoder->CropY * 2;
|
||||||
|
|
||||||
// FIXME: this overwrites user choosen output position
|
// FIXME: this overwrites user choosen output position
|
||||||
@ -4518,7 +4525,7 @@ static void VaapiSyncDecoder(VaapiDecoder * decoder)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return;
|
return; // fix gcc bug!
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -6326,9 +6333,10 @@ static void VdpauExit(void)
|
|||||||
static void VdpauUpdateOutput(VdpauDecoder * decoder)
|
static void VdpauUpdateOutput(VdpauDecoder * decoder)
|
||||||
{
|
{
|
||||||
VideoUpdateOutput(decoder->InputAspect, decoder->InputWidth,
|
VideoUpdateOutput(decoder->InputAspect, decoder->InputWidth,
|
||||||
decoder->InputHeight, &decoder->OutputX, &decoder->OutputY,
|
decoder->InputHeight, decoder->Resolution, &decoder->OutputX,
|
||||||
&decoder->OutputWidth, &decoder->OutputHeight, &decoder->CropX,
|
&decoder->OutputY, &decoder->OutputWidth, &decoder->OutputHeight,
|
||||||
&decoder->CropY, &decoder->CropWidth, &decoder->CropHeight);
|
&decoder->CropX, &decoder->CropY, &decoder->CropWidth,
|
||||||
|
&decoder->CropHeight);
|
||||||
#ifdef USE_AUTOCROP
|
#ifdef USE_AUTOCROP
|
||||||
decoder->AutoCrop->State = 0;
|
decoder->AutoCrop->State = 0;
|
||||||
decoder->AutoCrop->Count = AutoCropDelay;
|
decoder->AutoCrop->Count = AutoCropDelay;
|
||||||
@ -6543,10 +6551,12 @@ static enum PixelFormat Vdpau_get_format(VdpauDecoder * decoder,
|
|||||||
goto slow_path;
|
goto slow_path;
|
||||||
}
|
}
|
||||||
// FIXME: combine this with VdpauSetupOutput and software decoder part
|
// FIXME: combine this with VdpauSetupOutput and software decoder part
|
||||||
decoder->CropX = VideoSkipPixels;
|
decoder->CropX = VideoCutLeftRight[decoder->Resolution];
|
||||||
decoder->CropY = VideoSkipLines;
|
decoder->CropY = VideoCutTopBottom[decoder->Resolution];
|
||||||
decoder->CropWidth = video_ctx->width - VideoSkipPixels * 2;
|
decoder->CropWidth =
|
||||||
decoder->CropHeight = video_ctx->height - VideoSkipLines * 2;
|
video_ctx->width - VideoCutLeftRight[decoder->Resolution] * 2;
|
||||||
|
decoder->CropHeight =
|
||||||
|
video_ctx->height - VideoCutTopBottom[decoder->Resolution] * 2;
|
||||||
|
|
||||||
decoder->PixFmt = *fmt_idx;
|
decoder->PixFmt = *fmt_idx;
|
||||||
decoder->InputWidth = video_ctx->width;
|
decoder->InputWidth = video_ctx->width;
|
||||||
@ -6847,9 +6857,11 @@ static void VdpauAutoCrop(VdpauDecoder * decoder)
|
|||||||
|
|
||||||
decoder->AutoCrop->State = next_state;
|
decoder->AutoCrop->State = next_state;
|
||||||
if (next_state) {
|
if (next_state) {
|
||||||
decoder->CropX = VideoSkipPixels;
|
decoder->CropX = VideoCutLeftRight[decoder->Resolution];
|
||||||
decoder->CropY = (next_state == 16 ? crop16 : crop14) + VideoSkipLines;
|
decoder->CropY =
|
||||||
decoder->CropWidth = decoder->InputWidth;
|
(next_state ==
|
||||||
|
16 ? crop16 : crop14) + VideoCutTopBottom[decoder->Resolution];
|
||||||
|
decoder->CropWidth = decoder->InputWidth - decoder->CropX * 2;
|
||||||
decoder->CropHeight = decoder->InputHeight - decoder->CropY * 2;
|
decoder->CropHeight = decoder->InputHeight - decoder->CropY * 2;
|
||||||
|
|
||||||
// FIXME: this overwrites user choosen output position
|
// FIXME: this overwrites user choosen output position
|
||||||
@ -6870,10 +6882,12 @@ static void VdpauAutoCrop(VdpauDecoder * decoder)
|
|||||||
decoder->InputWidth, decoder->InputHeight, decoder->OutputWidth,
|
decoder->InputWidth, decoder->InputHeight, decoder->OutputWidth,
|
||||||
decoder->OutputHeight, decoder->OutputX, decoder->OutputY);
|
decoder->OutputHeight, decoder->OutputX, decoder->OutputY);
|
||||||
} else {
|
} else {
|
||||||
decoder->CropX = VideoSkipPixels;
|
decoder->CropX = VideoCutLeftRight[decoder->Resolution];
|
||||||
decoder->CropY = VideoSkipLines;
|
decoder->CropY = VideoCutTopBottom[decoder->Resolution];
|
||||||
decoder->CropWidth = decoder->InputWidth - VideoSkipPixels * 2;
|
decoder->CropWidth =
|
||||||
decoder->CropHeight = decoder->InputHeight - VideoSkipLines * 2;
|
decoder->InputWidth - VideoCutLeftRight[decoder->Resolution] * 2;
|
||||||
|
decoder->CropHeight =
|
||||||
|
decoder->InputHeight - VideoCutTopBottom[decoder->Resolution] * 2;
|
||||||
|
|
||||||
// sets AutoCrop->Count
|
// sets AutoCrop->Count
|
||||||
VdpauUpdateOutput(decoder);
|
VdpauUpdateOutput(decoder);
|
||||||
@ -7082,10 +7096,12 @@ static void VdpauRenderFrame(VdpauDecoder * decoder,
|
|||||||
|| video_ctx->width != decoder->InputWidth
|
|| video_ctx->width != decoder->InputWidth
|
||||||
|| video_ctx->height != decoder->InputHeight) {
|
|| video_ctx->height != decoder->InputHeight) {
|
||||||
|
|
||||||
decoder->CropX = VideoSkipPixels;
|
decoder->CropX = VideoCutLeftRight[decoder->Resolution];
|
||||||
decoder->CropY = VideoSkipLines;
|
decoder->CropY = VideoCutTopBottom[decoder->Resolution];
|
||||||
decoder->CropWidth = video_ctx->width - VideoSkipPixels * 2;
|
decoder->CropWidth =
|
||||||
decoder->CropHeight = video_ctx->height - VideoSkipLines * 2;
|
video_ctx->width - VideoCutLeftRight[decoder->Resolution] * 2;
|
||||||
|
decoder->CropHeight =
|
||||||
|
video_ctx->height - VideoCutTopBottom[decoder->Resolution] * 2;
|
||||||
|
|
||||||
decoder->PixFmt = video_ctx->pix_fmt;
|
decoder->PixFmt = video_ctx->pix_fmt;
|
||||||
decoder->InputWidth = video_ctx->width;
|
decoder->InputWidth = video_ctx->width;
|
||||||
@ -9708,23 +9724,29 @@ void VideoSetScaling(int mode[VideoResolutionMax])
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Set skip lines.
|
/// Set cut top and bottom.
|
||||||
///
|
///
|
||||||
/// @param lines lines in pixel
|
/// @param pixels table with VideoResolutionMax values
|
||||||
///
|
///
|
||||||
void VideoSetSkipLines(int lines)
|
void VideoSetCutTopBottom(int pixels[VideoResolutionMax])
|
||||||
{
|
{
|
||||||
VideoSkipLines = lines;
|
VideoCutTopBottom[0] = pixels[0];
|
||||||
|
VideoCutTopBottom[1] = pixels[1];
|
||||||
|
VideoCutTopBottom[2] = pixels[2];
|
||||||
|
VideoCutTopBottom[3] = pixels[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Set skip pixels.
|
/// Set cut left and right.
|
||||||
///
|
///
|
||||||
/// @param pixels pixels in pixel
|
/// @param pixels table with VideoResolutionMax values
|
||||||
///
|
///
|
||||||
void VideoSetSkipPixels(int pixels)
|
void VideoSetCutLeftRight(int pixels[VideoResolutionMax])
|
||||||
{
|
{
|
||||||
VideoSkipPixels = pixels;
|
VideoCutLeftRight[0] = pixels[0];
|
||||||
|
VideoCutLeftRight[1] = pixels[1];
|
||||||
|
VideoCutLeftRight[2] = pixels[2];
|
||||||
|
VideoCutLeftRight[3] = pixels[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
8
video.h
8
video.h
@ -119,11 +119,11 @@ extern void VideoSetDenoise(int[]);
|
|||||||
/// Set sharpen.
|
/// Set sharpen.
|
||||||
extern void VideoSetSharpen(int[]);
|
extern void VideoSetSharpen(int[]);
|
||||||
|
|
||||||
/// Set skip lines.
|
/// Set cut top and bottom.
|
||||||
extern void VideoSetSkipLines(int);
|
extern void VideoSetCutTopBottom(int[]);
|
||||||
|
|
||||||
/// Set skip pixels.
|
/// Set cut left and right.
|
||||||
extern void VideoSetSkipPixels(int);
|
extern void VideoSetCutLeftRight(int[]);
|
||||||
|
|
||||||
/// Set studio levels.
|
/// Set studio levels.
|
||||||
extern void VideoSetStudioLevels(int);
|
extern void VideoSetStudioLevels(int);
|
||||||
|
Loading…
Reference in New Issue
Block a user