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
26class 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