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