FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
nut.c
Go to the documentation of this file.
1
/*
2
* nut
3
* Copyright (c) 2004-2007 Michael Niedermayer
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
libavutil/mathematics.h
"
23
#include "
libavutil/tree.h
"
24
#include "
nut.h
"
25
#include "
riff.h
"
26
#include "
internal.h
"
27
28
const
AVCodecTag
ff_nut_subtitle_tags
[] = {
29
{
AV_CODEC_ID_TEXT
,
MKTAG
(
'U'
,
'T'
,
'F'
,
'8'
) },
30
{
AV_CODEC_ID_SSA
,
MKTAG
(
'S'
,
'S'
,
'A'
, 0 ) },
31
{
AV_CODEC_ID_DVD_SUBTITLE
,
MKTAG
(
'D'
,
'V'
,
'D'
,
'S'
) },
32
{
AV_CODEC_ID_DVB_SUBTITLE
,
MKTAG
(
'D'
,
'V'
,
'B'
,
'S'
) },
33
{
AV_CODEC_ID_DVB_TELETEXT
,
MKTAG
(
'D'
,
'V'
,
'B'
,
'T'
) },
34
{
AV_CODEC_ID_NONE
, 0 }
35
};
36
37
const
AVCodecTag
ff_nut_data_tags
[] = {
38
{
AV_CODEC_ID_TEXT
,
MKTAG
(
'U'
,
'T'
,
'F'
,
'8'
) },
39
{
AV_CODEC_ID_NONE
, 0 }
40
};
41
42
const
AVCodecTag
ff_nut_video_tags
[] = {
43
{
AV_CODEC_ID_GIF
,
MKTAG
(
'G'
,
'I'
,
'F'
, 0 ) },
44
{
AV_CODEC_ID_XFACE
,
MKTAG
(
'X'
,
'F'
,
'A'
,
'C'
) },
45
{
AV_CODEC_ID_VP9
,
MKTAG
(
'V'
,
'P'
,
'9'
,
'0'
) },
46
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 15 ) },
47
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 15 ) },
48
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 16 ) },
49
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 16 ) },
50
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(15 ,
'B'
,
'G'
,
'R'
) },
51
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(15 ,
'R'
,
'G'
,
'B'
) },
52
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'B'
,
'G'
,
'R'
) },
53
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'R'
,
'G'
,
'B'
) },
54
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 12 ) },
55
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 12 ) },
56
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 ,
'B'
,
'G'
,
'R'
) },
57
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 ,
'R'
,
'G'
,
'B'
) },
58
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
,
'A'
) },
59
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 0 ) },
60
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
,
'A'
) },
61
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 0 ) },
62
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'A'
,
'B'
,
'G'
,
'R'
) },
63
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 0 ,
'B'
,
'G'
,
'R'
) },
64
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'A'
,
'R'
,
'G'
,
'B'
) },
65
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 0 ,
'R'
,
'G'
,
'B'
) },
66
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 24 ) },
67
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 24 ) },
68
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'1'
,
'1'
,
'P'
) },
69
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'2'
,
'2'
,
'P'
) },
70
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'2'
,
'2'
,
'P'
) },
71
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'0'
,
'P'
) },
72
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'0'
,
'P'
) },
73
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'4'
,
'P'
) },
74
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'4'
,
'P'
) },
75
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'1'
,
'W'
,
'0'
) },
76
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'0'
,
'W'
,
'1'
) },
77
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 8 ) },
78
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 8 ) },
79
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 4 ) },
80
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 4 ) },
81
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'4'
,
'B'
,
'Y'
) },
82
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'4'
,
'B'
,
'Y'
) },
83
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 48 ) },
84
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 48 ) },
85
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(48 ,
'B'
,
'G'
,
'R'
) },
86
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(48 ,
'R'
,
'G'
,
'B'
) },
87
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'B'
,
'A'
, 64 ) },
88
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'R'
,
'A'
, 64 ) },
89
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(64 ,
'R'
,
'B'
,
'A'
) },
90
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(64 ,
'B'
,
'R'
,
'A'
) },
91
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 10 ) },
92
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 11 ,
'3'
,
'Y'
) },
93
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 10 ) },
94
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 10 ,
'3'
,
'Y'
) },
95
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 10 ) },
96
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 0 ,
'3'
,
'Y'
) },
97
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 12 ) },
98
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 11 ,
'3'
,
'Y'
) },
99
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 12 ) },
100
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 10 ,
'3'
,
'Y'
) },
101
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 12 ) },
102
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 0 ,
'3'
,
'Y'
) },
103
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 14 ) },
104
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 11 ,
'3'
,
'Y'
) },
105
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 14 ) },
106
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 10 ,
'3'
,
'Y'
) },
107
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 14 ) },
108
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 0 ,
'3'
,
'Y'
) },
109
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0 , 16 ) },
110
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 0 ,
'1'
,
'Y'
) },
111
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 16 ) },
112
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 11 ,
'3'
,
'Y'
) },
113
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 16 ) },
114
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 10 ,
'3'
,
'Y'
) },
115
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 16 ) },
116
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 0 ,
'3'
,
'Y'
) },
117
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11 , 8 ) },
118
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10 , 8 ) },
119
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0 , 8 ) },
120
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'2'
, 0 , 8 ) },
121
122
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 9) },
123
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 0,
'1'
,
'Y'
) },
124
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 9) },
125
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 11,
'4'
,
'Y'
) },
126
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 9) },
127
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 10,
'4'
,
'Y'
) },
128
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 9) },
129
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 0,
'4'
,
'Y'
) },
130
131
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 10) },
132
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'1'
,
'Y'
) },
133
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 10) },
134
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 11,
'4'
,
'Y'
) },
135
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 10) },
136
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 10,
'4'
,
'Y'
) },
137
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 10) },
138
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'4'
,
'Y'
) },
139
140
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 16) },
141
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'1'
,
'Y'
) },
142
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 16) },
143
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 11,
'4'
,
'Y'
) },
144
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 16) },
145
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 10,
'4'
,
'Y'
) },
146
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 16) },
147
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'4'
,
'Y'
) },
148
149
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 8) },
150
151
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 9) },
152
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 9, 0,
'3'
,
'G'
) },
153
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 10) },
154
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'3'
,
'G'
) },
155
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 12) },
156
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12, 0,
'3'
,
'G'
) },
157
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 14) },
158
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14, 0,
'3'
,
'G'
) },
159
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 16) },
160
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'3'
,
'G'
) },
161
162
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'X'
,
'Y'
,
'Z'
, 36 ) },
163
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(36 ,
'Z'
,
'Y'
,
'X'
) },
164
165
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'B'
,
'G'
, 8 ) },
166
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'B'
,
'G'
, 16 ) },
167
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'G'
,
'B'
, 0xBA) },
168
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'R'
,
'G'
, 8 ) },
169
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'R'
,
'G'
, 16 ) },
170
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'G'
,
'R'
, 0xBA) },
171
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'B'
, 8 ) },
172
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'B'
, 16 ) },
173
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16,
'B'
,
'G'
, 0xBA) },
174
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'R'
, 8 ) },
175
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'R'
, 16 ) },
176
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16,
'R'
,
'G'
, 0xBA) },
177
178
{
AV_CODEC_ID_NONE
, 0 }
179
};
180
181
const
AVCodecTag
ff_nut_audio_extra_tags
[] = {
182
{
AV_CODEC_ID_COMFORT_NOISE
,
MKTAG
(
'3'
,
'3'
,
'8'
,
'9'
) },
183
{
AV_CODEC_ID_PCM_ALAW
,
MKTAG
(
'A'
,
'L'
,
'A'
,
'W'
) },
184
{
AV_CODEC_ID_PCM_MULAW
,
MKTAG
(
'U'
,
'L'
,
'A'
,
'W'
) },
185
{
AV_CODEC_ID_MP3
,
MKTAG
(
'M'
,
'P'
,
'3'
,
' '
) },
186
{
AV_CODEC_ID_WAVPACK
,
MKTAG
(
'w'
,
'v'
,
'p'
,
'k'
) },
187
{
AV_CODEC_ID_NONE
, 0 }
188
};
189
190
const
AVCodecTag
ff_nut_audio_tags
[] = {
191
{
AV_CODEC_ID_PCM_F32BE
,
MKTAG
(32 ,
'D'
,
'F'
,
'P'
) },
192
{
AV_CODEC_ID_PCM_F32LE
,
MKTAG
(
'P'
,
'F'
,
'D'
, 32 ) },
193
{
AV_CODEC_ID_PCM_F64BE
,
MKTAG
(64 ,
'D'
,
'F'
,
'P'
) },
194
{
AV_CODEC_ID_PCM_F64LE
,
MKTAG
(
'P'
,
'F'
,
'D'
, 64 ) },
195
{
AV_CODEC_ID_PCM_S16BE
,
MKTAG
(16 ,
'D'
,
'S'
,
'P'
) },
196
{
AV_CODEC_ID_PCM_S16LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 16 ) },
197
{
AV_CODEC_ID_PCM_S24BE
,
MKTAG
(24 ,
'D'
,
'S'
,
'P'
) },
198
{
AV_CODEC_ID_PCM_S24LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 24 ) },
199
{
AV_CODEC_ID_PCM_S32BE
,
MKTAG
(32 ,
'D'
,
'S'
,
'P'
) },
200
{
AV_CODEC_ID_PCM_S32LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 32 ) },
201
{
AV_CODEC_ID_PCM_S8
,
MKTAG
(
'P'
,
'S'
,
'D'
, 8 ) },
202
{
AV_CODEC_ID_PCM_U16BE
,
MKTAG
(16 ,
'D'
,
'U'
,
'P'
) },
203
{
AV_CODEC_ID_PCM_U16LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 16 ) },
204
{
AV_CODEC_ID_PCM_U24BE
,
MKTAG
(24 ,
'D'
,
'U'
,
'P'
) },
205
{
AV_CODEC_ID_PCM_U24LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 24 ) },
206
{
AV_CODEC_ID_PCM_U32BE
,
MKTAG
(32 ,
'D'
,
'U'
,
'P'
) },
207
{
AV_CODEC_ID_PCM_U32LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 32 ) },
208
{
AV_CODEC_ID_PCM_U8
,
MKTAG
(
'P'
,
'U'
,
'D'
, 8 ) },
209
{
AV_CODEC_ID_PCM_S8_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 8 ) },
210
{
AV_CODEC_ID_PCM_S16BE_PLANAR
,
MKTAG
(16 ,
'P'
,
'S'
,
'P'
) },
211
{
AV_CODEC_ID_PCM_S16LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 16 ) },
212
{
AV_CODEC_ID_PCM_S24LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 24 ) },
213
{
AV_CODEC_ID_PCM_S32LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 32 ) },
214
{
AV_CODEC_ID_NONE
, 0 }
215
};
216
217
const
AVCodecTag
*
const
ff_nut_codec_tags
[] = {
218
ff_nut_video_tags
,
ff_nut_audio_tags
,
ff_nut_subtitle_tags
,
219
ff_codec_bmp_tags
,
ff_codec_wav_tags
,
ff_nut_audio_extra_tags
,
ff_nut_data_tags
, 0
220
};
221
222
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t
val
)
223
{
224
int
i;
225
for
(i = 0; i < nut->
avf
->
nb_streams
; i++)
226
nut->
stream
[i].
last_pts
=
227
av_rescale_rnd
(val,
228
time_base.
num
* (int64_t)nut->
stream
[i].
time_base
->
den
,
229
time_base.
den
* (int64_t)nut->
stream
[i].
time_base
->
num
,
230
AV_ROUND_DOWN
);
231
}
232
233
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb)
234
{
235
int64_t
mask
= (1ULL << stream->
msb_pts_shift
) - 1;
236
int64_t
delta
= stream->
last_pts
- mask / 2;
237
return
((lsb - delta) &
mask
) + delta;
238
}
239
240
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
)
241
{
242
return
((a->
pos
- b->
pos
) >> 32) - ((b->
pos
- a->
pos
) >> 32);
243
}
244
245
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
)
246
{
247
return
((a->
ts
- b->
ts
) >> 32) - ((b->
ts
- a->
ts
) >> 32);
248
}
249
250
int
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts)
251
{
252
Syncpoint
*
sp
=
av_mallocz
(
sizeof
(
Syncpoint
));
253
struct
AVTreeNode
*node =
av_tree_node_alloc
();
254
255
if
(!sp || !node) {
256
av_freep
(&sp);
257
av_freep
(&node);
258
return
AVERROR
(ENOMEM);
259
}
260
261
nut->
sp_count
++;
262
263
sp->
pos
= pos;
264
sp->
back_ptr
= back_ptr;
265
sp->
ts
= ts;
266
av_tree_insert
(&nut->
syncpoints
, sp, (
void
*)
ff_nut_sp_pos_cmp
, &node);
267
if
(node) {
268
av_free
(sp);
269
av_free
(node);
270
}
271
272
return
0;
273
}
274
275
static
int
enu_free
(
void
*opaque,
void
*
elem
)
276
{
277
av_free
(elem);
278
return
0;
279
}
280
281
void
ff_nut_free_sp
(
NUTContext
*nut)
282
{
283
av_tree_enumerate
(nut->
syncpoints
,
NULL
,
NULL
,
enu_free
);
284
av_tree_destroy
(nut->
syncpoints
);
285
}
286
287
const
Dispositions
ff_nut_dispositions
[] = {
288
{
"default"
,
AV_DISPOSITION_DEFAULT
},
289
{
"dub"
,
AV_DISPOSITION_DUB
},
290
{
"original"
,
AV_DISPOSITION_ORIGINAL
},
291
{
"comment"
,
AV_DISPOSITION_COMMENT
},
292
{
"lyrics"
,
AV_DISPOSITION_LYRICS
},
293
{
"karaoke"
,
AV_DISPOSITION_KARAOKE
},
294
{
""
, 0 }
295
};
296
297
const
AVMetadataConv
ff_nut_metadata_conv
[] = {
298
{
"Author"
,
"artist"
},
299
{
"X-CreationTime"
,
"date"
},
300
{
"CreationTime"
,
"date"
},
301
{
"SourceFilename"
,
"filename"
},
302
{
"X-Language"
,
"language"
},
303
{
"X-Disposition"
,
"disposition"
},
304
{
"X-Replaces"
,
"replaces"
},
305
{
"X-Depends"
,
"depends"
},
306
{
"X-Uses"
,
"uses"
},
307
{
"X-UsesFont"
,
"usesfont"
},
308
{ 0 },
309
};
Generated on Sun Mar 8 2015 02:35:11 for FFmpeg by
1.8.2