| 504 | return self.resolution |
| 505 | |
| 506 | class ResyncBin(gst.Bin): |
| 507 | def __init__(self, sync_points, maxdiff): |
| 508 | self.__gobject_init__() |
| 509 | |
| 510 | self.parsefactories = self._find_parsers() |
| 511 | self.parsers = [] |
| 512 | |
| 513 | self.demux = gst.element_factory_make('oggdemux') |
| 514 | self.mux = gst.element_factory_make('oggmux') |
| 515 | |
| 516 | self.add(self.demux, self.mux) |
| 517 | |
| 518 | self.add_pad(gst.GhostPad('sink', self.demux.get_pad('sink'))) |
| 519 | self.add_pad(gst.GhostPad('src', self.mux.get_pad('src'))) |
| 520 | |
| 521 | self.demux.connect('pad-added', self._new_demuxed_pad) |
| 522 | |
| 523 | self.sync_points = sync_points |
| 524 | self.maxdiff = maxdiff |
| 525 | |
| 526 | def _find_parsers(self): |
| 527 | registry = gst.registry_get_default() |
| 528 | ret = {} |
| 529 | for f in registry.get_feature_list(gst.ElementFactory): |
| 530 | if f.get_klass().find('Parser') >= 0: |
| 531 | for t in f.get_static_pad_templates(): |
| 532 | if t.direction == gst.PAD_SINK: |
| 533 | for s in t.get_caps(): |
| 534 | ret[s.get_name()] = f.get_name() |
| 535 | break |
| 536 | return ret |
| 537 | |
| 538 | def _new_demuxed_pad(self, element, pad): |
| 539 | format = pad.get_caps()[0].get_name() |
| 540 | |
| 541 | if format not in self.parsefactories: |
| 542 | self.async_error("Unsupported media type: %s", format) |
| 543 | return |
| 544 | |
| 545 | queue = gst.element_factory_make('queue', 'queue_' + format) |
| 546 | queue.set_property('max-size-buffers', 0) |
| 547 | queue.set_property('max-size-bytes', 0) |
| 548 | print self.maxdiff |
| 549 | queue.set_property('max-size-time', int(self.maxdiff * 1.5)) |
| 550 | parser = gst.element_factory_make(self.parsefactories[format]) |
| 551 | self.add(queue) |
| 552 | self.add(parser) |
| 553 | queue.set_state(gst.STATE_PAUSED) |
| 554 | parser.set_state(gst.STATE_PAUSED) |
| 555 | pad.link(queue.get_compatible_pad(pad)) |
| 556 | queue.link(parser) |
| 557 | parser.link(self.mux) |
| 558 | self.parsers.append(parser) |
| 559 | |
| 560 | print repr(self.sync_points) |
| 561 | |
| 562 | if 'video' in format: |
| 563 | parser.set_property('synchronization-points', |