mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Fix bug: wrong aspect video size calculation.
This commit is contained in:
parent
8b57af53b6
commit
63d18ea488
1
Todo
1
Todo
@ -10,7 +10,6 @@ missing:
|
|||||||
|
|
||||||
vdpau:
|
vdpau:
|
||||||
1080i with temporal spatial too slow GT 520
|
1080i with temporal spatial too slow GT 520
|
||||||
Dr. Dish H264 black picture
|
|
||||||
|
|
||||||
libva-intel-driver:
|
libva-intel-driver:
|
||||||
intel still has hangups most with 1080i
|
intel still has hangups most with 1080i
|
||||||
|
56
video.c
56
video.c
@ -137,7 +137,7 @@ typedef enum _video_deinterlace_modes_
|
|||||||
} VideoDeinterlaceModes;
|
} VideoDeinterlaceModes;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Video scalinng modes.
|
/// Video scaleing modes.
|
||||||
///
|
///
|
||||||
typedef enum _video_scaling_modes_
|
typedef enum _video_scaling_modes_
|
||||||
{
|
{
|
||||||
@ -147,6 +147,17 @@ typedef enum _video_scaling_modes_
|
|||||||
VideoScalingAnamorphic, ///< anamorphic scaling
|
VideoScalingAnamorphic, ///< anamorphic scaling
|
||||||
} VideoScalingModes;
|
} VideoScalingModes;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Video zoom modes.
|
||||||
|
///
|
||||||
|
typedef enum _video_zoom_modes_
|
||||||
|
{
|
||||||
|
VideoNormal, ///< normal
|
||||||
|
VideoStretch, ///< stretch to all edges
|
||||||
|
VideoZoom, ///< zoom out
|
||||||
|
VideoAnamorphic, ///< anamorphic scaled (unsupported)
|
||||||
|
} VideoZoomModes;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
// Defines
|
// Defines
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -184,6 +195,9 @@ static VideoScalingModes VideoScaling;
|
|||||||
/// Default audio/video delay
|
/// Default audio/video delay
|
||||||
static int VideoAudioDelay;
|
static int VideoAudioDelay;
|
||||||
|
|
||||||
|
/// Default zoom mode
|
||||||
|
static VideoZoomModes Video4to3ZoomMode;
|
||||||
|
|
||||||
//static char VideoSoftStartSync; ///< soft start sync audio/video
|
//static char VideoSoftStartSync; ///< soft start sync audio/video
|
||||||
|
|
||||||
static char Video60HzMode; ///< handle 60hz displays
|
static char Video60HzMode; ///< handle 60hz displays
|
||||||
@ -1347,13 +1361,22 @@ static void VaapiUpdateOutput(VaapiDecoder * decoder)
|
|||||||
display_aspect_ratio.den);
|
display_aspect_ratio.den);
|
||||||
|
|
||||||
// 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) {
|
||||||
|
switch (Video4to3ZoomMode) {
|
||||||
|
case VideoNormal:
|
||||||
|
case VideoStretch:
|
||||||
|
case VideoZoom:
|
||||||
|
case VideoAnamorphic:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
decoder->OutputX = 0;
|
decoder->OutputX = 0;
|
||||||
decoder->OutputY = 0;
|
decoder->OutputY = 0;
|
||||||
decoder->OutputWidth = (VideoWindowHeight * display_aspect_ratio.num)
|
decoder->OutputWidth = (VideoWindowHeight * display_aspect_ratio.num)
|
||||||
/ display_aspect_ratio.den;
|
/ display_aspect_ratio.den;
|
||||||
decoder->OutputHeight = (VideoWindowWidth * display_aspect_ratio.num)
|
decoder->OutputHeight = (VideoWindowWidth * display_aspect_ratio.den)
|
||||||
/ display_aspect_ratio.den;
|
/ display_aspect_ratio.num;
|
||||||
if ((unsigned)decoder->OutputWidth > VideoWindowWidth) {
|
if ((unsigned)decoder->OutputWidth > VideoWindowWidth) {
|
||||||
decoder->OutputWidth = VideoWindowWidth;
|
decoder->OutputWidth = VideoWindowWidth;
|
||||||
decoder->OutputY = (VideoWindowHeight - decoder->OutputHeight) / 2;
|
decoder->OutputY = (VideoWindowHeight - decoder->OutputHeight) / 2;
|
||||||
@ -1361,6 +1384,8 @@ static void VaapiUpdateOutput(VaapiDecoder * decoder)
|
|||||||
decoder->OutputHeight = VideoWindowHeight;
|
decoder->OutputHeight = VideoWindowHeight;
|
||||||
decoder->OutputX = (VideoWindowWidth - decoder->OutputWidth) / 2;
|
decoder->OutputX = (VideoWindowWidth - decoder->OutputWidth) / 2;
|
||||||
}
|
}
|
||||||
|
Debug(3, "video: aspect output %dx%d+%d+%d\n", decoder->OutputWidth,
|
||||||
|
decoder->OutputHeight, decoder->OutputX, decoder->OutputY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3190,7 +3215,7 @@ static void VdpauCreateSurfaces(VdpauDecoder * decoder, int width, int height)
|
|||||||
VdpauGetErrorString(status));
|
VdpauGetErrorString(status));
|
||||||
// FIXME: no fatal
|
// FIXME: no fatal
|
||||||
}
|
}
|
||||||
Debug(3, "video/vdpau: created video surface %dx%d with id 0x%08x\n",
|
Debug(4, "video/vdpau: created video surface %dx%d with id 0x%08x\n",
|
||||||
width, height, decoder->SurfacesFree[i]);
|
width, height, decoder->SurfacesFree[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3950,6 +3975,8 @@ static void VdpauUpdateOutput(VdpauDecoder * decoder)
|
|||||||
AVRational display_aspect_ratio;
|
AVRational display_aspect_ratio;
|
||||||
|
|
||||||
input_aspect_ratio = decoder->InputAspect;
|
input_aspect_ratio = decoder->InputAspect;
|
||||||
|
Debug(3, "video: input aspect %d:%d\n", input_aspect_ratio.num,
|
||||||
|
input_aspect_ratio.den);
|
||||||
if (!input_aspect_ratio.num || !input_aspect_ratio.den) {
|
if (!input_aspect_ratio.num || !input_aspect_ratio.den) {
|
||||||
input_aspect_ratio.num = 1;
|
input_aspect_ratio.num = 1;
|
||||||
input_aspect_ratio.den = 1;
|
input_aspect_ratio.den = 1;
|
||||||
@ -3965,20 +3992,31 @@ static void VdpauUpdateOutput(VdpauDecoder * decoder)
|
|||||||
display_aspect_ratio.den);
|
display_aspect_ratio.den);
|
||||||
|
|
||||||
// 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) {
|
||||||
|
switch (Video4to3ZoomMode) {
|
||||||
|
case VideoNormal:
|
||||||
|
case VideoStretch:
|
||||||
|
case VideoZoom:
|
||||||
|
case VideoAnamorphic:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
decoder->OutputX = 0;
|
decoder->OutputX = 0;
|
||||||
decoder->OutputY = 0;
|
decoder->OutputY = 0;
|
||||||
decoder->OutputWidth = (VideoWindowHeight * display_aspect_ratio.num)
|
decoder->OutputWidth = (VideoWindowHeight * display_aspect_ratio.num)
|
||||||
/ display_aspect_ratio.den;
|
/ display_aspect_ratio.den;
|
||||||
decoder->OutputHeight = (VideoWindowWidth * display_aspect_ratio.num)
|
decoder->OutputHeight = (VideoWindowWidth * display_aspect_ratio.den)
|
||||||
/ display_aspect_ratio.den;
|
/ display_aspect_ratio.num;
|
||||||
if ((unsigned)decoder->OutputWidth > VideoWindowWidth) {
|
if ((unsigned)decoder->OutputWidth > VideoWindowWidth) {
|
||||||
decoder->OutputWidth = VideoWindowWidth;
|
decoder->OutputWidth = VideoWindowWidth;
|
||||||
decoder->OutputY = (VideoWindowHeight - decoder->OutputHeight) / 2;
|
decoder->OutputY = (VideoWindowHeight - decoder->OutputHeight) / 2;
|
||||||
} else {
|
} else if ((unsigned)decoder->OutputHeight > VideoWindowHeight) {
|
||||||
decoder->OutputHeight = VideoWindowHeight;
|
decoder->OutputHeight = VideoWindowHeight;
|
||||||
decoder->OutputX = (VideoWindowWidth - decoder->OutputWidth) / 2;
|
decoder->OutputX = (VideoWindowWidth - decoder->OutputWidth) / 2;
|
||||||
}
|
}
|
||||||
|
Debug(3, "video: aspect output %dx%d+%d+%d\n", decoder->OutputWidth,
|
||||||
|
decoder->OutputHeight, decoder->OutputX, decoder->OutputY);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -4063,6 +4101,10 @@ static enum PixelFormat Vdpau_get_format(VdpauDecoder * decoder,
|
|||||||
max_refs = CODEC_SURFACES_DEFAULT;
|
max_refs = CODEC_SURFACES_DEFAULT;
|
||||||
// check profile
|
// check profile
|
||||||
switch (video_ctx->codec_id) {
|
switch (video_ctx->codec_id) {
|
||||||
|
case CODEC_ID_MPEG1VIDEO:
|
||||||
|
max_refs = 2;
|
||||||
|
profile = VdpauCheckProfile(decoder, VDP_DECODER_PROFILE_MPEG1);
|
||||||
|
break;
|
||||||
case CODEC_ID_MPEG2VIDEO:
|
case CODEC_ID_MPEG2VIDEO:
|
||||||
max_refs = 2;
|
max_refs = 2;
|
||||||
profile =
|
profile =
|
||||||
|
Loading…
Reference in New Issue
Block a user