FileWriter.h

00001 //           ///          //                                  C++ Cross Platform
00002 //          /////        ////
00003 //         /// XXX     XXX ///            ///////////   /////////     ///   ///
00004 //        ///    XXX XXX    ///         ///             ///    ///   ///  ///
00005 //       ///       XXX       ///         /////////     ///      //  //////
00006 //      ///      XXX XXX      ///               ///   ///    ///   ///  ///
00007 //     ////    XXX     XXX    ////    ////////////  //////////    ///   ///
00008 //    ////                     ////
00009 //   ////  M  O  B  O  T  I  X  ////////////////////////////////////////////////
00010 //  //// Security Vision Systems //////////////////////////////////////////////
00011 //
00012 //  $Author: khe_admin $
00013 //  $LastChangedBy: khe_admin $
00014 //  $LastChangedDate: 2007-06-29 15:34:53 +0200 (Fri, 29 Jun 2007) $
00015 //  $HeadURL: http://svn.mobotix.net/svn/mxsdk/src/IOKitComponent/trunk/include/FileWriter.h $
00016 //
00018      //
00019      //  MOBOTIX MxPEG SDK
00020      //
00021      //  This file belongs to the C++ library released as part of the MxPEG SDK.
00022      //
00023      //  This software is licenced under the BSD licence,
00024      //  http://www.opensource.org/licenses/bsd-license.php
00025      //
00026      //  Copyright (c) 2005 - 2007, MOBOTIX AG
00027      //  All rights reserved.
00028      //
00029      //  Redistribution and use in source and binary forms, with or without
00030      //  modification, are permitted provided that the following conditions are
00031      //  met:
00032      //
00033      //  - Redistributions of source code must retain the above copyright
00034      //    notice, this list of conditions and the following disclaimer.
00035      //
00036      //  - Redistributions in binary form must reproduce the above copyright
00037      //    notice, this list of conditions and the following disclaimer in the
00038      //    documentation and/or other materials provided with the distribution.
00039      //
00040      //  - Neither the name of MOBOTIX AG nor the names of its contributors may
00041      //    be used to endorse or promote products derived from this software
00042      //    without specific prior written permission.
00043      //
00044      //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00045      //  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00046      //  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00047      //  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00048      //  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00049      //  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00050      //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00051      //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00052      //  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00053      //  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00054      //  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00055      //
00057 
00058 
00059 
00060 #ifndef __MX_FILEWRITER_H__
00061 #define __MX_FILEWRITER_H__
00062 
00063 
00064 
00065 #define MX_FILEWRITER_ID "FileWriter"
00066 
00067 
00068 
00069 #include "StreamFile.h"
00070 
00071 #include <interfaces/IFileWriter.h>
00072 #include <interfaces/IComponent.h>
00073 #include <interfaces/IComponentInvoker.h>
00074 
00075 #include <Framework/Framework.h>
00076 
00077 #include <mxm/core/mxmObject.h>
00078 
00079 
00080 
00081 namespace mx {
00082    
00084 
00089    class FileWriter : public mxmObject,
00090                       public virtual IComponent,
00091                       public virtual IFileWriter {
00092       
00096     private:
00097       static mxm::smart<mxmStringList> _enumerateInterfaces() {
00098          return(new mxmStringList(
00099                        (mxmString(MX_FILEWRITER_ID),
00100                         MX_ICOMPONENT_ID,
00101                         MX_IFILEWRITER_ID,
00102                         MX_ISUPPORTSFILESPECIFICATION_ID,
00103                         MX_ISEGMENTEDSTREAMRECEIVER_ID,
00104                         MX_ISTREAMRECEIVER_ID,
00105                         MX_IERRORSTATE_ID)));
00106       }
00107       static mxm::smart<mxmStringList> _enumerateCapabilities(
00108                                           const mxmString &interface_id) {
00109          if(interface_id == mx::Framework::IdHintKey)
00110           return(new mxmStringList(MX_FILEWRITER_ID));
00111          else
00112           return(new mxmStringList());
00113       }
00114     private:
00115       class Invoker : public mxmObject, public virtual IComponentInvoker {
00116        public:
00117          mxm::smart<mxmStringList> enumerateInterfaces() {
00118             return(_enumerateInterfaces());
00119          }
00120          mxm::smart<mxmStringList> enumerateCapabilities(
00121                                       const mxmString &interface_id) {
00122             return(_enumerateCapabilities(interface_id));
00123          }
00124          IComponent *newComponent() {
00125             return(new FileWriter());
00126          }
00127       };
00128     public:
00130       static IComponentInvoker *newInvoker() {
00131          return(new Invoker());
00132       }
00133       
00134     private:
00135       mxmString Filename;
00136       int       FileDescriptor;
00137       mxm::smart<mx::StreamFile> File;
00138       bool IndividualFileMode;
00139       int  IndividualFileNum;
00140       int  IndividualFileCounter;
00141       mxmString Separator;
00142       bool ErrorEncountered;
00143       bool Fresh,
00144            FreshSegment;
00145       bool HasBeenShutDown;
00146       
00147     public:
00148       FileWriter();
00149       ~FileWriter();
00150       
00151     public:
00153       mxm::smart<mxmStringList> enumerateInterfaces();
00155       mxm::smart<mxmStringList> enumerateCapabilities(
00156                                    const mxmString &interface);
00157       
00159       void setFilename(const mxmString &filename);
00161       void setFileDescriptor(int fd);
00162       
00164       void receiveStreamBytes(const mxm::u8 *bytes, int byte_num);
00166       void newStreamSegment();
00167       
00169       void writeSingleConcatenatedFile();
00171       void setSegmentSeparator(const mxmString &separator);
00173       void writeIndividualFiles(int num);
00174       
00176       bool errorState();
00178       void setErrorState();
00180       void shutdown();
00181       
00182     private:
00183       void openFile();
00184       void closeFile();
00185       void reset(bool safe_settings = false);
00186    };
00187 };
00188 
00189 
00190 
00191 #endif   // __MX_FILEWRITER_H__

Generated on Fri Jun 29 17:21:04 2007 for MxPEG SDK by  doxygen 1.4.6