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__