Re: [Freevo-devel] Recording TV
On Wed, Mar 05, 2003 at 07:55:05PM -0500, Brian J. Murrell wrote: I have lots of experience at this part. I hope I can help, at least with suggestions if not code. The latter will depend on my time. That works for me :) I must admit that I am still not using Freevo, but maybe that can change soon. How are you using the UI to choose recorded television program to watch? Are you just using the Movies menu? How do you know that you are watching program episodes in the order they were shown without any kind of date display or date sort on that menu? I have a folder under Watch Movies called 'Recording' and it contains the files that are recorded. The files are tagged by date and time, and then by show name and title. Like this: 03-02 9:00pm - The Simpsons - Treehouse of Horror XI 03-03 9:30pm - The Daily Show with John Stewart This really needs to be addressed, as well as the real-estate issue in general. I have ony used the default skin, but I find that it wastes too much screen space to eye candy and does not give enough space to the business at hand... choosing media to play. It would be nice if there were a no-nonesense, low-eye-candy-lots of well-used real-estate skin. Oh, with a scrollable media chooser. Next/Prev page just sucks. I'm not sure what space is wasted. On my screen I have an info bar on the top, a vertical menu on the right 2/3 of the screen and room for cover images on the left. In my hacked MP3 player, the cover image shows the album title, year and total track length under the cover. I have that written already, albeit in `C', for efficiency. If I get time (not hopeful) I might try re-writing it in Python just to test out my python skills. :-) Shouldn't be too bad; Python isn't usually slower than C in my experience, at least not in this type of application. And what happens if that adding causes conflicts? That is what my scheduler deals with. What /will/ happen is that scheduled shows (since they're processed in advance) will be highlighted in red in the TV guide, and if you want to record at that time, it'll cancel the scheduled record. The only thing I need to do to get that to work is to add that info to the record file. You need scoring for programs to help resolve conflicts in a way that you get what you want recorded and some heuristics to try and do the right thing. For instance, it has been my experience that programs that have episode titles normally, do not have them when the episode is a repeat. You want to decrease a programs score in that instance. Hmm... that might work, though in fairness, I'm not recording that much yet so conflicts haven't happened yet. The current model doesn't handle conflicts at all, but it's not impossible to do 1:1 conflicts. I'm not sure how to handle multiple conflicts without a logic like scoring. You also want to track what you have recorded, again for optimal conflict resolution. For instance, you do not want to record an episode of a program you have already seen at the expense of another show who's episode you have not seen. Scoring would probably help that; I would imagine that the Season Pass list would have scores, I'm not sure how to add them to the main recording menu without making it overly complex. I suppose we could set a default of, say, one below high priority. Conflict resolution _can_ be processor intensive. If you have a lot of programs in your wanted list, you will wind up with a large matrix of conflicts that you have to resolve by brute force. My experience (with my recording schedule) is that this is not an issue. It was in one of my early implementations but I found an optimization that reduced searches by many orders of magnitude. That I'd be interested in; because it sounds like the only way I would do it is to sort an array of shows by priority and pick the highest one. I will want one for lavrec, but that should be quite easy. Your encoder plugin model is like the record script from my OpenPVR project. Should be easy enough; just write a small python script and set a variable. Not watching live TV rules! 'Specially so when you take a couple of minutes before watching to remove all commercials. Then you sit and watch a whole program without having to touch the remote. I haven't done that, but mostly, hitting the 60 second fast forward handles most of the commercials. I don't know if I could watch shows and manually set commercial breaks, though, hypothetically, there is no reason it would be difficult, since we intercept the remote before it's passed to mplayer, and we could just split based on those breaks. It all revolves around a scheduling daemon. The daemon accepts inputs of several varieties. It will of course take a list of programs by name, but also by recurring date/time (I usually refer to this as timeslot programming and avoid it at all costs because it's unreliable) or simply by a one-time date/time specification.
Re: [Freevo-devel] Recording TV
--- Brian J. Murrell [EMAIL PROTECTED] escreveu: On Tue, Mar 04, 2003 at 01:12:33AM -0500, Aubin Paul wrote: This really needs to be addressed, as well as the real-estate issue in general. I have ony used the default skin, but I find that it wastes too much screen space to eye candy and does not give enough space to the business at hand... choosing media to play. It would be nice if there were a no-nonesense, low-eye-candy-lots of well-used real-estate skin. Oh, with a scrollable media chooser. Next/Prev page just sucks. Press d (DISPLAY) when in movies menu. You'll have a preliminary Extended Menu. In near future, that will be the default and you will have more menu states: text-listing, icon-listing + view + info, icon-listing. And text-listing should not use the submenu (Prev/Next) anymore. But I digress... 3. The last thing I'd like to see is a auto-scheduler based on program names. I have that written already, albeit in `C', for efficiency. If I get time (not hopeful) I might try re-writing it in Python just to test out my python skills. :-) What would happen ideally is that when the epg_xmltv.py is processing the guide (something I do at 3am) it looks for certain programme names in a file, and adds them to the record list. And what happens if that adding causes conflicts? That is what my scheduler deals with. A programme list file or Season Pass would look something like a file with line by line shows, when epg_xmltv.py runs, it would compare this list to the processed guide, and auto-schedule the favourites. You need scoring for programs to help resolve conflicts in a way that you get what you want recorded and some heuristics to try and do the right thing. For instance, it has been my experience that programs that have episode titles normally, do not have them when the episode is a repeat. You want to decrease a programs score in that instance. We'd add a line to the Record parameters menu called Record all (Show name) and then add that to a list, and use the pickled guide to add the days worth of stuff. You also want to track what you have recorded, again for optimal conflict resolution. For instance, you do not want to record an episode of a program you have already seen at the expense of another show who's episode you have not seen. Sure. This should be dead simple to add and if you process your guide in the middle of the night, almost invisible to the user. Conflict resolution _can_ be processor intensive. If you have a lot of programs in your wanted list, you will wind up with a large matrix of conflicts that you have to resolve by brute force. My experience (with my recording schedule) is that this is not an issue. It was in one of my early implementations but I found an optimization that reduced searches by many orders of magnitude. Great. I've started the plugin stuff for the different encoders, I have mp1e working now, but I want to make sure we have one for mencoder before I commit anything. I will want one for lavrec, but that should be quite easy. Your encoder plugin model is like the record script from my OpenPVR project. Last of all, let me just recommend the recording stuff to anyone who hasn't tried it. I don't think I've watched live television in a week! Not watching live TV rules! 'Specially so when you take a couple of minutes before watching to remove all commercials. Then you sit and watch a whole program without having to touch the remote. I have been thinking about recording architure design a bit. I used to think at and at jobs were sufficient to manage recording but I have since changed my mind. This is my idea of a recording framework: It all revolves around a scheduling daemon. The daemon accepts inputs of several varieties. It will of course take a list of programs by name, but also by recurring date/time (I usually refer to this as timeslot programming and avoid it at all costs because it's unreliable) or simply by a one-time date/time specification. The daemon re-evaluates the recording schedule after every input change and always has a chronological list of what's going to be recorded for as far out as it has information. If you have 2 weeks of XMLTV data, your scheduler will know what it's going to record for the next 2 weeks. Of course, what is going to record could change at any time due to new input (manual or XMLTV fed). Indeed, I would give it a whole new 2 week XMLTV schedule every day, to keep up with the programming changes that happen on North American television networks on a daily basis. But even entering a one-time programming request (with score) could change the schedule as a conflict resolution is performed after every input. The scheduling daemon is responsible for farming out recording jobs to one or more recording daemons on one or more (local and/or remote)
[Freevo-devel] Re: skin and gui interaction
Gustavo Sverzut Barbieri wrote: You can make this one work making the overlap area transparent on one layer. Or in this case, have the view and listing to be the same object. I've done that by having one background, one alpha and one content layer. Making view and listing one object isn't an option, if you start combining objects you can't re-use them. Right now I use the same view area code for the menu and for the mp3 player. As I said, we can make OPAQUE=true and have some transparent parts in the window IF we are sure that everything that's under our window will not change (or will not affect our window) Since aubin_round1 changes the background, we couldn't use any transparent objects -- not an option. The same? View and Listing change, for the view area the background changes based on the size of the image. Huh? Are you talking that it changes when I change from Images-Movies or it changes from inside the movie, when you select another item? aubin_round1 has different backgrounds for movie, audio, image and games. It's also possible that the user wants a folder specific background. No I haven't. I'm in my parents house and I have no Linux here :( Friday I'm home, so I'll test. Also, are you and Rob writing about your changes/innovations? As I'm out for few days I lost sync with your things :) I'm documenting my skin and the xml files will follow. About the OPAQUE, I think all the windows could be opaque for now. That's too easy, it's not the case with the current skins. Yes it is. We will only use OPAQUE=false when we have transparent popups or something like that. Actually when we want to have a popup shown AND the background changing. IMHO this will be used only with Applets and if we want these applets over the menu or something. You're free to try. I have five areas in my skin (screen, title, listing, view and info). Each area class inherits from a parent class in area.py and only does content specific stuff. These higher classes don't even use osd.drawXXX and call a function in area. By changing area.py you can change all areas. But I doubt that your area.py will be faster than mine. I made some ugly enhancements to speed up things. Making them all a monolitic GUIObject is ugly, maybe various GUIObjects put together with a Container is the best solution) and draw things like you do now, I see no problem too. I don't thing it's ugly. I see no reason why they all should be one GUIObject. And I don't really draw each area after another. I only save want they want to draw. After that, I check whats new and draw them at the same time. It's fast and I don't see one single reason why I should change it. Think about it that way: each area (== separate object) is a part of the whole screen (menuw == GUIObject). Calling it GUIObject and Container makes no difference. The point is we need a WM to handle focus and windows redrawing. Do you want to set a focus from listing to view area? The screen, info, view and title area don't need a focus, the whole menu needs one. That is done by making the menuw a GUIObject. Dischi -- The good thing about standards is that there are so many to choose from. -- Andrew S. Tanenbaum --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-devel
[Freevo-cvslog] freevo/src/gui GUIObject.py,1.8,1.9
Update of /cvsroot/freevo/freevo/src/gui In directory sc8-pr-cvs1:/tmp/cvs-serv15254 Modified Files: GUIObject.py Log Message: Remove the GUI object from the parent when the parent changes Index: GUIObject.py === RCS file: /cvsroot/freevo/freevo/src/gui/GUIObject.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** GUIObject.py5 Mar 2003 03:53:34 - 1.8 --- GUIObject.py6 Mar 2003 19:13:14 - 1.9 *** *** 8,11 --- 8,14 #--- # $Log$ + # Revision 1.9 2003/03/06 19:13:14 dischi + # Remove the GUI object from the parent when the parent changes + # # Revision 1.8 2003/03/05 03:53:34 rshortt # More work hooking skin properties into the GUI objects, and also making *** *** 387,390 --- 390,396 Set the parent of this widget + if self.parent != parent and self.parent and self in self.parent.children: + self.parent.children.remove(self) + self.parent = parent --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog
[Freevo-cvslog] freevo freevo_config.py,1.137,1.138
Update of /cvsroot/freevo/freevo In directory sc8-pr-cvs1:/tmp/cvs-serv22234 Modified Files: freevo_config.py Log Message: Added MPLAYER_ARGS_AUDIOCD Index: freevo_config.py === RCS file: /cvsroot/freevo/freevo/freevo_config.py,v retrieving revision 1.137 retrieving revision 1.138 diff -C2 -d -r1.137 -r1.138 *** freevo_config.py4 Mar 2003 05:43:39 - 1.137 --- freevo_config.py6 Mar 2003 21:39:32 - 1.138 *** *** 60,68 # is different, there will be only a warning ! FREEVO_CONF_VERSION = 1.0 LOCAL_CONF_VERSION = 2.0 # Description of changes in each new version ! FREEVO_CONF_CHANGES = [] # None yet LOCAL_CONF_CHANGES = [ (1.1, --- 60,71 # is different, there will be only a warning ! FREEVO_CONF_VERSION = 1.1 LOCAL_CONF_VERSION = 2.0 # Description of changes in each new version ! FREEVO_CONF_CHANGES = [ ! (1.1, ! '''Added MPLAYER_ARGS_AUDIOCD for aido cd playback settings.'''),] ! LOCAL_CONF_CHANGES = [ (1.1, *** *** 458,461 --- 461,465 MPLAYER_ARGS_TVVIEW = '-nocache' MPLAYER_ARGS_DVDNAV = '-dvdnav' + MPLAYER_ARGS_AUDIOCD = '-cache 500 -cdda speed=1' MPLAYER_USE_WID = 1 --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog
[Freevo-cvslog] freevo freevo_config.py,1.138,1.139
Update of /cvsroot/freevo/freevo In directory sc8-pr-cvs1:/tmp/cvs-serv23325 Modified Files: freevo_config.py Log Message: Arg Index: freevo_config.py === RCS file: /cvsroot/freevo/freevo/freevo_config.py,v retrieving revision 1.138 retrieving revision 1.139 diff -C2 -d -r1.138 -r1.139 *** freevo_config.py6 Mar 2003 21:39:32 - 1.138 --- freevo_config.py6 Mar 2003 21:42:07 - 1.139 *** *** 60,70 # is different, there will be only a warning ! FREEVO_CONF_VERSION = 1.1 ! LOCAL_CONF_VERSION = 2.0 # Description of changes in each new version ! FREEVO_CONF_CHANGES = [ ! (1.1, ! '''Added MPLAYER_ARGS_AUDIOCD for aido cd playback settings.'''),] LOCAL_CONF_CHANGES = [ --- 60,68 # is different, there will be only a warning ! FREEVO_CONF_VERSION = 1.0 ! LOCAL_CONF_VERSION = 2.1 # Description of changes in each new version ! FREEVO_CONF_CHANGES = [] # None so far LOCAL_CONF_CHANGES = [ *** *** 79,83 '''Remote control config has changed from Freevo Python files to the standard Lirc program config files, see freevo_config.py for ! more info.''')] --- 77,83 '''Remote control config has changed from Freevo Python files to the standard Lirc program config files, see freevo_config.py for ! more info.'''), ! (2.1, ! '''Added MPLAYER_ARGS_AUDIOCD for aido cd playback settings.''')] --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog
Re: [Freevo-devel] How to use PopupBox gui item?
Brian J. Murrell wrote: Problem is that I can't seem to use InputBox where I used to use PopupBox to display that folder was password protected. I get an error: Traceback (most recent call last): File src/main.py, line 604, in ? main_func() File src/main.py, line 826, in main_func File src/menu.py, line 492, in eventhandler action( menuw=self ) File src/mediamenu.py, line 441, in cwd skin.InputBox('Password Protected Folder') AttributeError: Skin instance has no attribute 'InputBox' So some hunting around suggests to me that when using the main1 skin, Popup box is defined skin_main1.py, not in the src/gui menu. That is the old PopupBox, which isn't an actual object but simply get drawn to the screen. So how do I take advantage of src/gui stuff? My guess is that I need to use a skin designed to use it. Am I correct? How do I go about doing that? Which skin(s) use the stuff in src/gui? Untill recently you could use the objects in src/gui regardless of what skin you had. Dischi is working on a new skin which provides some information about the skin configuration to the src/gui objects. These objects now make a call to the skin to configure the look feel, therefore they will only work with the new skin. The sin in progress is skins/dischi1/skin_dischi1.py. For examples of some of the gui code I have a modified audioitem.py which demontrates an object when play() is called. To see this go into WIP/RobShortt and make uitest. This will copy over your existing audioitem.py. Then just go 'play' an mp3 to get a popup. You may edit the audioitem.py and comment/uncomment lines in the play function to see some of the new objects in action. -Rob --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-devel
Re: [Freevo-devel] How to use PopupBox gui item?
Brian J. Murrell wrote: I have a few moments to resume some freevo hacking. First thing I want to do, now that I see that there is an InputBox GUI item, is implemenent the password protected folder idea I have. Also please ignore any problems with the object's graphics not drawing or updating cleanly as I am working on fixing that part. :) Also I don't think InputBox gets all of the skin properties that it should care about yet, a WIP. -Rob --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-devel
[Freevo-cvslog] freevo/src/gui LetterBox.py,1.2,1.3
Update of /cvsroot/freevo/freevo/src/gui In directory sc8-pr-cvs1:/tmp/cvs-serv20059 Modified Files: LetterBox.py Log Message: Just a quick fix to take care of redrawing when changing the letter and still seeing the previous letter though the alpha. I will have to come up with a better solution (probably using a bg_surface or something) when I hook this object up to the skin properties because if the non-selected bg_color has a transparency it will still be broken. Index: LetterBox.py === RCS file: /cvsroot/freevo/freevo/src/gui/LetterBox.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** LetterBox.py5 Mar 2003 03:53:34 - 1.2 --- LetterBox.py7 Mar 2003 00:19:58 - 1.3 *** *** 10,13 --- 10,20 # --- # $Log$ + # Revision 1.3 2003/03/07 00:19:58 rshortt + # Just a quick fix to take care of redrawing when changing the letter and still + # seeing the previous letter though the alpha. I will have to come up with + # a better solution (probably using a bg_surface or something) when I hook + # this object up to the skin properties because if the non-selected bg_color + # has a transparency it will still be broken. + # # Revision 1.2 2003/03/05 03:53:34 rshortt # More work hooking skin properties into the GUI objects, and also making *** *** 192,205 raise TypeError, 'Not all needed variables set.' if self.selected: c = self.selected_color.get_color_sdl() a = self.selected_color.get_alpha() ! else: ! c = self.bg_color.get_color_sdl() ! a = self.bg_color.get_alpha() - box = pygame.Surface(self.get_size(), 0, 32) - box.fill(c) - box.set_alpha(a) self.osd.screen.blit(box, self.get_position()) --- 199,216 raise TypeError, 'Not all needed variables set.' + box = pygame.Surface(self.get_size(), 0, 32) + c = self.bg_color.get_color_sdl() + a = self.bg_color.get_alpha() + box.fill(c) + box.set_alpha(a) + if self.selected: + sel_box = pygame.Surface(self.get_size(), 0, 32) c = self.selected_color.get_color_sdl() a = self.selected_color.get_alpha() ! sel_box.fill(c) ! sel_box.set_alpha(a) ! box.blit(sel_box, (0,0)) self.osd.screen.blit(box, self.get_position()) --- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com ___ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog