CuteLogger
Fast and simple logging solution for Qt based applications
box.h
1 #pragma once
2 /*****************************************************************************
3  *
4  * Copyright 2016 Varol Okan. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  ****************************************************************************/
19 
20 // Tool for loading mpeg4 files and manipulating atoms.
21 #include <stdint.h>
22 #include <vector>
23 
24 #include <fstream>
25 
26 class Box
27 {
28  public:
29  Box ( );
30  virtual ~Box ( );
31  virtual int32_t type ( );
32 
33  static Box *load ( std::fstream &, uint32_t, uint32_t );
34  static void clear ( std::vector<Box *> & );
35 
36  int content_start ( );
37  virtual void save ( std::fstream &, std::fstream &, int32_t );
38  void set ( uint8_t *, uint32_t );
39  int size ( );
40  const char *name( );
41  virtual void print_structure ( const char * );
42  void tag_copy ( std::fstream &, std::fstream &, int32_t );
43  void index_copy ( std::fstream &, std::fstream &, Box *, bool, int32_t );
44  void stco_copy ( std::fstream &, std::fstream &, Box *, int32_t );
45  void co64_copy ( std::fstream &, std::fstream &, Box *, int32_t );
46 
47  public:
48  static int8_t readInt8 ( std::fstream &fs );
49  static int16_t readInt16 ( std::fstream &fs );
50  static int32_t readInt32 ( std::fstream &fs );
51  static uint8_t readUint8 ( std::fstream &fs );
52  static uint32_t readUint32 ( std::fstream &fs );
53  static uint64_t readUint64 ( std::fstream &fs );
54  static double readDouble ( std::fstream &fs );
55 
56  static void writeInt16 ( std::fstream &fs, int16_t );
57  static void writeInt32 ( std::fstream &fs, int32_t );
58  static void writeUint8 ( std::fstream &fs, uint8_t );
59  static void writeUint32( std::fstream &fs, uint32_t );
60  static void writeUint64( std::fstream &fs, uint64_t );
61 
62  int32_t m_iType;
63 
64  private:
65  uint32_t uint32FromCont ( int32_t &iIDX );
66  uint64_t uint64FromCont ( int32_t &iIDX );
67  void index_copy_from_contents ( std::fstream &fsOut, Box *pBox, bool bBigMode, int32_t iDelta );
68 
69  public:
70  char m_name[4];
71  uint32_t m_iPosition;
72  uint32_t m_iHeaderSize;
73  uint32_t m_iContentSize;
74  uint8_t *m_pContents;
75 };
76