diff options
author | Johns <johns98@gmx.net> | 2011-12-29 17:47:21 +0100 |
---|---|---|
committer | Johns <johns98@gmx.net> | 2011-12-29 17:47:21 +0100 |
commit | 1f2d1d235e162b8913f381e426ce40540460485a (patch) | |
tree | bd9b50dcbbc768cae352c7ea4d80a91fc04e5ed4 | |
parent | f1792644685a6ba8f8233ae5b5f4a3faab35a1a3 (diff) | |
download | vdr-plugin-softhddevice-1f2d1d235e162b8913f381e426ce40540460485a.tar.gz vdr-plugin-softhddevice-1f2d1d235e162b8913f381e426ce40540460485a.tar.bz2 |
Vpdau displays black, when no video available.
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | softhddevice.cpp | 2 | ||||
-rw-r--r-- | video.c | 42 |
3 files changed, 42 insertions, 3 deletions
@@ -1,6 +1,7 @@ User johns Date: + Vdpau also displays a black surface, when no video is available. Fix bug: CodecVideoDecode destroys avpkt. Date: Thu Dec 29 00:55:57 CET 2011 diff --git a/softhddevice.cpp b/softhddevice.cpp index e8b9679..1dbff5f 100644 --- a/softhddevice.cpp +++ b/softhddevice.cpp @@ -39,7 +39,7 @@ extern "C" { ////////////////////////////////////////////////////////////////////////////// -static const char *const VERSION = "0.1.3"; +static const char *const VERSION = "0.1.4"; static const char *const DESCRIPTION = trNOOP("A software and GPU emulated HD device"); @@ -4661,6 +4661,44 @@ static void VdpauMixVideo(VdpauDecoder * decoder) } /// +/// Create and display a black empty surface. +/// +/// @param decoder VDPAU hw decoder +/// +static void VdpauBlackSurface(VdpauDecoder * decoder) +{ + VdpStatus status; + void *image; + void const *data[1]; + uint32_t pitches[1]; + VdpRect dst_rect; + + Debug(3, "video/vdpau: black surface\n"); + + // FIXME: clear video window area + (void)decoder; + + image = calloc(4, VideoWindowWidth * VideoWindowHeight); + + dst_rect.x0 = 0; + dst_rect.y0 = 0; + dst_rect.x1 = dst_rect.x0 + VideoWindowWidth; + dst_rect.y1 = dst_rect.y0 + VideoWindowHeight; + data[0] = image; + pitches[0] = VideoWindowWidth * 4; + + status = + VdpauOutputSurfacePutBitsNative(VdpauSurfacesRb[VdpauSurfaceIndex], + data, pitches, &dst_rect); + if (status != VDP_STATUS_OK) { + Error(_("video/vdpau: output surface put bits failed: %s\n"), + VdpauGetErrorString(status)); + } + + free(image); +} + +/// /// Advance displayed frame. /// static void VdpauAdvanceFrame(void) @@ -4755,8 +4793,8 @@ static void VdpauDisplayFrame(void) filled = atomic_read(&decoder->SurfacesFilled); // need 1 frame for progressive, 3 frames for interlaced if (filled < 1 + 2 * decoder->Interlaced) { - // FIXME: render black surface - // FIXME: or rewrite MixVideo to support less surfaces + // FIXME: rewrite MixVideo to support less surfaces + VdpauBlackSurface(decoder); continue; } |