Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

mxcpcMxPEGDecoder.h

00001 //           ///          //                                        Mx clientSDK
00002 //          /////        ////                    Mx Crossplatform Client Library
00003 //         /// XXX     XXX ///
00004 //        ///    XXX XXX    ///     $RCSfile: mxcpcMxPEGDecoder.h,v $
00005 //       ///       XXX       ///     $Revision: 1.3 $
00006 //      ///      XXX XXX      ///     $Date: 2005/12/09 15:33:45 $
00007 //     ////    XXX     XXX    ////     $Author: cvs-kai $
00008 //    ////                     ////
00009 //   ////  M  O  B  O  T  I  X  ////////////////////////////////////////////////
00010 //  //// Security Vision Systems //////////////////////////////////////////////
00011 //                                                                          //
00012 //  Copyright (C) 2005 - 2006, MOBOTIX AG, Germany                         //
00013 //  This software is made available under the BSD licence. Please refer   //
00014 //  to the file LICENCE.TXT contained in this distribution for details.  //
00015 //                                                                      //
00016 //  /////////////////////////////////////////////////////////////////////
00017 
00018 
00019 
00020 #ifndef __MXCPC_MXPEGDECODER_H__
00021 #define __MXCPC_MXPEGDECODER_H__
00022 
00023 
00024 
00025 #include <mxcpcStreamDecoder.h>
00026 
00027 
00028 
00029 class mxcpcMxPEGDecoderBackEnd;
00030 
00031 
00032 
00033 //! MxPEG stream decoder.
00034 /*!
00035  *  \ingroup mxcpc_core
00036  *
00037  *  The new <tt>MxPEG</tt> decoder concept was designed to be portable and 
00038  *  modular. By <i>portable</i> we understand the codebase to be phrased 
00039  *  exclusively using standard C++ constructs, so that in contrast to the old 
00040  *  implementation that was infested virtually from head to toe with 
00041  *  <tt>MS Visual C++</tt> pecularities it will happily compile and run on all
00042  *  three major target platforms, being <tt>Windows</tt>, <tt>Linux</tt> and
00043  *  <tt>Mac OS X</tt>. By <i>modular</i> we refer to a clean object-oriented
00044  *  design, allowing the decoder to be easily configured and optimized for
00045  *  specific application settings by plugging together appropriate versions of
00046  *  decoding stages. A cellphone, for example, might be better off with a 
00047  *  decoder stage optimized for minimum memory consumtion rather than for 
00048  *  maximum decoder throughput, whereas workstation settings might rather enjoy
00049  *  the efficiency of a memory-hogging, all-out-performance version. 
00050  *
00051  *  To be more specific, the current <tt>MxPEG</tt> decoder implementation uses
00052  *  a three-stage approach:
00053  *  - The first stage is an implementation of a mxcpcStreamSource 
00054  *    representing - well - the source from where the decoder fetches the raw
00055  *    stream bytes. 
00056  *  - The second stage, the actual mxcpcMxPEGDecoder implementation, processes
00057  *    the raw stream data fetched from the stream source in a fashion that it 
00058  *    sees fit, and - as it goes along - emits signals containing decoded video 
00059  *    tiles and audio segments to the third stage.
00060  *  - The third and final stage, a specialized version of 
00061  *    mxcpcMxPEGDecoderBackEnd, accepts the aforementioned signals and decides
00062  *    what actually to do with the decoded video and audio data contained 
00063  *    therein. The point of the whole thing is that various interesting 
00064  *    scenarios are conceivable how in particular the decoded data can be 
00065  *    processed further, each of which allowing for its own ways of 
00066  *    streamlining the dataflow. To be most flexible in this respect, the 
00067  *    backend stage has also been given authority over the (memory) management
00068  *    of video and audio buffers. 
00069  *  
00070  *  \author Kai Hergenröther
00071  */
00072 class mxcpcMxPEGDecoder : public mxcpcStreamDecoder {
00073 
00074  protected:
00075   mxcpcMxPEGDecoderBackEnd *BackEnd;
00076 
00077  public:
00078   //! The decoder assumes ownership over both stream source and backend 
00079   //! objects.
00080   mxcpcMxPEGDecoder(mxcpcStreamSource *source,
00081                     mxcpcMxPEGDecoderBackEnd *backend);
00082   ~mxcpcMxPEGDecoder();      
00083   
00084  public:
00085   //! Returns a pointer to the <tt>MxPEG</tt> decoder's backend.
00086   mxcpcMxPEGDecoderBackEnd *getBackEnd(void);
00087 };
00088 
00089 
00090 
00091 #endif   // __MXCPC_MXPEGDECODER_H__

Generated on Mon Jan 30 15:13:07 2006 for mxcpc by  doxygen 1.4.4