Changeset 1640

Show
Ignore:
Timestamp:
2005-11-16 17:06:27 (3 years ago)
Author:
jkivlighn
Message:

-Preliminary video support. A widget is set up to embed the video in,
but right now it crashes randomly so that's commented out.
-Handle the gobject timeout better

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • annoamp/trunk/annoamp.py

    r1639 r1640  
    3434import string 
    3535 
     36class VideoWidget: 
     37    def __init__(self, drawingwidget, player): 
     38        self.drawing_widget = drawingwidget 
     39        self.drawing_widget.connect('destroy', self.destroy_cb) 
     40        self.drawing_widget.connect_after('realize', self.after_realize_cb) 
     41        self.drawing_widget.set_size_request(400,400) 
     42         
     43        self.player = player 
     44        self.imagesink = player.playbin.props.video_sink 
     45 
     46    def destroy_cb(self, da): 
     47        self.set_window_id(0L) 
     48 
     49    # Sort of a hack, but it works for now. 
     50    def after_realize_cb(self, window): 
     51        gobject.idle_add(self.frame_video_sink) 
     52 
     53    def frame_video_sink(self): 
     54        #self.drawing_widget.show() 
     55        #self.set_window_id(self.drawing_widget.window.xid) 
     56        pass 
     57         
     58    def set_window_id(self, xid): 
     59        #self.imagesink.set_xwindow_id(xid) 
     60        pass 
     61 
     62    def unframe_video_sink(self): 
     63        #self.drawing_widget.hide() 
     64        self.set_window_id(0L) 
     65 
    3666def destroy(widget, self): 
    3767        widget.get_parent_window().destroy() 
     
    4070        global loop 
    4171        loop.quit() 
    42          
     72 
     73def call_play(player): 
     74    videowidget.frame_video_sink() 
     75    player.play() 
     76 
    4377def play(widget): 
    4478    global player 
    4579    global playlist_view 
     80    global videowidget 
    4681 
    4782    if len(player.chapter_info) != 0: 
     
    5085            treemodel = playlist_view.get_model() 
    5186            player.switch_source( treemodel.get_value(treemodel.get_iter_first(),0), 0 ) 
    52         player.play(); 
     87        call_play(player) 
    5388     
    5489def pause(widget): 
     
    80115            history[old_file][0] = position 
    81116            playlist.set_value(treemodel.get_iter(player.current), 1, position) 
     117        videowidget.unframe_video_sink() 
    82118        player.switch_source(treemodel.get_value(parent_iter, 0), path[0]) 
    83119 
    84120    player.seek(treemodel.get_value(treemodel.get_iter(path), 1)) 
    85      
    86     player.play(
     121 
     122    call_play(player
    87123     
    88124def slider_seek_play(widget, event): 
    89125    global player 
    90126    value = widget.get_value() 
    91     player.play(
     127    call_play(player
    92128    player.seek(value) 
    93129     
     
    106142    global playlist 
    107143    global xml 
    108  
     144     
    109145    tree_selection = playlist_view.get_selection() 
    110146    if chapter == -1: 
     
    245281def get_history(): 
    246282    history = {} 
     283    file_obj = None 
    247284    try: 
    248285        file_obj = open(os.path.expanduser('~/.annoamp_history'), "r") 
     
    324361player.file_finish_callback = file_finish 
    325362 
     363videowidget = VideoWidget(xml.get_widget("drawingarea1"),player) 
     364 
    326365xml.get_widget("volume_scale").set_value(1*100/4) 
    327366history = get_history() 
  • annoamp/trunk/annocast.glade

    r1628 r1640  
    9191          <property name="expand">False</property> 
    9292          <property name="fill">False</property> 
     93        </packing> 
     94      </child> 
     95 
     96      <child> 
     97        <widget class="GtkDrawingArea" id="drawingarea1"> 
     98        </widget> 
     99        <packing> 
     100          <property name="padding">0</property> 
     101          <property name="expand">True</property> 
     102          <property name="fill">True</property> 
    93103        </packing> 
    94104      </child> 
  • annoamp/trunk/anxplayer.py

    r1639 r1640  
    4848        self.playbin = gst.element_factory_make ("playbin") 
    4949        self.playbin.props.audio_sink = gst.element_factory_make ("alsasink") 
    50         self.playbin.props.video_sink = gst.element_factory_make ("fakesink") 
     50        self.playbin.props.video_sink = gst.element_factory_make ("ximagesink") 
    5151 
    5252        self.bin.add (self.playbin) 
     
    6262        self.file_finish_callback = None 
    6363        self.duration = 0 
     64        self.timeout_id = -1 
    6465         
    6566        #Stores the following properties of a clip: 
     
    9192                        self.current_chapter_callback(self.current, -1) #inform the UI, but leave the self.pos alone 
    9293 
    93         if self.bin.get_state()[1] == gst.STATE_PAUSED: 
    94             return False 
    95         else: 
    96             return True 
     94        return True 
    9795 
    9896    def bus_call (self, bus, message): 
     
    204202 
    205203        print result 
    206         gobject.timeout_add(200, self.update_time) 
     204        if self.timeout_id == -1: 
     205            self.timeout_id = gobject.timeout_add(200, self.update_time) 
    207206         
    208207    def pause(self): 
     
    211210        result = self.bin.set_state(gst.STATE_PAUSED) 
    212211        self.bin.get_state() #block until the state is really changed 
     212         
     213        if self.timeout_id != -1: 
     214            gobject.source_remove(self.timeout_id) 
     215            self.timeout_id = -1 
    213216         
    214217    def seek(self,location):