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