~ubuntu-branches/ubuntu/vivid/ffmpeg/vivid

« back to all changes in this revision

Viewing changes to libavformat/nut.c

  • Committer: Package Import Robot
  • Author(s): Andreas Cadhalpun
  • Date: 2014-11-05 01:18:23 UTC
  • mfrom: (0.2.17 sid)
  • Revision ID: package-import@ubuntu.com-20141105011823-xsbeceffs43wtkn7
Tags: 7:2.4.3-1
* Import new upstream bugfix release 2.4.3.
   - Refresh Change-symbol-versioning.patch.
   - Add new symbols to the libavdevice symbols file.
* Enable libbs2b on arm64, since it is now available.
* Disable frei0r and libx264 on x32, libsoxr and openal on sparc64
  and libopencv on m68k, sh4, sparc64 and x32, because they are not
  (yet) avialable there.
* Disable assembler optimizations on x32, as they wouldn't work there.
* Include config.log in the build-log, when compiling fails.
* Add fix-hppa-tests.patch to work around a gcc bug on hppa.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
20
 */
21
21
 
 
22
#include "libavutil/mathematics.h"
22
23
#include "libavutil/tree.h"
23
24
#include "nut.h"
 
25
#include "riff.h"
 
26
#include "internal.h"
24
27
 
25
28
const AVCodecTag ff_nut_subtitle_tags[] = {
26
 
    { CODEC_ID_TEXT        , MKTAG('U', 'T', 'F', '8') },
27
 
    { CODEC_ID_SSA         , MKTAG('S', 'S', 'A',  0 ) },
28
 
    { CODEC_ID_DVD_SUBTITLE, MKTAG('D', 'V', 'D', 'S') },
29
 
    { CODEC_ID_DVB_SUBTITLE, MKTAG('D', 'V', 'B', 'S') },
30
 
    { CODEC_ID_NONE        , 0                         }
31
 
};
32
 
 
33
 
void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val){
 
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('R', 'B', 'A', 64 ) },
 
86
    { AV_CODEC_ID_RAWVIDEO,         MKTAG('B', 'R', 'A', 64 ) },
 
87
    { AV_CODEC_ID_RAWVIDEO,         MKTAG(64 , 'R', 'B', 'A') },
 
