From: Guillaume Pellerin Date: Thu, 13 Feb 2014 23:49:20 +0000 (+0100) Subject: Item : fix pipe streaming against TimeSide 0.5.4 (thanks @thomasfillon !) X-Git-Tag: 1.4.6^2~38 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=d86d2d83c438092dc53220a9518faa21c9592ff8;p=telemeta.git Item : fix pipe streaming against TimeSide 0.5.4 (thanks @thomasfillon !) --- diff --git a/telemeta/views/core.py b/telemeta/views/core.py index f0821fe6..21d637b5 100644 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@ -122,17 +122,12 @@ def render(request, template, data = None, mimetype = None): return render_to_response(template, data, context_instance=RequestContext(request), mimetype=mimetype) -def stream_from_processor(decoder, proc, flag, metadata=None): - if metadata: - proc.set_metadata(metadata) - eod = False - while not eod: - frames, eod = proc.process(*decoder.process()) - yield proc.chunk +def stream_from_processor(decoder, encoder, flag): + pipe = decoder | encoder + for chunk in pipe.stream(): + yield chunk flag.value = True flag.save() - decoder.release() - proc.release() def stream_from_file(file): chunk_size = 0x100000 diff --git a/telemeta/views/item.py b/telemeta/views/item.py index c78344e9..501f886b 100644 --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@ -534,6 +534,7 @@ class ItemView(object): proc = encoder(source, overwrite=True) proc.set_metadata(metadata) try: + #FIXME: should test if metadata writer is available proc.write_metadata() except: pass @@ -543,13 +544,12 @@ class ItemView(object): if not self.cache_export.exists(file) or not flag.value: # source > encoder > stream decoder = timeside.decoder.FileDecoder(source) - decoder.setup() proc = encoder(media, streaming=True, overwrite=True) - proc.setup(channels=decoder.channels(), samplerate=decoder.samplerate(), - blocksize=decoder.blocksize(), totalframes=decoder.totalframes()) if extension in mapping.unavailable_extensions: metadata=None - response = HttpResponse(stream_from_processor(decoder, proc, flag, metadata=metadata), mimetype = mime_type) + proc.set_metadata(metadata) + + response = HttpResponse(stream_from_processor(decoder, proc, flag), mimetype = mime_type) else: # cache > stream response = HttpResponse(self.cache_export.read_stream_bin(file), mimetype = mime_type)