flacenc + seek

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

flacenc + seek

Platon
hi guys!
I'm writing an audio encoder, and I'm having trouble.
When I encode an audio segment to flac, the encoder generates invalid file.

$./encoder.py
   (encoder.py:10109): GStreamer-CRITICAL **: _gst_util_uint64_scale: assertion `denom != 0' failed
   True
   eos

$ file dest.flac
   file dest.flac: MPEG ADTS, AAC, v2 LC, 24 kHz, stereo+center+LFE

Thanks
   Platon

#!/usr/bin/python

import pygst
pygst.require("0.10")
import gst
import gobject
import sys
from urllib import quote
from threading import Semaphore, Thread
FILE="/media/love/lossless/The Lovin' Spoonful/The Very Best Of/The Lovin' Spoonful - The Very Best Of.ape"

sem = Semaphore(0)
eos = Semaphore(0)
state = None
def on_message(bus, message):
t = message.type
src = message.src.get_name()
global sem,eos, state
if src == 'pipeline' and t == gst.MESSAGE_STATE_CHANGED:
os,ns,pn = message.parse_state_changed()
if ns == state:
state = None
sem.release()
elif t == gst.MESSAGE_EOS:
print "eos"
eos.release()
elif t == gst.MESSAGE_ERROR:
print "Error"
eos.release()
sem.release()
sys.exit(1)

def encode():
start = 3673626666666L
stop = 3785800000000L
pipeline = gst.element_factory_make("playbin", "pipeline")
pipeline.set_property("uri", '<a class="moz-txt-link-freetext" href="file://">file://' + quote(FILE) )
fakesink = gst.element_factory_make("fakesink", "fakesink")
abin = gst.Bin()

enc = gst.element_factory_make("flacenc", "encoder")
sink = gst.element_factory_make("filesink", "sink")
sink.set_property("location", "dest.flac")

abin.add(enc, sink)
gst.element_link_many(enc, sink)
sinkpad = enc.get_static_pad("sink")
abin.add_pad(gst.GhostPad('sink', sinkpad))

pipeline.set_property("audio-sink", abin)
pipeline.set_property("video-sink", fakesink)

bus = pipeline.get_bus()
bus.add_signal_watch()
bus.connect("message", on_message)


global state, sem
state = gst.STATE_PAUSED

pipeline.set_state(gst.STATE_NULL)
pipeline.set_state(gst.STATE_PAUSED)
sem.acquire()
print pipeline.seek(1.0, gst.Format(gst.FORMAT_TIME), gst.SEEK_FLAG_FLUSH, gst.SEEK_TYPE_SET, start, gst.SEEK_TYPE_SET, stop)

pipeline.set_state(gst.STATE_PLAYING)
eos.acquire()
pipeline.set_state(gst.STATE_NULL)
loop.quit()

gobject.threads_init()
loop = gobject.MainLoop()
Thread(target=encode).start()
loop.run()


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel