Sink or Swim - Carnegie Mellon University · 1998 Scientific and Technical Award Avid received an...

Preview:

Citation preview

Sink or Swim

Ivan Gevirtzivan@alum.mit.edu

|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

Oscar?

Yup!

1998 Scientific and Technical Award

Avid received an Oscar statuette representing the 1998 Scientific and Technical Award for the concept, design and engineering of the Avid Film Composer® system for motion picture editing.

http://www.imdb.com/event/ev0000003/1999http://fp.avid.com/pressroom/corp_bg.html

Data Streams

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

First published: March 10, 2006 http://www.ivanism.com/Articles/SinkorSwim.html

Pipe and Filter

|=========|| || Filter1 || ||=========|

|=========|| || Filter2 || ||=========|

|=========|| || Filter3 || ||=========|

|=========|| || Filter4 || ||=========|

|=========|| || Filter5 || ||=========|

-----

-- /-- \ --

-- \ -- /--

|=============|| |> >| ||=============|

|=============|| |< || ||=============|

|=============|| |> <| ||=============|

|=============|| |> >| ||=============|

|=============|| |> >| ||=============|

|=============|| |> <| ||=============|

|=============|| |> >| ||=============|

|===|| || >| ||===|

*disclaimer: neither complete nor to scale

|===|| |< >| ||===|

|===|| |> >| ||===|

|===|| |> >| ||===|

Media & PubSub & Streaming & Data

|=============|| |> >| ||=============|

|=============|| |< || ||=============|

|=============|| |> <| ||=============|

Media & PubSub & Streaming & Data

|=============|| |> >| ||=============|

|=============|| |> >| ||=============|

|=============|| |> <| ||=============|

|=============|| |> >| ||=============|

|===|| || >| ||===|

*disclaimer: neither complete nor to scale

|===|| |< >| ||===|

|===|| |> >| ||===|

|===|| |> >| ||===|

|=============|| |< || ||=============|

|=============|| |> <| ||=============|

|=============|| |> >| ||=============|

|=============|| |> >| ||=============|

|=============|| |> >| ||=============|

|=============|| |> <| ||=============|

|=============|| |> >| ||=============|

|===|| || >| ||===|

*disclaimer: neither complete nor to scale

|===|| |< >| ||===|

|===|| |> >| ||===|

|===|| |> >| ||===|

Media & PubSub & Streaming & Data

From Pipe and Filter ...

|=========|| || Filter1 || ||=========|

|=========|| || Filter2 || ||=========|

|=========|| || Filter3 || ||=========|

|=========|| || Filter4 || ||=========|

|=========|| || Filter5 || ||=========|

-----

-- /-- \ --

-- \ -- /--

… to Sink or Swim Puzzle Pieces!|=============|| || Stream >| ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Pusher >| ||=============|

Streaming Media Example

|=============|| timing loop |< Drain || ||=============| Sound Card

|=============|| timing loop |< Puller <| buffer ||=============| Codec

|=============|| |> Pool <| buffer ||=============| Jitter Buffer

|=============|| || Stream >| ||=============| NIC

|=============|| |> Pusher >| ||=============|Packet Handler

|=============|| || Stream >| ||=============| Sound Card

|=============|| |> Pusher >| ||=============| Network Sender

|=============|| |> Sink || ||=============| NIC

|=============|| |> Pusher >| ||=============| Packetizer

|=============|| |> Pusher >| ||=============| Codec

Live Podcaster

Podcast Listener

sink

|=============|| asynch. in |> || ||=============|

|=============|| || >| synch. out ||=============|

|=============|| |< synch. in || ||=============|

|=============|| || asynch. out <| ||=============|

sink

|=============|| asynch. in |> || ||=============|

|=============|| || >| synch. out ||=============|

|=============|| |< synch. in || ||=============|

|=============|| || asynch. out <| ||=============|

sink

|=============|| asynch. in |> || ||=============|

|=============|| || >| synch. out ||=============|

|=============|| |< synch. in || ||=============|

|=============|| || asynch. out <| ||=============|

a sink|=============|| timing loop |< synch. in *| ||=============|

a sink |=============|| |* asynch. out <| buffer ||=============|

a sink|=============|| timing loop |< synch. in *| ||=============|

|=============|| |* asynch. out <| buffer ||=============|

synch

|=============|| || asynch. out <| buffer ||=============|

|=============|| timing loop |< synch. in || ||=============|

|=============|| timing loop |< synch. in >| synch. out ||=============|

|=============|| asynch. in |> asynch. out <| buffer ||=============|

synch

|=============|| || >| synch. out ||=============|

|=============|| asynch. in |> || ||=============|

|=============|| timing loop |< synch. in >| synch. out ||=============|

|=============|| asynch. in |> asynch. out <| buffer ||=============|

synch

|=============|| || asynch. out <| buffer ||=============|

|=============|| timing loop |< synch. in || ||=============|

|=============|| timing loop |< synch. in >| synch. out ||=============|

|=============|| asynch. in |> asynch. out <| buffer ||=============|

|=============|| || >| synch. out ||=============|

|=============|| asynch. in |> || ||=============|

|=============|| timing loop |< synch. in >| synch. out ||=============|

|=============|| asynch. in |> asynch. out <| buffer ||=============|

(a)synch

|=============|| || Well <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| |> Pool <| buffer ||=============|

(a)synch

|=============|| || Well <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Puller <| buffer ||=============|

(a)synch

|=============|| || Well <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Puller <| buffer ||=============|

|=============|| || Well <| buffer ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| timing loop |< Puller <| buffer ||=============|

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

(a)synch

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Driver >| ||=============|

(a)synch

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Driver >| ||=============|

(a)synch

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

Formalized in Acme Studio

From Pipe and Filter ...

|=========|| || Filter1 || ||=========|

|=========|| || Filter2 || ||=========|

|=========|| || Filter3 || ||=========|

|=========|| || Filter4 || ||=========|

|=========|| || Filter5 || ||=========|

-----

-- /-- \ --

-- \ -- /--

… to Sink or Swim Puzzle Pieces!|=============|| || Stream >| ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| |> Pusher >| ||=============|

|=============|| || Well <| buffer ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| timing loop |< Puller <| buffer ||=============|

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

Next...

● More Shapes:○ 1 to many -- Diffusers?○ many to 1 -- Combiners?○ many to many -- ???

● Input to output ratios -- think gearbox!● Blocking behavior● Timing behavior

○ eg. underruns

|=============|> |> >> ||=============|

|=============|| >> >| >|=============|

|=============|| || Well <| buffer ||=============|

|=============|| |> Pool <| buffer ||=============|

|=============|| timing loop |< Drain || ||=============|

|=============|| timing loop |< Driver >| ||=============|

|=============|| timing loop |< Puller <| buffer ||=============|

|=============|| || Stream >| ||=============|

|=============|| |> Sink || ||=============|

|=============|| |> Pusher >| ||=============|

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Enhancing Pipe and Filter Diagrams

Ivan Gevirtzivan@alum.mit.edu

First published: March 10, 2006 http://www.ivanism.com/Articles/SinkorSwim.html

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Questions?

Ivan Gevirtzivan@alum.mit.edu

Enhancing Pipe and Filter Diagrams

Sink or Swim|============|| |> || ||============|

|==============|| |> <| ||==============|

Ivan Gevirtzivan@alum.mit.edu

Enhancing Pipe and Filter Diagrams

Recommended