Create stub stream operator to bolt on fixing chunk timecodes
This commit is contained in:
parent
3e1bec93ee
commit
bad7b42e5b
2 changed files with 31 additions and 1 deletions
|
@ -6,6 +6,7 @@ use futures::future::FutureResult;
|
||||||
use futures::stream::{once, iter, Stream};
|
use futures::stream::{once, iter, Stream};
|
||||||
use lab_ebml::chunk::Chunk;
|
use lab_ebml::chunk::Chunk;
|
||||||
use lab_ebml::Schema;
|
use lab_ebml::Schema;
|
||||||
|
use lab_ebml::timecode_fixer::ChunkStream;
|
||||||
use lab_ebml::webm::*;
|
use lab_ebml::webm::*;
|
||||||
use lab_ebml::webm::WebmElement::*;
|
use lab_ebml::webm::WebmElement::*;
|
||||||
use hyper::{Get, StatusCode};
|
use hyper::{Get, StatusCode};
|
||||||
|
@ -36,6 +37,7 @@ impl Service for WebmServer {
|
||||||
once(Ok(self.0.clone()))
|
once(Ok(self.0.clone()))
|
||||||
.chain(iter(results.into_iter().cycle().take(20)))
|
.chain(iter(results.into_iter().cycle().take(20)))
|
||||||
.map_err(|_| hyper::Error::Incomplete)
|
.map_err(|_| hyper::Error::Incomplete)
|
||||||
|
.fix_timecodes()
|
||||||
);
|
);
|
||||||
Response::new()
|
Response::new()
|
||||||
.with_header(ContentType("video/webm".parse().unwrap()))
|
.with_header(ContentType("video/webm".parse().unwrap()))
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// TODO: (iterator? stream?) adapter that fixes SimpleBlock/Cluster timecodes
|
use chunk::Chunk;
|
||||||
|
use futures::Async;
|
||||||
|
use futures::stream::Stream;
|
||||||
use webm::WebmElement;
|
use webm::WebmElement;
|
||||||
|
|
||||||
pub struct TimecodeFixer {
|
pub struct TimecodeFixer {
|
||||||
|
@ -41,3 +43,29 @@ impl TimecodeFixer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct ChunkTimecodeFixer<S> {
|
||||||
|
stream: S
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S: Stream<Item = Chunk>> Stream for ChunkTimecodeFixer<S>
|
||||||
|
{
|
||||||
|
type Item = S::Item;
|
||||||
|
type Error = S::Error;
|
||||||
|
|
||||||
|
fn poll(&mut self) -> Result<Async<Option<Self::Item>>, Self::Error> {
|
||||||
|
self.stream.poll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ChunkStream<T> {
|
||||||
|
fn fix_timecodes(self) -> ChunkTimecodeFixer<T>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Stream<Item = Chunk>> ChunkStream<T> for T {
|
||||||
|
fn fix_timecodes(self) -> ChunkTimecodeFixer<T> {
|
||||||
|
ChunkTimecodeFixer {
|
||||||
|
stream: self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue