MP7File.hpp

00001 /*********************************************************************** 00002 * * 00003 * ViTooKi * 00004 * * 00005 * title: MP7File.hpp * 00006 * * 00007 * * 00008 * * 00009 * ITEC institute of the University of Klagenfurt (Austria) * 00010 * http://www.itec.uni-klu.ac.at * 00011 * * 00012 * * 00013 * For more information visit the ViTooKi homepage: * 00014 * http://ViTooKi.sourceforge.net * 00015 * vitooki-user@lists.sourceforge.net * 00016 * vitooki-devel@lists.sourceforge.net * 00017 * * 00018 * This file is part of ViTooKi, a free video toolkit. * 00019 * ViTooKi is free software; you can redistribute it and/or * 00020 * modify it under the terms of the GNU General Public License * 00021 * as published by the Free Software Foundation; either version 2 * 00022 * of the License, or (at your option) any later version. * 00023 * * 00024 * This program is distributed in the hope that it will be useful, * 00025 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00026 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00027 * GNU General Public License for more details. * 00028 * * 00029 * You should have received a copy of the GNU General Public License * 00030 * along with this program; if not, write to the Free Software * 00031 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * 00032 * MA 02111-1307, USA. * 00033 * * 00034 ***********************************************************************/ 00035 00036 /*********************************************************************** 00037 * * 00038 * REVISION HISTORY: * 00039 * * 00040 * * 00041 * * 00042 ***********************************************************************/ 00043 00044 #ifndef _PS_MP7FILE_ 00045 #define _PS_MP7FILE_ 00046 00047 #include <cstdio> 00048 #include <cstdlib> 00049 00050 #include "Adaptor.hpp" 00051 #include "../adaptors/TemporalAdaptor.hpp" 00052 #include "../adaptors/StrongTemporalAdaptor.hpp" 00053 00054 #ifdef ISOMP4 00055 #include "ISOMovies.h" 00056 #endif 00057 00058 class ContainerInfo; 00059 class ESInfo; 00060 00072 class MP7File { 00073 public: 00080 static char *generateMP7Description(ContainerInfo * mp4Info, 00081 char *mp7File, 00082 bool showVisualResult = false); 00083 00088 static bool setAdaptors(ContainerInfo * mp4Info, char *mp7File); 00089 00093 static bool convertMetaInfoToMP7(const ContainerInfo * mp4Info, 00094 char *mp7File); 00095 00099 static FILE *openMP7File(const char *mp7File); 00100 00102 static bool closeMP7File(FILE * fp); 00103 00108 static bool writeVariationSet(FILE * fp, Adaptor ** adaptor, 00109 int numAdaptors, ContainerInfo * mp4Info, 00110 bool showVisualResult = false); 00111 private: 00115 static void writeEntry(FILE * fp, u32 indent, const char *const key, 00116 bool close); 00117 00119 static void writeSimpleEntry(FILE * fp, u32 indent, 00120 const char *const key); 00121 00123 static u32 writeCMP(FILE * fp, u32 indent, ESInfo * es); 00124 00126 static u32 writeMediaInformation(FILE * fp, u32 indent, 00127 ContainerInfo * mp4); 00128 static void writeAdaptation(FILE * fp, u32 indent, 00129 ContainerInfo * mp4, const char* a, 00130 u32 variationId, u32 priority, 00131 float fidelity); 00132 static void writeVideoDescriptionEntry(FILE * fp, u32 indent, 00133 const char *const key, 00134 u32 intVal); 00135 static void writeVideoDescriptionEntry(FILE * fp, u32 indent, 00136 const char *const key, 00137 const char *stringVal); 00138 protected: 00139 static const char *const NL; 00140 static const char *const content; 00141 static const char *const name; 00142 static const char *const fileFormat; 00143 static const char *const variationSet; 00144 static const char *const fileSize; 00145 static const char *const mediaProfile; 00146 static const char *const componentMediaProfile; 00147 static const char *const bitRate; 00148 static const char *const mediaLocator; 00149 static const char *const preHeader; 00150 static const char *const closeHeader; 00151 }; 00152 00153 00154 #endif