88
    { AV_CODEC_ID_RAWVIDEO,         MKTAG(64 , 'B', 'R', '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
const AVCodecTag ff_nut_audio_extra_tags[] = {
 
180
    { AV_CODEC_ID_COMFORT_NOISE,    MKTAG('3', '3', '8', '9') },
 
181
    { AV_CODEC_ID_PCM_ALAW,         MKTAG('A', 'L', 'A', 'W') },
 
182
    { AV_CODEC_ID_PCM_MULAW,        MKTAG('U', 'L', 'A', 'W') },
 
183
    { AV_CODEC_ID_MP3,              MKTAG('M', 'P', '3', ' ') },
 
184
    { AV_CODEC_ID_NONE,             0                         }
 
185
};
 
186
 
 
187
const AVCodecTag ff_nut_audio_tags[] = {
 
188
    { AV_CODEC_ID_PCM_F32BE,        MKTAG(32 , 'D', 'F', 'P') },
 
189
    { AV_CODEC_ID_PCM_F32LE,        MKTAG('P', 'F', 'D', 32 ) },
 
190
    { AV_CODEC_ID_PCM_F64BE,        MKTAG(64 , 'D', 'F', 'P') },
 
191
    { AV_CODEC_ID_PCM_F64LE,        MKTAG('P', 'F', 'D', 64 ) },
 
192
    { AV_CODEC_ID_PCM_S16BE,        MKTAG(16 , 'D', 'S', 'P') },
 
193
    { AV_CODEC_ID_PCM_S16LE,        MKTAG('P', 'S', 'D', 16 ) },
 
194
    { AV_CODEC_ID_PCM_S24BE,        MKTAG(24 , 'D', 'S', 'P') },
 
195
    { AV_CODEC_ID_PCM_S24LE,        MKTAG('P', 'S', 'D', 24 ) },
 
196
    { AV_CODEC_ID_PCM_S32BE,        MKTAG(32 , 'D', 'S', 'P') },
 
197
    { AV_CODEC_ID_PCM_S32LE,        MKTAG('P', 'S', 'D', 32 ) },
 
198
    { AV_CODEC_ID_PCM_S8,           MKTAG('P', 'S', 'D',  8 ) },
 
199
    { AV_CODEC_ID_PCM_U16BE,        MKTAG(16 , 'D', 'U', 'P') },
 
200
    { AV_CODEC_ID_PCM_U16LE,        MKTAG('P', 'U', 'D', 16 ) },
 
201
    { AV_CODEC_ID_PCM_U24BE,        MKTAG(24 , 'D', 'U', 'P') },
 
202
    { AV_CODEC_ID_PCM_U24LE,        MKTAG('P', 'U', 'D', 24 ) },
 
203
    { AV_CODEC_ID_PCM_U32BE,        MKTAG(32 , 'D', 'U', 'P') },
 
204
    { AV_CODEC_ID_PCM_U32LE,        MKTAG('P', 'U', 'D', 32 ) },
 
205
    { AV_CODEC_ID_PCM_U8,           MKTAG('P', 'U', 'D',  8 ) },
 
206
    { AV_CODEC_ID_PCM_S8_PLANAR,    MKTAG('P', 'S', 'P',  8 ) },
 
207
    { AV_CODEC_ID_PCM_S16BE_PLANAR, MKTAG(16 , 'P', 'S', 'P') },
 
208
    { AV_CODEC_ID_PCM_S16LE_PLANAR, MKTAG('P', 'S', 'P', 16 ) },
 
209
    { AV_CODEC_ID_PCM_S24LE_PLANAR, MKTAG('P', 'S', 'P', 24 ) },
 
210
    { AV_CODEC_ID_PCM_S32LE_PLANAR, MKTAG('P', 'S', 'P', 32 ) },
 
211
    { AV_CODEC_ID_NONE,             0                         }
 
212
};
 
213
 
 
214
const AVCodecTag * const ff_nut_codec_tags[] = {
 
215
    ff_nut_video_tags, ff_nut_audio_tags, ff_nut_subtitle_tags,
 
216
    ff_codec_bmp_tags, ff_codec_wav_tags, ff_nut_audio_extra_tags, ff_nut_data_tags, 0
 
217
};
 
218
 
 
219
void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val)
 
220
{
34
221
    int i;
35
 
    for(i=0; i<nut->avf->nb_streams; i++){
36
 
        nut->stream[i].last_pts= av_rescale_rnd(
37
 
            val,
38
 
            time_base.num * (int64_t)nut->stream[i].time_base->den,
39
 
            time_base.den * (int64_t)nut->stream[i].time_base->num,
40
 
            AV_ROUND_DOWN);
41
 
    }
42
 
}
43
 
 
44
 
int64_t ff_lsb2full(StreamContext *stream, int64_t lsb){
45
 
    int64_t mask = (1<<stream->msb_pts_shift)-1;
46
 
    int64_t delta= stream->last_pts - mask/2;
47
 
    return  ((lsb - delta)&mask) + delta;
48
 
}
49
 
 
50
 
int ff_nut_sp_pos_cmp(const Syncpoint *a, const Syncpoint *b){
 
222
    for (i = 0; i < nut->avf->nb_streams; i++)
 
223
        nut->stream[i].last_pts =
 
224
            av_rescale_rnd(val,
 
225
                           time_base.num * (int64_t)nut->stream[i].time_base->den,
 
226
                           time_base.den * (int64_t)nut->stream[i].time_base->num,
 
227
                           AV_ROUND_DOWN);
 
228
}
 
229
 
 
230
int64_t ff_lsb2full(StreamContext *stream, int64_t lsb)
 
231
{
 
232
    int64_t mask  = (1ULL << stream->msb_pts_shift) - 1;
 
233
    int64_t delta = stream->last_pts - mask / 2;
 
234
    return ((lsb - delta) & mask) + delta;
 
235
}
 
236
 
 
237
int ff_nut_sp_pos_cmp(const Syncpoint *a, const Syncpoint *b)
 
238
{
51
239
    return ((a->pos - b->pos) >> 32) - ((b->pos - a->pos) >> 32);
52
240
}
53
241
 
54
 
int ff_nut_sp_pts_cmp(const Syncpoint *a, const Syncpoint *b){
 
242
int ff_nut_sp_pts_cmp(const Syncpoint *a, const Syncpoint *b)
 
243
{
55
244
    return ((a->ts - b->ts) >> 32) - ((b->ts - a->ts) >> 32);
56
245
}
57
246
 
58
 
void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts){
59
 
    Syncpoint *sp= av_mallocz(sizeof(Syncpoint));
60
 
    struct AVTreeNode *node= av_mallocz(av_tree_node_size);
61
 
 
62
 
    sp->pos= pos;
63
 
    sp->back_ptr= back_ptr;
64
 
    sp->ts= ts;
 
247
int ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts)
 
248
{
 
249
    Syncpoint *sp           = av_mallocz(sizeof(Syncpoint));
 
250
    struct AVTreeNode *node = av_tree_node_alloc();
 
251
 
 
252
    if (!sp || !node) {
 
253
        av_freep(&sp);
 
254
        av_freep(&node);
 
255
        return AVERROR(ENOMEM);
 
256
    }
 
257
 
 
258
    nut->sp_count++;
 
259
 
 
260
    sp->pos      = pos;
 
261
    sp->back_ptr = back_ptr;
 
262
    sp->ts       = ts;
65
263
    av_tree_insert(&nut->syncpoints, sp, (void *) ff_nut_sp_pos_cmp, &node);
66
 
    if(node){
 
264
    if (node) {
67
265
        av_free(sp);
68
266
        av_free(node);
69
267
    }
 
268
 
 
269
    return 0;
70
270
}
71
271
 
72
272
static int enu_free(void *opaque, void *elem)
82
282
}
83
283
 
84
284
const Dispositions ff_nut_dispositions[] = {
85
 
    {"default"     , AV_DISPOSITION_DEFAULT},
86
 
    {"dub"         , AV_DISPOSITION_DUB},
87
 
    {"original"    , AV_DISPOSITION_ORIGINAL},
88
 
    {"comment"     , AV_DISPOSITION_COMMENT},
89
 
    {"lyrics"      , AV_DISPOSITION_LYRICS},
90
 
    {"karaoke"     , AV_DISPOSITION_KARAOKE},
91
 
    {""            , 0}
 
285
    { "default",        AV_DISPOSITION_DEFAULT  },
 
286
    { "dub",            AV_DISPOSITION_DUB      },
 
287
    { "original",       AV_DISPOSITION_ORIGINAL },
 
288
    { "comment",        AV_DISPOSITION_COMMENT  },
 
289
    { "lyrics",         AV_DISPOSITION_LYRICS   },
 
290
    { "karaoke",        AV_DISPOSITION_KARAOKE  },
 
291
    { "",               0                       }
92
292
};
93
293
 
94
294
const AVMetadataConv ff_nut_metadata_conv[] = {