Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > f0a9f2b9c81d34eadc43f527947c0b70 > files > 107

libgstreamer0.7-devel-0.7.4-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML
><HEAD
><TITLE
>Goals</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REL="HOME"
TITLE="GStreamer Application Development Manual"
HREF="index.html"><LINK
REL="UP"
TITLE="Overview"
HREF="part-overview.html"><LINK
REL="PREVIOUS"
TITLE="Motivation"
HREF="chapter-motivation.html"><LINK
REL="NEXT"
TITLE="Basic Concepts"
HREF="part-basic-concepts.html"></HEAD
><BODY
CLASS="chapter"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
><SPAN
CLASS="application"
>GStreamer</SPAN
> Application Development Manual</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="chapter-motivation.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="part-basic-concepts.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="chapter-goals"
></A
>Chapter 3. Goals</H1
><P
> 
    GStreamer was designed to provide a solution to the current Linux media
    problems.
  </P
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="section-goals-design"
>3.1. The design goals</A
></H1
><P
> 
      We describe what we try to achieve with GStreamer.
    </P
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-clean"
>3.1.1. Clean and powerful</A
></H2
><P
>&#13;        GStreamer wants to provide a clean interface to:
      </P
><P
></P
><UL
><LI
><P
>&#13;	    The application programmer who wants to build a media pipeline. 
	    The programmer can use an extensive set of powerful tools to create
	    media pipelines without writing a single line of code. Performing 
	    complex media manipulations becomes very easy.
	  </P
></LI
><LI
><P
>&#13;	    The plugin programmer. Plugin programmers are provided a clean and
	    simple API to create self contained plugins. An extensive debugging
	    and tracing mechanism has been integrated. GStreamer also comes with
	    an extensive set of real-life plugins that serve as an example too.
	  </P
></LI
></UL
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-object"
>3.1.2. Object oriented</A
></H2
><P
>&#13;        GStreamer adheres to the GLib 2.0 object model. A programmer familiar with GLib 2.0 or older versions
	of GTK+ will be comfortable with GStreamer.
      </P
><P
>&#13;        GStreamer uses the mechanism of signals and object properties. 
      </P
><P
>&#13;        All objects can be queried at runtime for their various properties and
	capabilities.
      </P
><P
>&#13;        GStreamer intends to be similar in programming methodology to GTK+.
	This applies to the object model, ownership of objects, reference
        counting, ...
      </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-extensible"
>3.1.3. Extensible</A
></H2
><P
> 
	All GStreamer Objects can be extended using the GObject inheritance methods.
      </P
><P
> 
        All plugins are loaded dynamically and can be extended and upgraded
	independently.
      </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-binary"
>3.1.4. Allow binary only plugins</A
></H2
><P
>&#13;        Plugins are shared libraries that are loaded at runtime. Since all the properties of the
	plugin can be set using the GObject properties, there is no need (and in fact no way) to
	have any header files installed for the plugins.
      </P
><P
> 
        Special care has been taken to make plugins completely selfcontained. 
        All relevant aspects of plugins can be queried at run-time.
      </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-performance"
>3.1.5. High performance</A
></H2
><P
> 
        High performance is obtained by:
      </P
><P
></P
><UL
><LI
><P
>&#13;	    using GLib's <CODE
CLASS="function"
>g_mem_chunk</CODE
> and fast non-blocking allocation algorithms 
	    where possible to minimize dynamic memory allocation.
	  </P
></LI
><LI
><P
>&#13;	    extremely light-weight links between plugins. Data can travel
	    the pipeline with minimal overhead. Data passing between plugins only involves
	    a pointer dereference in a typical pipeline.
	  </P
></LI
><LI
><P
>&#13;	    providing a mechanism to directly work on the target memory. A plugin can for example
	    directly write to the X server's shared memory space. Buffers can also point to
	    arbitrary memory, such as a sound card's internal hardware buffer.
	  </P
></LI
><LI
><P
>&#13;	    refcounting and copy on write minimize usage of memcpy.
	    Sub-buffers efficiently split buffers into manageable pieces.
	  </P
></LI
><LI
><P
>&#13;	    the use of cothreads to minimize the threading overhead. Cothreads are a simple and fast
	    user-space method for switching between subtasks. Cothreads were measured  to
	    consume as little as 600 cpu cycles.
	  </P
></LI
><LI
><P
>&#13;	    allowing hardware acceleration by using specialized plugins.
	  </P
></LI
><LI
><P
>&#13;	    using a plugin registry with the specifications of the plugins so 
	    that the plugin loading can be delayed until the plugin is actually
	    used.
	  </P
></LI
><LI
><P
>&#13;	    all critical data passing is free of locks and mutexes.
	  </P
></LI
></UL
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-separation"
>3.1.6. Clean core/plugins separation</A
></H2
><P
>&#13;        The core of GStreamer is essentially media-agnostic.  It only knows
        about bytes and blocks, and only contains basic elements.
        The core of GStreamer is functional enough to even implement low-level
        system tools, like cp.
      </P
><P
>&#13;        All of the media handling functionality is provided by plugins external
        to the core.  These tell the core how to handle specific types of media.
      </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="section-goals-testbed"
>3.1.7. Provide a framework for codec experimentation</A
></H2
><P
>&#13;	GStreamer also wants to be an easy framework where codec
	developers can experiment with different algorithms, speeding up
	the development of open and free multimedia codecs like <A
HREF="http://www.xiph.org/ogg/index.html"
TARGET="_top"
>tarkin and
	vorbis</A
>.
      </P
><P
>&#13;	GStreamer also wants to be an easy framework where codec
	developers can experiment with different algorithms, speeding up
	the development of open and free multimedia codecs like <A
HREF="http://www.xiph.org/ogg/index.html"
TARGET="_top"
>tarkin and
	vorbis</A
>.
      </P
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="chapter-motivation.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="part-basic-concepts.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Motivation</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="part-overview.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Basic Concepts</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>