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_XFACE
,
MKTAG
(
'X'
,
'F'
,
'A'
,
'C'
) },
44
{
AV_CODEC_ID_VP9
,
MKTAG
(
'V'
,
'P'
,
'9'
,
'0'
) },
45
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 15 ) },
46
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 15 ) },
47
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 16 ) },
48
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 16 ) },
49
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(15 ,
'B'
,
'G'
,
'R'
) },
50
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(15 ,
'R'
,
'G'
,
'B'
) },
51
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'B'
,
'G'
,
'R'
) },
52
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'R'
,
'G'
,
'B'
) },
53
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 12 ) },
54
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 12 ) },
55
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 ,
'B'
,
'G'
,
'R'
) },
56
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 ,
'R'
,
'G'
,
'B'
) },
57
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
,
'A'
) },
58
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 0 ) },
59
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
,
'A'
) },
60
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 0 ) },
61
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'A'
,
'B'
,
'G'
,
'R'
) },
62
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 0 ,
'B'
,
'G'
,
'R'
) },
63
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'A'
,
'R'
,
'G'
,
'B'
) },
64
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 0 ,
'R'
,
'G'
,
'B'
) },
65
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 24 ) },
66
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 24 ) },
67
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'1'
,
'1'
,
'P'
) },
68
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'2'
,
'2'
,
'P'
) },
69
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'2'
,
'2'
,
'P'
) },
70
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'0'
,
'P'
) },
71
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'0'
,
'P'
) },
72
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'4'
,
'P'
) },
73
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'4'
,
'4'
,
'4'
,
'P'
) },
74
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'1'
,
'W'
,
'0'
) },
75
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'0'
,
'W'
,
'1'
) },
76
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 8 ) },
77
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 8 ) },
78
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 4 ) },
79
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 4 ) },
80
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'4'
,
'B'
,
'Y'
) },
81
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'4'
,
'B'
,
'Y'
) },
82
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'G'
,
'R'
, 48 ) },
83
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'G'
,
'B'
, 48 ) },
84
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(48 ,
'B'
,
'G'
,
'R'
) },
85
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(48 ,
'R'
,
'G'
,
'B'
) },
86
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'R'
,
'B'
,
'A'
, 64 ) },
87
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'B'
,
'R'
,
'A'
, 64 ) },
88
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(64 ,
'R'
,
'B'
,
'A'
) },
89
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(64 ,
'B'
,
'R'
,
'A'
) },
90
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 10 ) },
91
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 11 ,
'3'
,
'Y'
) },
92
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 10 ) },
93
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 10 ,
'3'
,
'Y'
) },
94
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 10 ) },
95
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10 , 0 ,
'3'
,
'Y'
) },
96
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 12 ) },
97
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 11 ,
'3'
,
'Y'
) },
98
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 12 ) },
99
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 10 ,
'3'
,
'Y'
) },
100
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 12 ) },
101
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12 , 0 ,
'3'
,
'Y'
) },
102
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 14 ) },
103
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 11 ,
'3'
,
'Y'
) },
104
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 14 ) },
105
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 10 ,
'3'
,
'Y'
) },
106
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 14 ) },
107
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14 , 0 ,
'3'
,
'Y'
) },
108
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0 , 16 ) },
109
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 0 ,
'1'
,
'Y'
) },
110
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 11 , 16 ) },
111
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 11 ,
'3'
,
'Y'
) },
112
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 10 , 16 ) },
113
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 10 ,
'3'
,
'Y'
) },
114
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'3'
, 0 , 16 ) },
115
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 , 0 ,
'3'
,
'Y'
) },
116
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11 , 8 ) },
117
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10 , 8 ) },
118
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0 , 8 ) },
119
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'2'
, 0 , 8 ) },
120
121
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 9) },
122
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 0,
'1'
,
'Y'
) },
123
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 9) },
124
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 11,
'4'
,
'Y'
) },
125
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 9) },
126
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 10,
'4'
,
'Y'
) },
127
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 9) },
128
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(9, 0,
'4'
,
'Y'
) },
129
130
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 10) },
131
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'1'
,
'Y'
) },
132
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 10) },
133
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 11,
'4'
,
'Y'
) },
134
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 10) },
135
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 10,
'4'
,
'Y'
) },
136
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 10) },
137
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'4'
,
'Y'
) },
138
139
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'1'
, 0, 16) },
140
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'1'
,
'Y'
) },
141
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 11, 16) },
142
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 11,
'4'
,
'Y'
) },
143
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 10, 16) },
144
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 10,
'4'
,
'Y'
) },
145
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
, 0, 16) },
146
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'4'
,
'Y'
) },
147
148
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 8) },
149
150
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 9) },
151
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
( 9, 0,
'3'
,
'G'
) },
152
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 10) },
153
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(10, 0,
'3'
,
'G'
) },
154
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 12) },
155
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(12, 0,
'3'
,
'G'
) },
156
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 14) },
157
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(14, 0,
'3'
,
'G'
) },
158
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'G'
,
'3'
, 0, 16) },
159
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16, 0,
'3'
,
'G'
) },
160
161
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(
'X'
,
'Y'
,
'Z'
, 36 ) },
162
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(36 ,
'Z'
,
'Y'
,
'X'
) },
163
164
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'B'
,
'G'
, 8 ) },
165
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'B'
,
'G'
, 16 ) },
166
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'G'
,
'B'
, 0xBA) },
167
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'R'
,
'G'
, 8 ) },
168
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'R'
,
'G'
, 16 ) },
169
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16 ,
'G'
,
'R'
, 0xBA) },
170
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'B'
, 8 ) },
171
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'B'
, 16 ) },
172
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16,
'B'
,
'G'
, 0xBA) },
173
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'R'
, 8 ) },
174
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(0xBA,
'G'
,
'R'
, 16 ) },
175
{
AV_CODEC_ID_RAWVIDEO
,
MKTAG
(16,
'R'
,
'G'
, 0xBA) },
176
177
{
AV_CODEC_ID_NONE
, 0 }
178
};
179
180
const
AVCodecTag
ff_nut_audio_extra_tags
[] = {
181
{
AV_CODEC_ID_COMFORT_NOISE
,
MKTAG
(
'3'
,
'3'
,
'8'
,
'9'
) },
182
{
AV_CODEC_ID_PCM_ALAW
,
MKTAG
(
'A'
,
'L'
,
'A'
,
'W'
) },
183
{
AV_CODEC_ID_PCM_MULAW
,
MKTAG
(
'U'
,
'L'
,
'A'
,
'W'
) },
184
{
AV_CODEC_ID_MP3
,
MKTAG
(
'M'
,
'P'
,
'3'
,
' '
) },
185
{
AV_CODEC_ID_NONE
, 0 }
186
};
187
188
const
AVCodecTag
ff_nut_audio_tags
[] = {
189
{
AV_CODEC_ID_PCM_F32BE
,
MKTAG
(32 ,
'D'
,
'F'
,
'P'
) },
190
{
AV_CODEC_ID_PCM_F32LE
,
MKTAG
(
'P'
,
'F'
,
'D'
, 32 ) },
191
{
AV_CODEC_ID_PCM_F64BE
,
MKTAG
(64 ,
'D'
,
'F'
,
'P'
) },
192
{
AV_CODEC_ID_PCM_F64LE
,
MKTAG
(
'P'
,
'F'
,
'D'
, 64 ) },
193
{
AV_CODEC_ID_PCM_S16BE
,
MKTAG
(16 ,
'D'
,
'S'
,
'P'
) },
194
{
AV_CODEC_ID_PCM_S16LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 16 ) },
195
{
AV_CODEC_ID_PCM_S24BE
,
MKTAG
(24 ,
'D'
,
'S'
,
'P'
) },
196
{
AV_CODEC_ID_PCM_S24LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 24 ) },
197
{
AV_CODEC_ID_PCM_S32BE
,
MKTAG
(32 ,
'D'
,
'S'
,
'P'
) },
198
{
AV_CODEC_ID_PCM_S32LE
,
MKTAG
(
'P'
,
'S'
,
'D'
, 32 ) },
199
{
AV_CODEC_ID_PCM_S8
,
MKTAG
(
'P'
,
'S'
,
'D'
, 8 ) },
200
{
AV_CODEC_ID_PCM_U16BE
,
MKTAG
(16 ,
'D'
,
'U'
,
'P'
) },
201
{
AV_CODEC_ID_PCM_U16LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 16 ) },
202
{
AV_CODEC_ID_PCM_U24BE
,
MKTAG
(24 ,
'D'
,
'U'
,
'P'
) },
203
{
AV_CODEC_ID_PCM_U24LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 24 ) },
204
{
AV_CODEC_ID_PCM_U32BE
,
MKTAG
(32 ,
'D'
,
'U'
,
'P'
) },
205
{
AV_CODEC_ID_PCM_U32LE
,
MKTAG
(
'P'
,
'U'
,
'D'
, 32 ) },
206
{
AV_CODEC_ID_PCM_U8
,
MKTAG
(
'P'
,
'U'
,
'D'
, 8 ) },
207
{
AV_CODEC_ID_PCM_S8_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 8 ) },
208
{
AV_CODEC_ID_PCM_S16BE_PLANAR
,
MKTAG
(16 ,
'P'
,
'S'
,
'P'
) },
209
{
AV_CODEC_ID_PCM_S16LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 16 ) },
210
{
AV_CODEC_ID_PCM_S24LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 24 ) },
211
{
AV_CODEC_ID_PCM_S32LE_PLANAR
,
MKTAG
(
'P'
,
'S'
,
'P'
, 32 ) },
212
{
AV_CODEC_ID_NONE
, 0 }
213
};
214
215
const
AVCodecTag
*
const
ff_nut_codec_tags
[] = {
216
ff_nut_video_tags
,
ff_nut_audio_tags
,
ff_nut_subtitle_tags
,
217
ff_codec_bmp_tags
,
ff_codec_wav_tags
,
ff_nut_audio_extra_tags
,
ff_nut_data_tags
, 0
218
};
219
220
void
ff_nut_reset_ts
(
NUTContext
*nut,
AVRational
time_base, int64_t
val
)
221
{
222
int
i;
223
for
(i = 0; i < nut->
avf
->
nb_streams
; i++)
224
nut->
stream
[i].
last_pts
=
225
av_rescale_rnd
(val,
226
time_base.
num
* (int64_t)nut->
stream
[i].
time_base
->
den
,
227
time_base.
den
* (int64_t)nut->
stream
[i].
time_base
->
num
,
228
AV_ROUND_DOWN
);
229
}
230
231
int64_t
ff_lsb2full
(
StreamContext
*stream, int64_t lsb)
232
{
233
int64_t
mask
= (1ULL << stream->
msb_pts_shift
) - 1;
234
int64_t
delta
= stream->
last_pts
- mask / 2;
235
return
((lsb - delta) &
mask
) + delta;
236
}
237
238
int
ff_nut_sp_pos_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
)
239
{
240
return
((a->
pos
- b->
pos
) >> 32) - ((b->
pos
- a->
pos
) >> 32);
241
}
242
243
int
ff_nut_sp_pts_cmp
(
const
Syncpoint
*
a
,
const
Syncpoint
*
b
)
244
{
245
return
((a->
ts
- b->
ts
) >> 32) - ((b->
ts
- a->
ts
) >> 32);
246
}
247
248
int
ff_nut_add_sp
(
NUTContext
*nut, int64_t pos, int64_t back_ptr, int64_t ts)
249
{
250
Syncpoint
*
sp
=
av_mallocz
(
sizeof
(
Syncpoint
));
251
struct
AVTreeNode
*node =
av_tree_node_alloc
();
252
253
if
(!sp || !node) {
254
av_freep
(&sp);
255
av_freep
(&node);
256
return
AVERROR
(ENOMEM);
257
}
258
259
nut->
sp_count
++;
260
261
sp->
pos
= pos;
262
sp->
back_ptr
= back_ptr;
263
sp->
ts
= ts;
264
av_tree_insert
(&nut->
syncpoints
, sp, (
void
*)
ff_nut_sp_pos_cmp
, &node);
265
if
(node) {
266
av_free
(sp);
267
av_free
(node);
268
}
269
270
return
0;
271
}
272
273
static
int
enu_free
(
void
*opaque,
void
*
elem
)
274
{
275
av_free
(elem);
276
return
0;
277
}
278
279
void
ff_nut_free_sp
(
NUTContext
*nut)
280
{
281
av_tree_enumerate
(nut->
syncpoints
, NULL, NULL,
enu_free
);
282
av_tree_destroy
(nut->
syncpoints
);
283
}
284
285
const
Dispositions
ff_nut_dispositions
[] = {
286
{
"default"
,
AV_DISPOSITION_DEFAULT
},
287
{
"dub"
,
AV_DISPOSITION_DUB
},
288
{
"original"
,
AV_DISPOSITION_ORIGINAL
},
289
{
"comment"
,
AV_DISPOSITION_COMMENT
},
290
{
"lyrics"
,
AV_DISPOSITION_LYRICS
},
291
{
"karaoke"
,
AV_DISPOSITION_KARAOKE
},
292
{
""
, 0 }
293
};
294
295
const
AVMetadataConv
ff_nut_metadata_conv
[] = {
296
{
"Author"
,
"artist"
},
297
{
"X-CreationTime"
,
"date"
},
298
{
"CreationTime"
,
"date"
},
299
{
"SourceFilename"
,
"filename"
},
300
{
"X-Language"
,
"language"
},
301
{
"X-Disposition"
,
"disposition"
},
302
{
"X-Replaces"
,
"replaces"
},
303
{
"X-Depends"
,
"depends"
},
304
{
"X-Uses"
,
"uses"
},
305
{
"X-UsesFont"
,
"usesfont"
},
306
{ 0 },
307
};
Generated on Fri Dec 5 2014 04:42:13 for FFmpeg by
1.8.2