forked from chundongwang/untrunc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
track.h
77 lines (61 loc) · 2.05 KB
/
track.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
Untrunc - track.h
Untrunc is GPL software; you can freely distribute,
redistribute, modify & use under the terms of the GNU General
Public License; either version 2 or its successor.
Untrunc is distributed under the GPL "AS IS", without
any warranty; without the implied warranty of merchantability
or fitness for either an expressed or implied particular purpose.
Please see the included GNU General Public License (GPL) for
your rights and further details; see the file COPYING. If you
cannot, write to the Free Software Foundation, 59 Temple Place
Suite 330, Boston, MA 02111-1307, USA. Or www.fsf.org
Copyright 2010 Federico Ponchio
*/
#ifndef TRACK_H
#define TRACK_H
#include <vector>
#include <string>
class Atom;
class AVCodecContext;
class AVCodec;
class Codec {
public:
std::string name;
void parse(Atom *trak, std::vector<int> &offsets, Atom *mdat);
bool matchSample(unsigned char *start, int maxlength);
int getLength(unsigned char *start, int maxlength);
bool isKeyframe(unsigned char *start, int maxlength);
//used by: mp4a
int mask1;
int mask0;
AVCodecContext *context;
AVCodec *codec;
};
class Track {
public:
Atom *trak;
int timescale;
int duration;
Codec codec;
std::vector<int> times;
std::vector<int> offsets;
std::vector<int> sizes;
std::vector<int> keyframes; //0 based!
Track(): trak(0) {}
void parse(Atom *trak, Atom *mdat);
void writeToAtoms();
void clear();
void fixTimes();
std::vector<int> getSampleTimes(Atom *t);
std::vector<int> getKeyframes(Atom *t);
std::vector<int> getSampleSizes(Atom *t);
std::vector<int> getChunkOffsets(Atom *t);
std::vector<int> getSampleToChunk(Atom *t, int nchunks);
void saveSampleTimes();
void saveKeyframes();
void saveSampleToChunk();
void saveSampleSizes();
void saveChunkOffsets();
};
#endif // TRACK_H