mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
First video surface clears complete window.
This commit is contained in:
parent
d89ada9aad
commit
7e96a292eb
40
video.c
40
video.c
@ -5990,16 +5990,19 @@ static void VdpauDelHwDecoder(VdpauDecoder * decoder)
|
|||||||
for (i = 0; i < VdpauDecoderN; ++i) {
|
for (i = 0; i < VdpauDecoderN; ++i) {
|
||||||
if (VdpauDecoders[i] == decoder) {
|
if (VdpauDecoders[i] == decoder) {
|
||||||
VdpauDecoders[i] = NULL;
|
VdpauDecoders[i] = NULL;
|
||||||
VdpauDecoderN--;
|
// copy last slot into empty slot
|
||||||
// FIXME: must copy last slot into empty slot and --
|
if (i < --VdpauDecoderN) {
|
||||||
break;
|
VdpauDecoders[i] = VdpauDecoders[VdpauDecoderN];
|
||||||
|
}
|
||||||
|
|
||||||
|
VdpauCleanup(decoder);
|
||||||
|
VdpauPrintFrames(decoder);
|
||||||
|
free(decoder);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Error(_("video/vdpau: decoder not in decoder list.\n"));
|
||||||
VdpauCleanup(decoder);
|
|
||||||
VdpauPrintFrames(decoder);
|
|
||||||
|
|
||||||
free(decoder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -7652,8 +7655,9 @@ static void VdpauMixOsd(void)
|
|||||||
/// Render video surface to output surface.
|
/// Render video surface to output surface.
|
||||||
///
|
///
|
||||||
/// @param decoder VDPAU hw decoder
|
/// @param decoder VDPAU hw decoder
|
||||||
|
/// @param level video surface level 0 = bottom
|
||||||
///
|
///
|
||||||
static void VdpauMixVideo(VdpauDecoder * decoder)
|
static void VdpauMixVideo(VdpauDecoder * decoder, int level)
|
||||||
{
|
{
|
||||||
VdpVideoSurface current;
|
VdpVideoSurface current;
|
||||||
VdpRect video_src_rect;
|
VdpRect video_src_rect;
|
||||||
@ -7666,10 +7670,17 @@ static void VdpauMixVideo(VdpauDecoder * decoder)
|
|||||||
VdpauCheckAutoCrop(decoder);
|
VdpauCheckAutoCrop(decoder);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dst_rect.x0 = decoder->VideoX; // window output (clip)
|
if (level) {
|
||||||
dst_rect.y0 = decoder->VideoY;
|
dst_rect.x0 = decoder->VideoX; // video window output (clip)
|
||||||
dst_rect.x1 = decoder->VideoX + decoder->VideoWidth;
|
dst_rect.y0 = decoder->VideoY;
|
||||||
dst_rect.y1 = decoder->VideoY + decoder->VideoHeight;
|
dst_rect.x1 = decoder->VideoX + decoder->VideoWidth;
|
||||||
|
dst_rect.y1 = decoder->VideoY + decoder->VideoHeight;
|
||||||
|
} else {
|
||||||
|
dst_rect.x0 = 0; // complete window (clip)
|
||||||
|
dst_rect.y0 = 0;
|
||||||
|
dst_rect.x1 = VideoWindowWidth;
|
||||||
|
dst_rect.y1 = VideoWindowHeight;
|
||||||
|
}
|
||||||
|
|
||||||
video_src_rect.x0 = decoder->CropX; // video source (crop)
|
video_src_rect.x0 = decoder->CropX; // video source (crop)
|
||||||
video_src_rect.y0 = decoder->CropY;
|
video_src_rect.y0 = decoder->CropY;
|
||||||
@ -7813,6 +7824,7 @@ static void VdpauBlackSurface(VdpauDecoder * decoder)
|
|||||||
source_rect.x1 = 0;
|
source_rect.x1 = 0;
|
||||||
source_rect.y1 = 0;
|
source_rect.y1 = 0;
|
||||||
|
|
||||||
|
// FIXME: what happens with PIP?
|
||||||
if (0) {
|
if (0) {
|
||||||
// FIXME: wrong for radio channels
|
// FIXME: wrong for radio channels
|
||||||
output_rect.x0 = decoder->OutputX; // video output (scale)
|
output_rect.x0 = decoder->OutputX; // video output (scale)
|
||||||
@ -7938,7 +7950,7 @@ static void VdpauDisplayFrame(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
VdpauMixVideo(decoder);
|
VdpauMixVideo(decoder, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user