2006-06-23, 12:44 AM
If you can email a plugin that exhibits this problem to me at support@devnz.com, I'll give it a try.
2006-06-23, 12:44 AM
If you can email a plugin that exhibits this problem to me at support@devnz.com, I'll give it a try.
2006-06-23, 12:54 AM
If I figure it out I will post the answer. Thanks.
2006-09-14, 09:39 PM
Same problem here. Haven't tested other media playback, but needsRendering() never gets called if liveTV is playing.
My plugin is simple. It displays a menu of sleep timer values, e.g. "Not set," "10 minutes," "30 minutes," etc. Under the menu is the current status of the sleep timer, e.g. "GB-PVR will shut down in 8 minutes." If live TV is not playing in the background, my code in needsRendering() gets called every second or so. If live TV is playing in the background, my code in needsRendering() never gets called. That is, unless a keyboard event is fired. Maybe mouse events too. Haven't tested those. Interestingly, PluginHelperFactory.getPluginHelper().ForceRepaint() doesn't do anything either when live TV is playing. In my case, it's not a huge deal. Falling asleep with the TV on (or net radio or whatever) is kinda the whole point of the sleep timer. I'm not interested in sitting there watching the timer countdown. :-) This is my first GB-PVR plugin (just found this thing a couple days ago), so I can't say yet whether this anomaly is a bug. But it does seem fishy. :-)
WinTV PVR-150 / ATI X1600 512 / 3GHz P4 / 2GB RAM
2006-09-14, 11:39 PM
OK. Here's some more info.
I suspected perhaps the culprit was the GbpvrUiElements.Label helper class. So I went on and called Graphics.DrawString() directly. Oh, and I put some debugging messages in my implementation of render(). It actually does get called every second or so, even when live TV is playing. The catch is, even though render() gets called every second (assuming needsRendering() has been properly coded to return true when necessary), if live TV is running in the background, none of the GDI functions on the window graphics get executed. Or at least their changes aren't refreshed visibly. The short of it is, even calling Graphics.DrawString() directly doesn't work when live TV is running. Please see my specs below.
WinTV PVR-150 / ATI X1600 512 / 3GHz P4 / 2GB RAM
2006-09-14, 11:40 PM
Post Script: This is a fun little project. Love the slapdash-yet-earnest efforts at this endeavor. It's rare for me to find coding these days that's actually fun. Just coding for the sake of coding. :-)
WinTV PVR-150 / ATI X1600 512 / 3GHz P4 / 2GB RAM
2006-09-15, 02:31 AM
Is it a threading issue?
GBPVR 1.1.5 on
Pentium 4 2.0GHz PVR-350 NVidia GeForce 5200 TV-Out acheyne Wrote:Is it a threading issue? I don't think so. I'm using static bools as semaphores and whatnot. And like I said, needsRendering() gets called every second. And the value that's important to me (int RemainingMinutes) gets shuttled arround accurately (according to debug messages). But I've even tested it by removing all conditional processing and just hard-coding needsRendering() to always return true.
WinTV PVR-150 / ATI X1600 512 / 3GHz P4 / 2GB RAM
2006-09-18, 02:51 PM
What do you mean by video playing in the background? Do you mean that your plugin is running as an IVideoPlugin?
If so, do you ever see any OSDs? If GBPVR isn't configured correctly, or depending on your hardware, you might not see anything rendered on top of video. A friend of mine had this problem, and it turned out to be the ATI/VMR9 registry problem (documented on the Wiki). Try looking into that.
2006-09-18, 05:31 PM
Snarky Wrote:What do you mean by video playing in the background? Do you mean that your plugin is running as an IVideoPlugin?Nope. Although I have added it as one of the <VideoPluginX/> values, just to play around. But that's an unrelated subject. Quote:If so, do you ever see any OSDs?What exact is an OSD? I see it used a lot, and I just figured eventually its meaning would be revealed through context clues and whatnot. No dice. but let me take a guess: Is an OSD the proper term for stuff being displayed on top of video (such as, say, live TV)? Quote:If GBPVR isn't configured correctly, or depending on your hardware, you might not see anything rendered on top of video.Oh, no, no. I see stuff float over video. The mini-guide; and even my own sleep timer plugin. Both pop up just fine. What I'm saying here is that if GB-PVR is playing video ("in the background," from a UI perspective), the controls in my plugin don't get invalidated properly. Or maybe they do. But whatever the cause, they never get re-painted. Until a keyboard event is fired. Quote:A friend of mine had this problem, and it turned out to be the ATI/VMR9 registry problem (documented on the Wiki). Try looking into that.Thanks for checking. It's not really a display issue. I mean, it is. But it's not as if overlays aren't showing up on the video. That seems fine. It's the redrawing of the bitmaps (or lack thereof) that's causing the problem.
WinTV PVR-150 / ATI X1600 512 / 3GHz P4 / 2GB RAM
2006-09-19, 12:51 PM
I don't follow. You say that this problem occurs when GBPVR is playing video "in the background", but that your plugin is not running as an IVideoPlugin. As far as I am aware, the only way to run a plugin while video is playing is to run it as an IVideoPlugin. Am I missing something here?
Also, when a plugin is running as an IVideoPlugin, needsRendering() is irrelevant. As long as the plugin is active (having returned true when needsToBeShown() is polled), render() will be called every ~1 second. Check the IVP.rtf file for a fuller explanation. Yes, OSDs (On-Screen Displays) are controls and displays that are superimposed on a video screen. So if I understand you correctly, your plugin is active, running on top of video, and render() gets called every second, but you don't see the effects of it being drawn until after a keyboard event. That's odd. I wonder if it's something weird you're doing that's causing this. The "Hello World" plugin can easily be adapted to run on top of video. Can you try that, adding for example a counter ("Hello World 1", "Hello World 2", ...) that increments each time it is rendered, to see if the thing updates without your key input? Also, can you please post the code of your current render() method, and a log showing video starting, the plugin getting activated, render() getting called, etc. |
|
Possibly Related Threads… | |||||
Thread | Author | Replies | Views | Last Post | |
Recording Event | jrockow | 10 | 4,367 |
2014-07-28, 02:51 PM Last Post: jrockow |
|
GetRenderList() always called with "block-extras..." element in renderlist | alibert | 1 | 1,513 |
2012-06-18, 10:24 AM Last Post: sub |
|
Render order in Videos | Jaggy | 13 | 4,020 |
2011-10-12, 11:20 AM Last Post: mvallevand |
|
Timeline mouse navigation | Jaggy | 2 | 1,715 |
2011-09-18, 01:53 AM Last Post: Jaggy |
|
IScreenPlugin.Activate() being called twice | ACTCMS | 0 | 1,248 |
2011-06-03, 03:16 PM Last Post: ACTCMS |
|
Event codes | mvallevand | 10 | 3,505 |
2011-04-06, 04:26 AM Last Post: mvallevand |
|
"Rating" in cached event details xml | alibert | 74 | 14,691 |
2011-03-28, 01:06 AM Last Post: zehd |
|
STARTUP_COMPLETE event on NMT | alibert | 6 | 2,132 |
2011-02-12, 05:15 PM Last Post: sub |
|
How to render a graphical volume display in nPVR | McBainUK | 3 | 1,860 |
2010-12-13, 03:25 PM Last Post: imilne |
|
TV Guide Element Render order | Northpole | 0 | 1,207 |
2010-10-24, 04:11 PM Last Post: Northpole |