~diresu/blender/blender-command-port

« back to all changes in this revision

Viewing changes to extern/ffmpeg/libavformat/matroskadec.c

  • Committer: theeth
  • Date: 2008-10-14 16:52:04 UTC
  • Revision ID: vcs-imports@canonical.com-20081014165204-r32w2gm6s0osvdhn
copy back trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Matroska file demuxer (no muxer yet)
 
3
 * Copyright (c) 2003-2004 The ffmpeg Project
 
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
/**
 
23
 * @file matroskadec.c
 
24
 * Matroska file demuxer
 
25
 * by Ronald Bultje <rbultje@ronald.bitfreak.net>
 
26
 * with a little help from Moritz Bunkus <moritz@bunkus.org>
 
27
 * Specs available on the matroska project page:
 
28
 * http://www.matroska.org/.
 
29
 */
 
30
 
 
31
#include "avformat.h"
 
32
/* For codec_get_id(). */
 
33
#include "riff.h"
 
34
#include "intfloat_readwrite.h"
 
35
#include "matroska.h"
 
36
 
 
37
typedef struct Track {
 
38
    MatroskaTrackType type;
 
39
 
 
40
    /* Unique track number and track ID. stream_index is the index that
 
41
     * the calling app uses for this track. */
 
42
    uint32_t num;
 
43
    uint32_t uid;
 
44
    int stream_index;
 
45
 
 
46
    char *name;
 
47
    char language[4];
 
48
 
 
49
    char *codec_id;
 
50
    char *codec_name;
 
51
 
 
52
    unsigned char *codec_priv;
 
53
    int codec_priv_size;
 
54
 
 
55
    uint64_t default_duration;
 
56
    MatroskaTrackFlags flags;
 
57
} MatroskaTrack;
 
58
 
 
59
typedef struct MatroskaVideoTrack {
 
60
    MatroskaTrack track;
 
61
 
 
62
    int pixel_width;
 
63
    int pixel_height;
 
64
    int display_width;
 
65
    int display_height;
 
66
 
 
67
    uint32_t fourcc;
 
68
 
 
69
    MatroskaAspectRatioMode ar_mode;
 
70
    MatroskaEyeMode eye_mode;
 
71
 
 
72
    //..
 
73
} MatroskaVideoTrack;
 
74
 
 
75
typedef struct MatroskaAudioTrack {
 
76
    MatroskaTrack track;
 
77
 
 
78
    int channels;
 
79
    int bitdepth;
 
80
    int internal_samplerate;
 
81
    int samplerate;
 
82
    int block_align;
 
83
 
 
84
    /* real audio header */
 
85
    int coded_framesize;
 
86
    int sub_packet_h;
 
87
    int frame_size;
 
88
    int sub_packet_size;
 
89
    int sub_packet_cnt;
 
90
    int pkt_cnt;
 
91
    uint8_t *buf;
 
92
    //..
 
93
} MatroskaAudioTrack;
 
94
 
 
95
typedef struct MatroskaSubtitleTrack {
 
96
    MatroskaTrack track;
 
97
 
 
98
    int ass;
 
99
    //..
 
100
} MatroskaSubtitleTrack;
 
101
 
 
102
#define MAX_TRACK_SIZE (FFMAX(FFMAX(sizeof(MatroskaVideoTrack), \
 
103
                                    sizeof(MatroskaAudioTrack)), \
 
104
                                    sizeof(MatroskaSubtitleTrack)))
 
105
 
 
106
typedef struct MatroskaLevel {
 
107
    uint64_t start;
 
108
    uint64_t length;
 
109
} MatroskaLevel;
 
110
 
 
111
typedef struct MatroskaDemuxIndex {
 
112
  uint64_t        pos;   /* of the corresponding *cluster*! */
 
113
  uint16_t        track; /* reference to 'num' */
 
114
  uint64_t        time;  /* in nanoseconds */
 
115
} MatroskaDemuxIndex;
 
116
 
 
117
typedef struct MatroskaDemuxContext {
 
118
    AVFormatContext *ctx;
 
119
 
 
120
    /* ebml stuff */
 
121
    int num_levels;
 
122
    MatroskaLevel levels[EBML_MAX_DEPTH];
 
123
    int level_up;
 
124
 
 
125
    /* matroska stuff */
 
126
    char *writing_app;
 
127
    char *muxing_app;
 
128
    int64_t created;
 
129
 
 
130
    /* timescale in the file */
 
131
    int64_t time_scale;
 
132
 
 
133
    /* num_streams is the number of streams that av_new_stream() was called
 
134
     * for ( = that are available to the calling program). */
 
135
    int num_tracks;
 
136
    int num_streams;
 
137
    MatroskaTrack *tracks[MAX_STREAMS];
 
138
 
 
139
    /* cache for ID peeking */
 
140
    uint32_t peek_id;
 
141
 
 
142
    /* byte position of the segment inside the stream */
 
143
    offset_t segment_start;
 
144
 
 
145
    /* The packet queue. */
 
146
    AVPacket **packets;
 
147
    int num_packets;
 
148
 
 
149
    /* have we already parse metadata/cues/clusters? */
 
150
    int metadata_parsed;
 
151
    int index_parsed;
 
152
    int done;
 
153
 
 
154
    /* The index for seeking. */
 
155
    int num_indexes;
 
156
    MatroskaDemuxIndex *index;
 
157
 
 
158
    /* What to skip before effectively reading a packet. */
 
159
    int skip_to_keyframe;
 
160
    AVStream *skip_to_stream;
 
161
} MatroskaDemuxContext;
 
162
 
 
163
/*
 
164
 * The first few functions handle EBML file parsing. The rest
 
165
 * is the document interpretation. Matroska really just is a
 
166
 * EBML file.
 
167
 */
 
168
 
 
169
/*
 
170
 * Return: the amount of levels in the hierarchy that the
 
171
 * current element lies higher than the previous one.
 
172
 * The opposite isn't done - that's auto-done using master
 
173
 * element reading.
 
174
 */
 
175
 
 
176
static int
 
177
ebml_read_element_level_up (MatroskaDemuxContext *matroska)
 
178
{
 
179
    ByteIOContext *pb = &matroska->ctx->pb;
 
180
    offset_t pos = url_ftell(pb);
 
181
    int num = 0;
 
182
 
 
183
    while (matroska->num_levels > 0) {
 
184
        MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1];
 
185
 
 
186
        if (pos >= level->start + level->length) {
 
187
            matroska->num_levels--;
 
188
            num++;
 
189
        } else {
 
190
            break;
 
191
        }
 
192
    }
 
193
 
 
194
    return num;
 
195
}
 
196
 
 
197
/*
 
198
 * Read: an "EBML number", which is defined as a variable-length
 
199
 * array of bytes. The first byte indicates the length by giving a
 
200
 * number of 0-bits followed by a one. The position of the first
 
201
 * "one" bit inside the first byte indicates the length of this
 
202
 * number.
 
203
 * Returns: num. of bytes read. < 0 on error.
 
204
 */
 
205
 
 
206
static int
 
207
ebml_read_num (MatroskaDemuxContext *matroska,
 
208
               int                   max_size,
 
209
               uint64_t             *number)
 
210
{
 
211
    ByteIOContext *pb = &matroska->ctx->pb;
 
212
    int len_mask = 0x80, read = 1, n = 1;
 
213
    int64_t total = 0;
 
214
 
 
215
    /* the first byte tells us the length in bytes - get_byte() can normally
 
216
     * return 0, but since that's not a valid first ebmlID byte, we can
 
217
     * use it safely here to catch EOS. */
 
218
    if (!(total = get_byte(pb))) {
 
219
        /* we might encounter EOS here */
 
220
        if (!url_feof(pb)) {
 
221
            offset_t pos = url_ftell(pb);
 
222
            av_log(matroska->ctx, AV_LOG_ERROR,
 
223
                   "Read error at pos. %"PRIu64" (0x%"PRIx64")\n",
 
224
                   pos, pos);
 
225
        }
 
226
        return AVERROR(EIO); /* EOS or actual I/O error */
 
227
    }
 
228
 
 
229
    /* get the length of the EBML number */
 
230
    while (read <= max_size && !(total & len_mask)) {
 
231
        read++;
 
232
        len_mask >>= 1;
 
233
    }
 
234
    if (read > max_size) {
 
235
        offset_t pos = url_ftell(pb) - 1;
 
236
        av_log(matroska->ctx, AV_LOG_ERROR,
 
237
               "Invalid EBML number size tag 0x%02x at pos %"PRIu64" (0x%"PRIx64")\n",
 
238
               (uint8_t) total, pos, pos);
 
239
        return AVERROR_INVALIDDATA;
 
240
    }
 
241
 
 
242
    /* read out length */
 
243
    total &= ~len_mask;
 
244
    while (n++ < read)
 
245
        total = (total << 8) | get_byte(pb);
 
246
 
 
247
    *number = total;
 
248
 
 
249
    return read;
 
250
}
 
251
 
 
252
/*
 
253
 * Read: the element content data ID.
 
254
 * Return: the number of bytes read or < 0 on error.
 
255
 */
 
256
 
 
257
static int
 
258
ebml_read_element_id (MatroskaDemuxContext *matroska,
 
259
                      uint32_t             *id,
 
260
                      int                  *level_up)
 
261
{
 
262
    int read;
 
263
    uint64_t total;
 
264
 
 
265
    /* if we re-call this, use our cached ID */
 
266
    if (matroska->peek_id != 0) {
 
267
        if (level_up)
 
268
            *level_up = 0;
 
269
        *id = matroska->peek_id;
 
270
        return 0;
 
271
    }
 
272
 
 
273
    /* read out the "EBML number", include tag in ID */
 
274
    if ((read = ebml_read_num(matroska, 4, &total)) < 0)
 
275
        return read;
 
276
    *id = matroska->peek_id  = total | (1 << (read * 7));
 
277
 
 
278
    /* level tracking */
 
279
    if (level_up)
 
280
        *level_up = ebml_read_element_level_up(matroska);
 
281
 
 
282
    return read;
 
283
}
 
284
 
 
285
/*
 
286
 * Read: element content length.
 
287
 * Return: the number of bytes read or < 0 on error.
 
288
 */
 
289
 
 
290
static int
 
291
ebml_read_element_length (MatroskaDemuxContext *matroska,
 
292
                          uint64_t             *length)
 
293
{
 
294
    /* clear cache since we're now beyond that data point */
 
295
    matroska->peek_id = 0;
 
296
 
 
297
    /* read out the "EBML number", include tag in ID */
 
298
    return ebml_read_num(matroska, 8, length);
 
299
}
 
300
 
 
301
/*
 
302
 * Return: the ID of the next element, or 0 on error.
 
303
 * Level_up contains the amount of levels that this
 
304
 * next element lies higher than the previous one.
 
305
 */
 
306
 
 
307
static uint32_t
 
308
ebml_peek_id (MatroskaDemuxContext *matroska,
 
309
              int                  *level_up)
 
310
{
 
311
    uint32_t id;
 
312
 
 
313
    if (ebml_read_element_id(matroska, &id, level_up) < 0)
 
314
        return 0;
 
315
 
 
316
    return id;
 
317
}
 
318
 
 
319
/*
 
320
 * Seek to a given offset.
 
321
 * 0 is success, -1 is failure.
 
322
 */
 
323
 
 
324
static int
 
325
ebml_read_seek (MatroskaDemuxContext *matroska,
 
326
                offset_t              offset)
 
327
{
 
328
    ByteIOContext *pb = &matroska->ctx->pb;
 
329
 
 
330
    /* clear ID cache, if any */
 
331
    matroska->peek_id = 0;
 
332
 
 
333
    return (url_fseek(pb, offset, SEEK_SET) == offset) ? 0 : -1;
 
334
}
 
335
 
 
336
/*
 
337
 * Skip the next element.
 
338
 * 0 is success, -1 is failure.
 
339
 */
 
340
 
 
341
static int
 
342
ebml_read_skip (MatroskaDemuxContext *matroska)
 
343
{
 
344
    ByteIOContext *pb = &matroska->ctx->pb;
 
345
    uint32_t id;
 
346
    uint64_t length;
 
347
    int res;
 
348
 
 
349
    if ((res = ebml_read_element_id(matroska, &id, NULL)) < 0 ||
 
350
        (res = ebml_read_element_length(matroska, &length)) < 0)
 
351
        return res;
 
352
 
 
353
    url_fskip(pb, length);
 
354
 
 
355
    return 0;
 
356
}
 
357
 
 
358
/*
 
359
 * Read the next element as an unsigned int.
 
360
 * 0 is success, < 0 is failure.
 
361
 */
 
362
 
 
363
static int
 
364
ebml_read_uint (MatroskaDemuxContext *matroska,
 
365
                uint32_t             *id,
 
366
                uint64_t             *num)
 
367
{
 
368
    ByteIOContext *pb = &matroska->ctx->pb;
 
369
    int n = 0, size, res;
 
370
    uint64_t rlength;
 
371
 
 
372
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
373
        (res = ebml_read_element_length(matroska, &rlength)) < 0)
 
374
        return res;
 
375
    size = rlength;
 
376
    if (size < 1 || size > 8) {
 
377
        offset_t pos = url_ftell(pb);
 
378
        av_log(matroska->ctx, AV_LOG_ERROR,
 
379
               "Invalid uint element size %d at position %"PRId64" (0x%"PRIx64")\n",
 
380
                size, pos, pos);
 
381
        return AVERROR_INVALIDDATA;
 
382
    }
 
383
 
 
384
    /* big-endian ordening; build up number */
 
385
    *num = 0;
 
386
    while (n++ < size)
 
387
        *num = (*num << 8) | get_byte(pb);
 
388
 
 
389
    return 0;
 
390
}
 
391
 
 
392
/*
 
393
 * Read the next element as a signed int.
 
394
 * 0 is success, < 0 is failure.
 
395
 */
 
396
 
 
397
static int
 
398
ebml_read_sint (MatroskaDemuxContext *matroska,
 
399
                uint32_t             *id,
 
400
                int64_t              *num)
 
401
{
 
402
    ByteIOContext *pb = &matroska->ctx->pb;
 
403
    int size, n = 1, negative = 0, res;
 
404
    uint64_t rlength;
 
405
 
 
406
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
407
        (res = ebml_read_element_length(matroska, &rlength)) < 0)
 
408
        return res;
 
409
    size = rlength;
 
410
    if (size < 1 || size > 8) {
 
411
        offset_t pos = url_ftell(pb);
 
412
        av_log(matroska->ctx, AV_LOG_ERROR,
 
413
               "Invalid sint element size %d at position %"PRId64" (0x%"PRIx64")\n",
 
414
                size, pos, pos);
 
415
        return AVERROR_INVALIDDATA;
 
416
    }
 
417
    if ((*num = get_byte(pb)) & 0x80) {
 
418
        negative = 1;
 
419
        *num &= ~0x80;
 
420
    }
 
421
    while (n++ < size)
 
422
        *num = (*num << 8) | get_byte(pb);
 
423
 
 
424
    /* make signed */
 
425
    if (negative)
 
426
        *num = *num - (1LL << ((8 * size) - 1));
 
427
 
 
428
    return 0;
 
429
}
 
430
 
 
431
/*
 
432
 * Read the next element as a float.
 
433
 * 0 is success, < 0 is failure.
 
434
 */
 
435
 
 
436
static int
 
437
ebml_read_float (MatroskaDemuxContext *matroska,
 
438
                 uint32_t             *id,
 
439
                 double               *num)
 
440
{
 
441
    ByteIOContext *pb = &matroska->ctx->pb;
 
442
    int size, res;
 
443
    uint64_t rlength;
 
444
 
 
445
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
446
        (res = ebml_read_element_length(matroska, &rlength)) < 0)
 
447
        return res;
 
448
    size = rlength;
 
449
 
 
450
    if (size == 4) {
 
451
        *num= av_int2flt(get_be32(pb));
 
452
    } else if(size==8){
 
453
        *num= av_int2dbl(get_be64(pb));
 
454
    } else{
 
455
        offset_t pos = url_ftell(pb);
 
456
        av_log(matroska->ctx, AV_LOG_ERROR,
 
457
               "Invalid float element size %d at position %"PRIu64" (0x%"PRIx64")\n",
 
458
               size, pos, pos);
 
459
        return AVERROR_INVALIDDATA;
 
460
    }
 
461
 
 
462
    return 0;
 
463
}
 
464
 
 
465
/*
 
466
 * Read the next element as an ASCII string.
 
467
 * 0 is success, < 0 is failure.
 
468
 */
 
469
 
 
470
static int
 
471
ebml_read_ascii (MatroskaDemuxContext *matroska,
 
472
                 uint32_t             *id,
 
473
                 char                **str)
 
474
{
 
475
    ByteIOContext *pb = &matroska->ctx->pb;
 
476
    int size, res;
 
477
    uint64_t rlength;
 
478
 
 
479
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
480
        (res = ebml_read_element_length(matroska, &rlength)) < 0)
 
481
        return res;
 
482
    size = rlength;
 
483
 
 
484
    /* ebml strings are usually not 0-terminated, so we allocate one
 
485
     * byte more, read the string and NULL-terminate it ourselves. */
 
486
    if (size < 0 || !(*str = av_malloc(size + 1))) {
 
487
        av_log(matroska->ctx, AV_LOG_ERROR, "Memory allocation failed\n");
 
488
        return AVERROR(ENOMEM);
 
489
    }
 
490
    if (get_buffer(pb, (uint8_t *) *str, size) != size) {
 
491
        offset_t pos = url_ftell(pb);
 
492
        av_log(matroska->ctx, AV_LOG_ERROR,
 
493
               "Read error at pos. %"PRIu64" (0x%"PRIx64")\n", pos, pos);
 
494
        return AVERROR(EIO);
 
495
    }
 
496
    (*str)[size] = '\0';
 
497
 
 
498
    return 0;
 
499
}
 
500
 
 
501
/*
 
502
 * Read the next element as a UTF-8 string.
 
503
 * 0 is success, < 0 is failure.
 
504
 */
 
505
 
 
506
static int
 
507
ebml_read_utf8 (MatroskaDemuxContext *matroska,
 
508
                uint32_t             *id,
 
509
                char                **str)
 
510
{
 
511
  return ebml_read_ascii(matroska, id, str);
 
512
}
 
513
 
 
514
/*
 
515
 * Read the next element as a date (nanoseconds since 1/1/2000).
 
516
 * 0 is success, < 0 is failure.
 
517
 */
 
518
 
 
519
static int
 
520
ebml_read_date (MatroskaDemuxContext *matroska,
 
521
                uint32_t             *id,
 
522
                int64_t              *date)
 
523
{
 
524
  return ebml_read_sint(matroska, id, date);
 
525
}
 
526
 
 
527
/*
 
528
 * Read the next element, but only the header. The contents
 
529
 * are supposed to be sub-elements which can be read separately.
 
530
 * 0 is success, < 0 is failure.
 
531
 */
 
532
 
 
533
static int
 
534
ebml_read_master (MatroskaDemuxContext *matroska,
 
535
                  uint32_t             *id)
 
536
{
 
537
    ByteIOContext *pb = &matroska->ctx->pb;
 
538
    uint64_t length;
 
539
    MatroskaLevel *level;
 
540
    int res;
 
541
 
 
542
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
543
        (res = ebml_read_element_length(matroska, &length)) < 0)
 
544
        return res;
 
545
 
 
546
    /* protect... (Heaven forbids that the '>' is true) */
 
547
    if (matroska->num_levels >= EBML_MAX_DEPTH) {
 
548
        av_log(matroska->ctx, AV_LOG_ERROR,
 
549
               "File moves beyond max. allowed depth (%d)\n", EBML_MAX_DEPTH);
 
550
        return AVERROR(ENOSYS);
 
551
    }
 
552
 
 
553
    /* remember level */
 
554
    level = &matroska->levels[matroska->num_levels++];
 
555
    level->start = url_ftell(pb);
 
556
    level->length = length;
 
557
 
 
558
    return 0;
 
559
}
 
560
 
 
561
/*
 
562
 * Read the next element as binary data.
 
563
 * 0 is success, < 0 is failure.
 
564
 */
 
565
 
 
566
static int
 
567
ebml_read_binary (MatroskaDemuxContext *matroska,
 
568
                  uint32_t             *id,
 
569
                  uint8_t             **binary,
 
570
                  int                  *size)
 
571
{
 
572
    ByteIOContext *pb = &matroska->ctx->pb;
 
573
    uint64_t rlength;
 
574
    int res;
 
575
 
 
576
    if ((res = ebml_read_element_id(matroska, id, NULL)) < 0 ||
 
577
        (res = ebml_read_element_length(matroska, &rlength)) < 0)
 
578
        return res;
 
579
    *size = rlength;
 
580
 
 
581
    if (!(*binary = av_malloc(*size))) {
 
582
        av_log(matroska->ctx, AV_LOG_ERROR,
 
583
               "Memory allocation error\n");
 
584
        return AVERROR(ENOMEM);
 
585
    }
 
586
 
 
587
    if (get_buffer(pb, *binary, *size) != *size) {
 
588
        offset_t pos = url_ftell(pb);
 
589
        av_log(matroska->ctx, AV_LOG_ERROR,
 
590
               "Read error at pos. %"PRIu64" (0x%"PRIx64")\n", pos, pos);
 
591
        return AVERROR(EIO);
 
592
    }
 
593
 
 
594
    return 0;
 
595
}
 
596
 
 
597
/*
 
598
 * Read signed/unsigned "EBML" numbers.
 
599
 * Return: number of bytes processed, < 0 on error.
 
600
 * XXX: use ebml_read_num().
 
601
 */
 
602
 
 
603
static int
 
604
matroska_ebmlnum_uint (uint8_t  *data,
 
605
                       uint32_t  size,
 
606
                       uint64_t *num)
 
607
{
 
608
    int len_mask = 0x80, read = 1, n = 1, num_ffs = 0;
 
609
    uint64_t total;
 
610
 
 
611
    if (size <= 0)
 
612
        return AVERROR_INVALIDDATA;
 
613
 
 
614
    total = data[0];
 
615
    while (read <= 8 && !(total & len_mask)) {
 
616
        read++;
 
617
        len_mask >>= 1;
 
618
    }
 
619
    if (read > 8)
 
620
        return AVERROR_INVALIDDATA;
 
621
 
 
622
    if ((total &= (len_mask - 1)) == len_mask - 1)
 
623
        num_ffs++;
 
624
    if (size < read)
 
625
        return AVERROR_INVALIDDATA;
 
626
    while (n < read) {
 
627
        if (data[n] == 0xff)
 
628
            num_ffs++;
 
629
        total = (total << 8) | data[n];
 
630
        n++;
 
631
    }
 
632
 
 
633
    if (read == num_ffs)
 
634
        *num = (uint64_t)-1;
 
635
    else
 
636
        *num = total;
 
637
 
 
638
    return read;
 
639
}
 
640
 
 
641
/*
 
642
 * Same as above, but signed.
 
643
 */
 
644
 
 
645
static int
 
646
matroska_ebmlnum_sint (uint8_t  *data,
 
647
                       uint32_t  size,
 
648
                       int64_t  *num)
 
649
{
 
650
    uint64_t unum;
 
651
    int res;
 
652
 
 
653
    /* read as unsigned number first */
 
654
    if ((res = matroska_ebmlnum_uint(data, size, &unum)) < 0)
 
655
        return res;
 
656
 
 
657
    /* make signed (weird way) */
 
658
    if (unum == (uint64_t)-1)
 
659
        *num = INT64_MAX;
 
660
    else
 
661
        *num = unum - ((1LL << ((7 * res) - 1)) - 1);
 
662
 
 
663
    return res;
 
664
}
 
665
 
 
666
/*
 
667
 * Read an EBML header.
 
668
 * 0 is success, < 0 is failure.
 
669
 */
 
670
 
 
671
static int
 
672
ebml_read_header (MatroskaDemuxContext *matroska,
 
673
                  char                **doctype,
 
674
                  int                  *version)
 
675
{
 
676
    uint32_t id;
 
677
    int level_up, res = 0;
 
678
 
 
679
    /* default init */
 
680
    if (doctype)
 
681
        *doctype = NULL;
 
682
    if (version)
 
683
        *version = 1;
 
684
 
 
685
    if (!(id = ebml_peek_id(matroska, &level_up)) ||
 
686
        level_up != 0 || id != EBML_ID_HEADER) {
 
687
        av_log(matroska->ctx, AV_LOG_ERROR,
 
688
               "This is not an EBML file (id=0x%x/0x%x)\n", id, EBML_ID_HEADER);
 
689
        return AVERROR_INVALIDDATA;
 
690
    }
 
691
    if ((res = ebml_read_master(matroska, &id)) < 0)
 
692
        return res;
 
693
 
 
694
    while (res == 0) {
 
695
        if (!(id = ebml_peek_id(matroska, &level_up)))
 
696
            return AVERROR(EIO);
 
697
 
 
698
        /* end-of-header */
 
699
        if (level_up)
 
700
            break;
 
701
 
 
702
        switch (id) {
 
703
            /* is our read version uptodate? */
 
704
            case EBML_ID_EBMLREADVERSION: {
 
705
                uint64_t num;
 
706
 
 
707
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
708
                    return res;
 
709
                if (num > EBML_VERSION) {
 
710
                    av_log(matroska->ctx, AV_LOG_ERROR,
 
711
                           "EBML version %"PRIu64" (> %d) is not supported\n",
 
712
                           num, EBML_VERSION);
 
713
                    return AVERROR_INVALIDDATA;
 
714
                }
 
715
                break;
 
716
            }
 
717
 
 
718
            /* we only handle 8 byte lengths at max */
 
719
            case EBML_ID_EBMLMAXSIZELENGTH: {
 
720
                uint64_t num;
 
721
 
 
722
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
723
                    return res;
 
724
                if (num > sizeof(uint64_t)) {
 
725
                    av_log(matroska->ctx, AV_LOG_ERROR,
 
726
                           "Integers of size %"PRIu64" (> %zd) not supported\n",
 
727
                           num, sizeof(uint64_t));
 
728
                    return AVERROR_INVALIDDATA;
 
729
                }
 
730
                break;
 
731
            }
 
732
 
 
733
            /* we handle 4 byte IDs at max */
 
734
            case EBML_ID_EBMLMAXIDLENGTH: {
 
735
                uint64_t num;
 
736
 
 
737
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
738
                    return res;
 
739
                if (num > sizeof(uint32_t)) {
 
740
                    av_log(matroska->ctx, AV_LOG_ERROR,
 
741
                           "IDs of size %"PRIu64" (> %zu) not supported\n",
 
742
                            num, sizeof(uint32_t));
 
743
                    return AVERROR_INVALIDDATA;
 
744
                }
 
745
                break;
 
746
            }
 
747
 
 
748
            case EBML_ID_DOCTYPE: {
 
749
                char *text;
 
750
 
 
751
                if ((res = ebml_read_ascii(matroska, &id, &text)) < 0)
 
752
                    return res;
 
753
                if (doctype) {
 
754
                    if (*doctype)
 
755
                        av_free(*doctype);
 
756
                    *doctype = text;
 
757
                } else
 
758
                    av_free(text);
 
759
                break;
 
760
            }
 
761
 
 
762
            case EBML_ID_DOCTYPEREADVERSION: {
 
763
                uint64_t num;
 
764
 
 
765
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
766
                    return res;
 
767
                if (version)
 
768
                    *version = num;
 
769
                break;
 
770
            }
 
771
 
 
772
            default:
 
773
                av_log(matroska->ctx, AV_LOG_INFO,
 
774
                       "Unknown data type 0x%x in EBML header", id);
 
775
                /* pass-through */
 
776
 
 
777
            case EBML_ID_VOID:
 
778
            /* we ignore these two, as they don't tell us anything we
 
779
             * care about */
 
780
            case EBML_ID_EBMLVERSION:
 
781
            case EBML_ID_DOCTYPEVERSION:
 
782
                res = ebml_read_skip (matroska);
 
783
                break;
 
784
        }
 
785
    }
 
786
 
 
787
    return 0;
 
788
}
 
789
 
 
790
 
 
791
static int
 
792
matroska_find_track_by_num (MatroskaDemuxContext *matroska,
 
793
                            int                   num)
 
794
{
 
795
    int i;
 
796
 
 
797
    for (i = 0; i < matroska->num_tracks; i++)
 
798
        if (matroska->tracks[i]->num == num)
 
799
            return i;
 
800
 
 
801
    return -1;
 
802
}
 
803
 
 
804
 
 
805
/*
 
806
 * Put one packet in an application-supplied AVPacket struct.
 
807
 * Returns 0 on success or -1 on failure.
 
808
 */
 
809
 
 
810
static int
 
811
matroska_deliver_packet (MatroskaDemuxContext *matroska,
 
812
                         AVPacket             *pkt)
 
813
{
 
814
    if (matroska->num_packets > 0) {
 
815
        memcpy(pkt, matroska->packets[0], sizeof(AVPacket));
 
816
        av_free(matroska->packets[0]);
 
817
        if (matroska->num_packets > 1) {
 
818
            memmove(&matroska->packets[0], &matroska->packets[1],
 
819
                    (matroska->num_packets - 1) * sizeof(AVPacket *));
 
820
            matroska->packets =
 
821
                av_realloc(matroska->packets, (matroska->num_packets - 1) *
 
822
                           sizeof(AVPacket *));
 
823
        } else {
 
824
            av_freep(&matroska->packets);
 
825
        }
 
826
        matroska->num_packets--;
 
827
        return 0;
 
828
    }
 
829
 
 
830
    return -1;
 
831
}
 
832
 
 
833
/*
 
834
 * Put a packet into our internal queue. Will be delivered to the
 
835
 * user/application during the next get_packet() call.
 
836
 */
 
837
 
 
838
static void
 
839
matroska_queue_packet (MatroskaDemuxContext *matroska,
 
840
                       AVPacket             *pkt)
 
841
{
 
842
    matroska->packets =
 
843
        av_realloc(matroska->packets, (matroska->num_packets + 1) *
 
844
                   sizeof(AVPacket *));
 
845
    matroska->packets[matroska->num_packets] = pkt;
 
846
    matroska->num_packets++;
 
847
}
 
848
 
 
849
 
 
850
/*
 
851
 * Autodetecting...
 
852
 */
 
853
 
 
854
static int
 
855
matroska_probe (AVProbeData *p)
 
856
{
 
857
    uint64_t total = 0;
 
858
    int len_mask = 0x80, size = 1, n = 1;
 
859
    uint8_t probe_data[] = { 'm', 'a', 't', 'r', 'o', 's', 'k', 'a' };
 
860
 
 
861
    /* ebml header? */
 
862
    if (AV_RB32(p->buf) != EBML_ID_HEADER)
 
863
        return 0;
 
864
 
 
865
    /* length of header */
 
866
    total = p->buf[4];
 
867
    while (size <= 8 && !(total & len_mask)) {
 
868
        size++;
 
869
        len_mask >>= 1;
 
870
    }
 
871
    if (size > 8)
 
872
      return 0;
 
873
    total &= (len_mask - 1);
 
874
    while (n < size)
 
875
        total = (total << 8) | p->buf[4 + n++];
 
876
 
 
877
    /* does the probe data contain the whole header? */
 
878
    if (p->buf_size < 4 + size + total)
 
879
      return 0;
 
880
 
 
881
    /* the header must contain the document type 'matroska'. For now,
 
882
     * we don't parse the whole header but simply check for the
 
883
     * availability of that array of characters inside the header.
 
884
     * Not fully fool-proof, but good enough. */
 
885
    for (n = 4 + size; n <= 4 + size + total - sizeof(probe_data); n++)
 
886
        if (!memcmp (&p->buf[n], probe_data, sizeof(probe_data)))
 
887
            return AVPROBE_SCORE_MAX;
 
888
 
 
889
    return 0;
 
890
}
 
891
 
 
892
/*
 
893
 * From here on, it's all XML-style DTD stuff... Needs no comments.
 
894
 */
 
895
 
 
896
static int
 
897
matroska_parse_info (MatroskaDemuxContext *matroska)
 
898
{
 
899
    int res = 0;
 
900
    uint32_t id;
 
901
 
 
902
    av_log(matroska->ctx, AV_LOG_DEBUG, "Parsing info...\n");
 
903
 
 
904
    while (res == 0) {
 
905
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
906
            res = AVERROR(EIO);
 
907
            break;
 
908
        } else if (matroska->level_up) {
 
909
            matroska->level_up--;
 
910
            break;
 
911
        }
 
912
 
 
913
        switch (id) {
 
914
            /* cluster timecode */
 
915
            case MATROSKA_ID_TIMECODESCALE: {
 
916
                uint64_t num;
 
917
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
918
                    break;
 
919
                matroska->time_scale = num;
 
920
                break;
 
921
            }
 
922
 
 
923
            case MATROSKA_ID_DURATION: {
 
924
                double num;
 
925
                if ((res = ebml_read_float(matroska, &id, &num)) < 0)
 
926
                    break;
 
927
                matroska->ctx->duration = num * matroska->time_scale * 1000 / AV_TIME_BASE;
 
928
                break;
 
929
            }
 
930
 
 
931
            case MATROSKA_ID_TITLE: {
 
932
                char *text;
 
933
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
934
                    break;
 
935
                strncpy(matroska->ctx->title, text,
 
936
                        sizeof(matroska->ctx->title)-1);
 
937
                av_free(text);
 
938
                break;
 
939
            }
 
940
 
 
941
            case MATROSKA_ID_WRITINGAPP: {
 
942
                char *text;
 
943
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
944
                    break;
 
945
                matroska->writing_app = text;
 
946
                break;
 
947
            }
 
948
 
 
949
            case MATROSKA_ID_MUXINGAPP: {
 
950
                char *text;
 
951
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
952
                    break;
 
953
                matroska->muxing_app = text;
 
954
                break;
 
955
            }
 
956
 
 
957
            case MATROSKA_ID_DATEUTC: {
 
958
                int64_t time;
 
959
                if ((res = ebml_read_date(matroska, &id, &time)) < 0)
 
960
                    break;
 
961
                matroska->created = time;
 
962
                break;
 
963
            }
 
964
 
 
965
            default:
 
966
                av_log(matroska->ctx, AV_LOG_INFO,
 
967
                       "Unknown entry 0x%x in info header\n", id);
 
968
                /* fall-through */
 
969
 
 
970
            case EBML_ID_VOID:
 
971
                res = ebml_read_skip(matroska);
 
972
                break;
 
973
        }
 
974
 
 
975
        if (matroska->level_up) {
 
976
            matroska->level_up--;
 
977
            break;
 
978
        }
 
979
    }
 
980
 
 
981
    return res;
 
982
}
 
983
 
 
984
static int
 
985
matroska_add_stream (MatroskaDemuxContext *matroska)
 
986
{
 
987
    int res = 0;
 
988
    uint32_t id;
 
989
    MatroskaTrack *track;
 
990
 
 
991
    av_log(matroska->ctx, AV_LOG_DEBUG, "parsing track, adding stream..,\n");
 
992
 
 
993
    /* Allocate a generic track. As soon as we know its type we'll realloc. */
 
994
    track = av_mallocz(MAX_TRACK_SIZE);
 
995
    matroska->num_tracks++;
 
996
    strcpy(track->language, "eng");
 
997
 
 
998
    /* start with the master */
 
999
    if ((res = ebml_read_master(matroska, &id)) < 0)
 
1000
        return res;
 
1001
 
 
1002
    /* try reading the trackentry headers */
 
1003
    while (res == 0) {
 
1004
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1005
            res = AVERROR(EIO);
 
1006
            break;
 
1007
        } else if (matroska->level_up > 0) {
 
1008
            matroska->level_up--;
 
1009
            break;
 
1010
        }
 
1011
 
 
1012
        switch (id) {
 
1013
            /* track number (unique stream ID) */
 
1014
            case MATROSKA_ID_TRACKNUMBER: {
 
1015
                uint64_t num;
 
1016
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1017
                    break;
 
1018
                track->num = num;
 
1019
                break;
 
1020
            }
 
1021
 
 
1022
            /* track UID (unique identifier) */
 
1023
            case MATROSKA_ID_TRACKUID: {
 
1024
                uint64_t num;
 
1025
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1026
                    break;
 
1027
                track->uid = num;
 
1028
                break;
 
1029
            }
 
1030
 
 
1031
            /* track type (video, audio, combined, subtitle, etc.) */
 
1032
            case MATROSKA_ID_TRACKTYPE: {
 
1033
                uint64_t num;
 
1034
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1035
                    break;
 
1036
                if (track->type && track->type != num) {
 
1037
                    av_log(matroska->ctx, AV_LOG_INFO,
 
1038
                           "More than one tracktype in an entry - skip\n");
 
1039
                    break;
 
1040
                }
 
1041
                track->type = num;
 
1042
 
 
1043
                switch (track->type) {
 
1044
                    case MATROSKA_TRACK_TYPE_VIDEO:
 
1045
                    case MATROSKA_TRACK_TYPE_AUDIO:
 
1046
                    case MATROSKA_TRACK_TYPE_SUBTITLE:
 
1047
                        break;
 
1048
                    case MATROSKA_TRACK_TYPE_COMPLEX:
 
1049
                    case MATROSKA_TRACK_TYPE_LOGO:
 
1050
                    case MATROSKA_TRACK_TYPE_CONTROL:
 
1051
                    default:
 
1052
                        av_log(matroska->ctx, AV_LOG_INFO,
 
1053
                               "Unknown or unsupported track type 0x%x\n",
 
1054
                               track->type);
 
1055
                        track->type = 0;
 
1056
                        break;
 
1057
                }
 
1058
                matroska->tracks[matroska->num_tracks - 1] = track;
 
1059
                break;
 
1060
            }
 
1061
 
 
1062
            /* tracktype specific stuff for video */
 
1063
            case MATROSKA_ID_TRACKVIDEO: {
 
1064
                MatroskaVideoTrack *videotrack;
 
1065
                if (!track->type)
 
1066
                    track->type = MATROSKA_TRACK_TYPE_VIDEO;
 
1067
                if (track->type != MATROSKA_TRACK_TYPE_VIDEO) {
 
1068
                    av_log(matroska->ctx, AV_LOG_INFO,
 
1069
                           "video data in non-video track - ignoring\n");
 
1070
                    res = AVERROR_INVALIDDATA;
 
1071
                    break;
 
1072
                } else if ((res = ebml_read_master(matroska, &id)) < 0)
 
1073
                    break;
 
1074
                videotrack = (MatroskaVideoTrack *)track;
 
1075
 
 
1076
                while (res == 0) {
 
1077
                    if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1078
                        res = AVERROR(EIO);
 
1079
                        break;
 
1080
                    } else if (matroska->level_up > 0) {
 
1081
                        matroska->level_up--;
 
1082
                        break;
 
1083
                    }
 
1084
 
 
1085
                    switch (id) {
 
1086
                        /* fixme, this should be one-up, but I get it here */
 
1087
                        case MATROSKA_ID_TRACKDEFAULTDURATION: {
 
1088
                            uint64_t num;
 
1089
                            if ((res = ebml_read_uint (matroska, &id,
 
1090
                                                       &num)) < 0)
 
1091
                                break;
 
1092
                            track->default_duration = num;
 
1093
                            break;
 
1094
                        }
 
1095
 
 
1096
                        /* video framerate */
 
1097
                        case MATROSKA_ID_VIDEOFRAMERATE: {
 
1098
                            double num;
 
1099
                            if ((res = ebml_read_float(matroska, &id,
 
1100
                                                       &num)) < 0)
 
1101
                                break;
 
1102
                            if (!track->default_duration)
 
1103
                                track->default_duration = 1000000000/num;
 
1104
                            break;
 
1105
                        }
 
1106
 
 
1107
                        /* width of the size to display the video at */
 
1108
                        case MATROSKA_ID_VIDEODISPLAYWIDTH: {
 
1109
                            uint64_t num;
 
1110
                            if ((res = ebml_read_uint(matroska, &id,
 
1111
                                                      &num)) < 0)
 
1112
                                break;
 
1113
                            videotrack->display_width = num;
 
1114
                            break;
 
1115
                        }
 
1116
 
 
1117
                        /* height of the size to display the video at */
 
1118
                        case MATROSKA_ID_VIDEODISPLAYHEIGHT: {
 
1119
                            uint64_t num;
 
1120
                            if ((res = ebml_read_uint(matroska, &id,
 
1121
                                                      &num)) < 0)
 
1122
                                break;
 
1123
                            videotrack->display_height = num;
 
1124
                            break;
 
1125
                        }
 
1126
 
 
1127
                        /* width of the video in the file */
 
1128
                        case MATROSKA_ID_VIDEOPIXELWIDTH: {
 
1129
                            uint64_t num;
 
1130
                            if ((res = ebml_read_uint(matroska, &id,
 
1131
                                                      &num)) < 0)
 
1132
                                break;
 
1133
                            videotrack->pixel_width = num;
 
1134
                            break;
 
1135
                        }
 
1136
 
 
1137
                        /* height of the video in the file */
 
1138
                        case MATROSKA_ID_VIDEOPIXELHEIGHT: {
 
1139
                            uint64_t num;
 
1140
                            if ((res = ebml_read_uint(matroska, &id,
 
1141
                                                      &num)) < 0)
 
1142
                                break;
 
1143
                            videotrack->pixel_height = num;
 
1144
                            break;
 
1145
                        }
 
1146
 
 
1147
                        /* whether the video is interlaced */
 
1148
                        case MATROSKA_ID_VIDEOFLAGINTERLACED: {
 
1149
                            uint64_t num;
 
1150
                            if ((res = ebml_read_uint(matroska, &id,
 
1151
                                                      &num)) < 0)
 
1152
                                break;
 
1153
                            if (num)
 
1154
                                track->flags |=
 
1155
                                    MATROSKA_VIDEOTRACK_INTERLACED;
 
1156
                            else
 
1157
                                track->flags &=
 
1158
                                    ~MATROSKA_VIDEOTRACK_INTERLACED;
 
1159
                            break;
 
1160
                        }
 
1161
 
 
1162
                        /* stereo mode (whether the video has two streams,
 
1163
                         * where one is for the left eye and the other for
 
1164
                         * the right eye, which creates a 3D-like
 
1165
                         * effect) */
 
1166
                        case MATROSKA_ID_VIDEOSTEREOMODE: {
 
1167
                            uint64_t num;
 
1168
                            if ((res = ebml_read_uint(matroska, &id,
 
1169
                                                      &num)) < 0)
 
1170
                                break;
 
1171
                            if (num != MATROSKA_EYE_MODE_MONO &&
 
1172
                                num != MATROSKA_EYE_MODE_LEFT &&
 
1173
                                num != MATROSKA_EYE_MODE_RIGHT &&
 
1174
                                num != MATROSKA_EYE_MODE_BOTH) {
 
1175
                                av_log(matroska->ctx, AV_LOG_INFO,
 
1176
                                       "Ignoring unknown eye mode 0x%x\n",
 
1177
                                       (uint32_t) num);
 
1178
                                break;
 
1179
                            }
 
1180
                            videotrack->eye_mode = num;
 
1181
                            break;
 
1182
                        }
 
1183
 
 
1184
                        /* aspect ratio behaviour */
 
1185
                        case MATROSKA_ID_VIDEOASPECTRATIO: {
 
1186
                            uint64_t num;
 
1187
                            if ((res = ebml_read_uint(matroska, &id,
 
1188
                                                      &num)) < 0)
 
1189
                                break;
 
1190
                            if (num != MATROSKA_ASPECT_RATIO_MODE_FREE &&
 
1191
                                num != MATROSKA_ASPECT_RATIO_MODE_KEEP &&
 
1192
                                num != MATROSKA_ASPECT_RATIO_MODE_FIXED) {
 
1193
                                av_log(matroska->ctx, AV_LOG_INFO,
 
1194
                                       "Ignoring unknown aspect ratio 0x%x\n",
 
1195
                                       (uint32_t) num);
 
1196
                                break;
 
1197
                            }
 
1198
                            videotrack->ar_mode = num;
 
1199
                            break;
 
1200
                        }
 
1201
 
 
1202
                        /* colourspace (only matters for raw video)
 
1203
                         * fourcc */
 
1204
                        case MATROSKA_ID_VIDEOCOLOURSPACE: {
 
1205
                            uint64_t num;
 
1206
                            if ((res = ebml_read_uint(matroska, &id,
 
1207
                                                      &num)) < 0)
 
1208
                                break;
 
1209
                            videotrack->fourcc = num;
 
1210
                            break;
 
1211
                        }
 
1212
 
 
1213
                        default:
 
1214
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1215
                                   "Unknown video track header entry "
 
1216
                                   "0x%x - ignoring\n", id);
 
1217
                            /* pass-through */
 
1218
 
 
1219
                        case EBML_ID_VOID:
 
1220
                            res = ebml_read_skip(matroska);
 
1221
                            break;
 
1222
                    }
 
1223
 
 
1224
                    if (matroska->level_up) {
 
1225
                        matroska->level_up--;
 
1226
                        break;
 
1227
                    }
 
1228
                }
 
1229
                break;
 
1230
            }
 
1231
 
 
1232
            /* tracktype specific stuff for audio */
 
1233
            case MATROSKA_ID_TRACKAUDIO: {
 
1234
                MatroskaAudioTrack *audiotrack;
 
1235
                if (!track->type)
 
1236
                    track->type = MATROSKA_TRACK_TYPE_AUDIO;
 
1237
                if (track->type != MATROSKA_TRACK_TYPE_AUDIO) {
 
1238
                    av_log(matroska->ctx, AV_LOG_INFO,
 
1239
                           "audio data in non-audio track - ignoring\n");
 
1240
                    res = AVERROR_INVALIDDATA;
 
1241
                    break;
 
1242
                } else if ((res = ebml_read_master(matroska, &id)) < 0)
 
1243
                    break;
 
1244
                audiotrack = (MatroskaAudioTrack *)track;
 
1245
                audiotrack->channels = 1;
 
1246
                audiotrack->samplerate = 8000;
 
1247
 
 
1248
                while (res == 0) {
 
1249
                    if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1250
                        res = AVERROR(EIO);
 
1251
                        break;
 
1252
                    } else if (matroska->level_up > 0) {
 
1253
                        matroska->level_up--;
 
1254
                        break;
 
1255
                    }
 
1256
 
 
1257
                    switch (id) {
 
1258
                        /* samplerate */
 
1259
                        case MATROSKA_ID_AUDIOSAMPLINGFREQ: {
 
1260
                            double num;
 
1261
                            if ((res = ebml_read_float(matroska, &id,
 
1262
                                                       &num)) < 0)
 
1263
                                break;
 
1264
                            audiotrack->internal_samplerate =
 
1265
                            audiotrack->samplerate = num;
 
1266
                            break;
 
1267
                        }
 
1268
 
 
1269
                        case MATROSKA_ID_AUDIOOUTSAMPLINGFREQ: {
 
1270
                            double num;
 
1271
                            if ((res = ebml_read_float(matroska, &id,
 
1272
                                                       &num)) < 0)
 
1273
                                break;
 
1274
                            audiotrack->samplerate = num;
 
1275
                            break;
 
1276
                        }
 
1277
 
 
1278
                            /* bitdepth */
 
1279
                        case MATROSKA_ID_AUDIOBITDEPTH: {
 
1280
                            uint64_t num;
 
1281
                            if ((res = ebml_read_uint(matroska, &id,
 
1282
                                                      &num)) < 0)
 
1283
                                break;
 
1284
                            audiotrack->bitdepth = num;
 
1285
                            break;
 
1286
                        }
 
1287
 
 
1288
                            /* channels */
 
1289
                        case MATROSKA_ID_AUDIOCHANNELS: {
 
1290
                            uint64_t num;
 
1291
                            if ((res = ebml_read_uint(matroska, &id,
 
1292
                                                      &num)) < 0)
 
1293
                                break;
 
1294
                            audiotrack->channels = num;
 
1295
                            break;
 
1296
                        }
 
1297
 
 
1298
                        default:
 
1299
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1300
                                   "Unknown audio track header entry "
 
1301
                                   "0x%x - ignoring\n", id);
 
1302
                            /* pass-through */
 
1303
 
 
1304
                        case EBML_ID_VOID:
 
1305
                            res = ebml_read_skip(matroska);
 
1306
                            break;
 
1307
                    }
 
1308
 
 
1309
                    if (matroska->level_up) {
 
1310
                        matroska->level_up--;
 
1311
                        break;
 
1312
                    }
 
1313
                }
 
1314
                break;
 
1315
            }
 
1316
 
 
1317
                /* codec identifier */
 
1318
            case MATROSKA_ID_CODECID: {
 
1319
                char *text;
 
1320
                if ((res = ebml_read_ascii(matroska, &id, &text)) < 0)
 
1321
                    break;
 
1322
                track->codec_id = text;
 
1323
                break;
 
1324
            }
 
1325
 
 
1326
                /* codec private data */
 
1327
            case MATROSKA_ID_CODECPRIVATE: {
 
1328
                uint8_t *data;
 
1329
                int size;
 
1330
                if ((res = ebml_read_binary(matroska, &id, &data, &size) < 0))
 
1331
                    break;
 
1332
                track->codec_priv = data;
 
1333
                track->codec_priv_size = size;
 
1334
                break;
 
1335
            }
 
1336
 
 
1337
                /* name of the codec */
 
1338
            case MATROSKA_ID_CODECNAME: {
 
1339
                char *text;
 
1340
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
1341
                    break;
 
1342
                track->codec_name = text;
 
1343
                break;
 
1344
            }
 
1345
 
 
1346
                /* name of this track */
 
1347
            case MATROSKA_ID_TRACKNAME: {
 
1348
                char *text;
 
1349
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
1350
                    break;
 
1351
                track->name = text;
 
1352
                break;
 
1353
            }
 
1354
 
 
1355
                /* language (matters for audio/subtitles, mostly) */
 
1356
            case MATROSKA_ID_TRACKLANGUAGE: {
 
1357
                char *text, *end;
 
1358
                if ((res = ebml_read_utf8(matroska, &id, &text)) < 0)
 
1359
                    break;
 
1360
                if ((end = strchr(text, '-')))
 
1361
                    *end = '\0';
 
1362
                if (strlen(text) == 3)
 
1363
                    strcpy(track->language, text);
 
1364
                av_free(text);
 
1365
                break;
 
1366
            }
 
1367
 
 
1368
                /* whether this is actually used */
 
1369
            case MATROSKA_ID_TRACKFLAGENABLED: {
 
1370
                uint64_t num;
 
1371
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1372
                    break;
 
1373
                if (num)
 
1374
                    track->flags |= MATROSKA_TRACK_ENABLED;
 
1375
                else
 
1376
                    track->flags &= ~MATROSKA_TRACK_ENABLED;
 
1377
                break;
 
1378
            }
 
1379
 
 
1380
                /* whether it's the default for this track type */
 
1381
            case MATROSKA_ID_TRACKFLAGDEFAULT: {
 
1382
                uint64_t num;
 
1383
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1384
                    break;
 
1385
                if (num)
 
1386
                    track->flags |= MATROSKA_TRACK_DEFAULT;
 
1387
                else
 
1388
                    track->flags &= ~MATROSKA_TRACK_DEFAULT;
 
1389
                break;
 
1390
            }
 
1391
 
 
1392
                /* lacing (like MPEG, where blocks don't end/start on frame
 
1393
                 * boundaries) */
 
1394
            case MATROSKA_ID_TRACKFLAGLACING: {
 
1395
                uint64_t num;
 
1396
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1397
                    break;
 
1398
                if (num)
 
1399
                    track->flags |= MATROSKA_TRACK_LACING;
 
1400
                else
 
1401
                    track->flags &= ~MATROSKA_TRACK_LACING;
 
1402
                break;
 
1403
            }
 
1404
 
 
1405
                /* default length (in time) of one data block in this track */
 
1406
            case MATROSKA_ID_TRACKDEFAULTDURATION: {
 
1407
                uint64_t num;
 
1408
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
1409
                    break;
 
1410
                track->default_duration = num;
 
1411
                break;
 
1412
            }
 
1413
 
 
1414
            default:
 
1415
                av_log(matroska->ctx, AV_LOG_INFO,
 
1416
                       "Unknown track header entry 0x%x - ignoring\n", id);
 
1417
                /* pass-through */
 
1418
 
 
1419
            case EBML_ID_VOID:
 
1420
            /* we ignore these because they're nothing useful. */
 
1421
            case MATROSKA_ID_CODECINFOURL:
 
1422
            case MATROSKA_ID_CODECDOWNLOADURL:
 
1423
            case MATROSKA_ID_TRACKMINCACHE:
 
1424
            case MATROSKA_ID_TRACKMAXCACHE:
 
1425
                res = ebml_read_skip(matroska);
 
1426
                break;
 
1427
        }
 
1428
 
 
1429
        if (matroska->level_up) {
 
1430
            matroska->level_up--;
 
1431
            break;
 
1432
        }
 
1433
    }
 
1434
 
 
1435
    return res;
 
1436
}
 
1437
 
 
1438
static int
 
1439
matroska_parse_tracks (MatroskaDemuxContext *matroska)
 
1440
{
 
1441
    int res = 0;
 
1442
    uint32_t id;
 
1443
 
 
1444
    av_log(matroska->ctx, AV_LOG_DEBUG, "parsing tracks...\n");
 
1445
 
 
1446
    while (res == 0) {
 
1447
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1448
            res = AVERROR(EIO);
 
1449
            break;
 
1450
        } else if (matroska->level_up) {
 
1451
            matroska->level_up--;
 
1452
            break;
 
1453
        }
 
1454
 
 
1455
        switch (id) {
 
1456
            /* one track within the "all-tracks" header */
 
1457
            case MATROSKA_ID_TRACKENTRY:
 
1458
                res = matroska_add_stream(matroska);
 
1459
                break;
 
1460
 
 
1461
            default:
 
1462
                av_log(matroska->ctx, AV_LOG_INFO,
 
1463
                       "Unknown entry 0x%x in track header\n", id);
 
1464
                /* fall-through */
 
1465
 
 
1466
            case EBML_ID_VOID:
 
1467
                res = ebml_read_skip(matroska);
 
1468
                break;
 
1469
        }
 
1470
 
 
1471
        if (matroska->level_up) {
 
1472
            matroska->level_up--;
 
1473
            break;
 
1474
        }
 
1475
    }
 
1476
 
 
1477
    return res;
 
1478
}
 
1479
 
 
1480
static int
 
1481
matroska_parse_index (MatroskaDemuxContext *matroska)
 
1482
{
 
1483
    int res = 0;
 
1484
    uint32_t id;
 
1485
    MatroskaDemuxIndex idx;
 
1486
 
 
1487
    av_log(matroska->ctx, AV_LOG_DEBUG, "parsing index...\n");
 
1488
 
 
1489
    while (res == 0) {
 
1490
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1491
            res = AVERROR(EIO);
 
1492
            break;
 
1493
        } else if (matroska->level_up) {
 
1494
            matroska->level_up--;
 
1495
            break;
 
1496
        }
 
1497
 
 
1498
        switch (id) {
 
1499
            /* one single index entry ('point') */
 
1500
            case MATROSKA_ID_POINTENTRY:
 
1501
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
1502
                    break;
 
1503
 
 
1504
                /* in the end, we hope to fill one entry with a
 
1505
                 * timestamp, a file position and a tracknum */
 
1506
                idx.pos   = (uint64_t) -1;
 
1507
                idx.time  = (uint64_t) -1;
 
1508
                idx.track = (uint16_t) -1;
 
1509
 
 
1510
                while (res == 0) {
 
1511
                    if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1512
                        res = AVERROR(EIO);
 
1513
                        break;
 
1514
                    } else if (matroska->level_up) {
 
1515
                        matroska->level_up--;
 
1516
                        break;
 
1517
                    }
 
1518
 
 
1519
                    switch (id) {
 
1520
                        /* one single index entry ('point') */
 
1521
                        case MATROSKA_ID_CUETIME: {
 
1522
                            uint64_t time;
 
1523
                            if ((res = ebml_read_uint(matroska, &id,
 
1524
                                                      &time)) < 0)
 
1525
                                break;
 
1526
                            idx.time = time * matroska->time_scale;
 
1527
                            break;
 
1528
                        }
 
1529
 
 
1530
                        /* position in the file + track to which it
 
1531
                         * belongs */
 
1532
                        case MATROSKA_ID_CUETRACKPOSITION:
 
1533
                            if ((res = ebml_read_master(matroska, &id)) < 0)
 
1534
                                break;
 
1535
 
 
1536
                            while (res == 0) {
 
1537
                                if (!(id = ebml_peek_id (matroska,
 
1538
                                                    &matroska->level_up))) {
 
1539
                                    res = AVERROR(EIO);
 
1540
                                    break;
 
1541
                                } else if (matroska->level_up) {
 
1542
                                    matroska->level_up--;
 
1543
                                    break;
 
1544
                                }
 
1545
 
 
1546
                                switch (id) {
 
1547
                                    /* track number */
 
1548
                                    case MATROSKA_ID_CUETRACK: {
 
1549
                                        uint64_t num;
 
1550
                                        if ((res = ebml_read_uint(matroska,
 
1551
                                                          &id, &num)) < 0)
 
1552
                                            break;
 
1553
                                        idx.track = num;
 
1554
                                        break;
 
1555
                                    }
 
1556
 
 
1557
                                        /* position in file */
 
1558
                                    case MATROSKA_ID_CUECLUSTERPOSITION: {
 
1559
                                        uint64_t num;
 
1560
                                        if ((res = ebml_read_uint(matroska,
 
1561
                                                          &id, &num)) < 0)
 
1562
                                            break;
 
1563
                                        idx.pos = num+matroska->segment_start;
 
1564
                                        break;
 
1565
                                    }
 
1566
 
 
1567
                                    default:
 
1568
                                        av_log(matroska->ctx, AV_LOG_INFO,
 
1569
                                               "Unknown entry 0x%x in "
 
1570
                                               "CuesTrackPositions\n", id);
 
1571
                                        /* fall-through */
 
1572
 
 
1573
                                    case EBML_ID_VOID:
 
1574
                                        res = ebml_read_skip(matroska);
 
1575
                                        break;
 
1576
                                }
 
1577
 
 
1578
                                if (matroska->level_up) {
 
1579
                                    matroska->level_up--;
 
1580
                                    break;
 
1581
                                }
 
1582
                            }
 
1583
 
 
1584
                            break;
 
1585
 
 
1586
                        default:
 
1587
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1588
                                   "Unknown entry 0x%x in cuespoint "
 
1589
                                   "index\n", id);
 
1590
                            /* fall-through */
 
1591
 
 
1592
                        case EBML_ID_VOID:
 
1593
                            res = ebml_read_skip(matroska);
 
1594
                            break;
 
1595
                    }
 
1596
 
 
1597
                    if (matroska->level_up) {
 
1598
                        matroska->level_up--;
 
1599
                        break;
 
1600
                    }
 
1601
                }
 
1602
 
 
1603
                /* so let's see if we got what we wanted */
 
1604
                if (idx.pos   != (uint64_t) -1 &&
 
1605
                    idx.time  != (uint64_t) -1 &&
 
1606
                    idx.track != (uint16_t) -1) {
 
1607
                    if (matroska->num_indexes % 32 == 0) {
 
1608
                        /* re-allocate bigger index */
 
1609
                        matroska->index =
 
1610
                            av_realloc(matroska->index,
 
1611
                                       (matroska->num_indexes + 32) *
 
1612
                                       sizeof(MatroskaDemuxIndex));
 
1613
                    }
 
1614
                    matroska->index[matroska->num_indexes] = idx;
 
1615
                    matroska->num_indexes++;
 
1616
                }
 
1617
                break;
 
1618
 
 
1619
            default:
 
1620
                av_log(matroska->ctx, AV_LOG_INFO,
 
1621
                       "Unknown entry 0x%x in cues header\n", id);
 
1622
                /* fall-through */
 
1623
 
 
1624
            case EBML_ID_VOID:
 
1625
                res = ebml_read_skip(matroska);
 
1626
                break;
 
1627
        }
 
1628
 
 
1629
        if (matroska->level_up) {
 
1630
            matroska->level_up--;
 
1631
            break;
 
1632
        }
 
1633
    }
 
1634
 
 
1635
    return res;
 
1636
}
 
1637
 
 
1638
static int
 
1639
matroska_parse_metadata (MatroskaDemuxContext *matroska)
 
1640
{
 
1641
    int res = 0;
 
1642
    uint32_t id;
 
1643
 
 
1644
    while (res == 0) {
 
1645
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1646
            res = AVERROR(EIO);
 
1647
            break;
 
1648
        } else if (matroska->level_up) {
 
1649
            matroska->level_up--;
 
1650
            break;
 
1651
        }
 
1652
 
 
1653
        switch (id) {
 
1654
            /* Hm, this is unsupported... */
 
1655
            default:
 
1656
                av_log(matroska->ctx, AV_LOG_INFO,
 
1657
                       "Unknown entry 0x%x in metadata header\n", id);
 
1658
                /* fall-through */
 
1659
 
 
1660
            case EBML_ID_VOID:
 
1661
                res = ebml_read_skip(matroska);
 
1662
                break;
 
1663
        }
 
1664
 
 
1665
        if (matroska->level_up) {
 
1666
            matroska->level_up--;
 
1667
            break;
 
1668
        }
 
1669
    }
 
1670
 
 
1671
    return res;
 
1672
}
 
1673
 
 
1674
static int
 
1675
matroska_parse_seekhead (MatroskaDemuxContext *matroska)
 
1676
{
 
1677
    int res = 0;
 
1678
    uint32_t id;
 
1679
 
 
1680
    av_log(matroska->ctx, AV_LOG_DEBUG, "parsing seekhead...\n");
 
1681
 
 
1682
    while (res == 0) {
 
1683
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1684
            res = AVERROR(EIO);
 
1685
            break;
 
1686
        } else if (matroska->level_up) {
 
1687
            matroska->level_up--;
 
1688
            break;
 
1689
        }
 
1690
 
 
1691
        switch (id) {
 
1692
            case MATROSKA_ID_SEEKENTRY: {
 
1693
                uint32_t seek_id = 0, peek_id_cache = 0;
 
1694
                uint64_t seek_pos = (uint64_t) -1, t;
 
1695
 
 
1696
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
1697
                    break;
 
1698
 
 
1699
                while (res == 0) {
 
1700
                    if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1701
                        res = AVERROR(EIO);
 
1702
                        break;
 
1703
                    } else if (matroska->level_up) {
 
1704
                        matroska->level_up--;
 
1705
                        break;
 
1706
                    }
 
1707
 
 
1708
                    switch (id) {
 
1709
                        case MATROSKA_ID_SEEKID:
 
1710
                            res = ebml_read_uint(matroska, &id, &t);
 
1711
                            seek_id = t;
 
1712
                            break;
 
1713
 
 
1714
                        case MATROSKA_ID_SEEKPOSITION:
 
1715
                            res = ebml_read_uint(matroska, &id, &seek_pos);
 
1716
                            break;
 
1717
 
 
1718
                        default:
 
1719
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1720
                                   "Unknown seekhead ID 0x%x\n", id);
 
1721
                            /* fall-through */
 
1722
 
 
1723
                        case EBML_ID_VOID:
 
1724
                            res = ebml_read_skip(matroska);
 
1725
                            break;
 
1726
                    }
 
1727
 
 
1728
                    if (matroska->level_up) {
 
1729
                        matroska->level_up--;
 
1730
                        break;
 
1731
                    }
 
1732
                }
 
1733
 
 
1734
                if (!seek_id || seek_pos == (uint64_t) -1) {
 
1735
                    av_log(matroska->ctx, AV_LOG_INFO,
 
1736
                           "Incomplete seekhead entry (0x%x/%"PRIu64")\n",
 
1737
                           seek_id, seek_pos);
 
1738
                    break;
 
1739
                }
 
1740
 
 
1741
                switch (seek_id) {
 
1742
                    case MATROSKA_ID_CUES:
 
1743
                    case MATROSKA_ID_TAGS: {
 
1744
                        uint32_t level_up = matroska->level_up;
 
1745
                        offset_t before_pos;
 
1746
                        uint64_t length;
 
1747
                        MatroskaLevel level;
 
1748
 
 
1749
                        /* remember the peeked ID and the current position */
 
1750
                        peek_id_cache = matroska->peek_id;
 
1751
                        before_pos = url_ftell(&matroska->ctx->pb);
 
1752
 
 
1753
                        /* seek */
 
1754
                        if ((res = ebml_read_seek(matroska, seek_pos +
 
1755
                                               matroska->segment_start)) < 0)
 
1756
                            return res;
 
1757
 
 
1758
                        /* we don't want to lose our seekhead level, so we add
 
1759
                         * a dummy. This is a crude hack. */
 
1760
                        if (matroska->num_levels == EBML_MAX_DEPTH) {
 
1761
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1762
                                   "Max EBML element depth (%d) reached, "
 
1763
                                   "cannot parse further.\n", EBML_MAX_DEPTH);
 
1764
                            return AVERROR_UNKNOWN;
 
1765
                        }
 
1766
 
 
1767
                        level.start = 0;
 
1768
                        level.length = (uint64_t)-1;
 
1769
                        matroska->levels[matroska->num_levels] = level;
 
1770
                        matroska->num_levels++;
 
1771
 
 
1772
                        /* check ID */
 
1773
                        if (!(id = ebml_peek_id (matroska,
 
1774
                                                 &matroska->level_up)))
 
1775
                            goto finish;
 
1776
                        if (id != seek_id) {
 
1777
                            av_log(matroska->ctx, AV_LOG_INFO,
 
1778
                                   "We looked for ID=0x%x but got "
 
1779
                                   "ID=0x%x (pos=%"PRIu64")",
 
1780
                                   seek_id, id, seek_pos +
 
1781
                                   matroska->segment_start);
 
1782
                            goto finish;
 
1783
                        }
 
1784
 
 
1785
                        /* read master + parse */
 
1786
                        if ((res = ebml_read_master(matroska, &id)) < 0)
 
1787
                            goto finish;
 
1788
                        switch (id) {
 
1789
                            case MATROSKA_ID_CUES:
 
1790
                                if (!(res = matroska_parse_index(matroska)) ||
 
1791
                                    url_feof(&matroska->ctx->pb)) {
 
1792
                                    matroska->index_parsed = 1;
 
1793
                                    res = 0;
 
1794
                                }
 
1795
                                break;
 
1796
                            case MATROSKA_ID_TAGS:
 
1797
                                if (!(res = matroska_parse_metadata(matroska)) ||
 
1798
                                   url_feof(&matroska->ctx->pb)) {
 
1799
                                    matroska->metadata_parsed = 1;
 
1800
                                    res = 0;
 
1801
                                }
 
1802
                                break;
 
1803
                        }
 
1804
 
 
1805
                    finish:
 
1806
                        /* remove dummy level */
 
1807
                        while (matroska->num_levels) {
 
1808
                            matroska->num_levels--;
 
1809
                            length =
 
1810
                                matroska->levels[matroska->num_levels].length;
 
1811
                            if (length == (uint64_t)-1)
 
1812
                                break;
 
1813
                        }
 
1814
 
 
1815
                        /* seek back */
 
1816
                        if ((res = ebml_read_seek(matroska, before_pos)) < 0)
 
1817
                            return res;
 
1818
                        matroska->peek_id = peek_id_cache;
 
1819
                        matroska->level_up = level_up;
 
1820
                        break;
 
1821
                    }
 
1822
 
 
1823
                    default:
 
1824
                        av_log(matroska->ctx, AV_LOG_INFO,
 
1825
                               "Ignoring seekhead entry for ID=0x%x\n",
 
1826
                               seek_id);
 
1827
                        break;
 
1828
                }
 
1829
 
 
1830
                break;
 
1831
            }
 
1832
 
 
1833
            default:
 
1834
                av_log(matroska->ctx, AV_LOG_INFO,
 
1835
                       "Unknown seekhead ID 0x%x\n", id);
 
1836
                /* fall-through */
 
1837
 
 
1838
            case EBML_ID_VOID:
 
1839
                res = ebml_read_skip(matroska);
 
1840
                break;
 
1841
        }
 
1842
 
 
1843
        if (matroska->level_up) {
 
1844
            matroska->level_up--;
 
1845
            break;
 
1846
        }
 
1847
    }
 
1848
 
 
1849
    return res;
 
1850
}
 
1851
 
 
1852
#define ARRAY_SIZE(x)  (sizeof(x)/sizeof(*x))
 
1853
 
 
1854
static int
 
1855
matroska_aac_profile (char *codec_id)
 
1856
{
 
1857
    static const char *aac_profiles[] = {
 
1858
        "MAIN", "LC", "SSR"
 
1859
    };
 
1860
    int profile;
 
1861
 
 
1862
    for (profile=0; profile<ARRAY_SIZE(aac_profiles); profile++)
 
1863
        if (strstr(codec_id, aac_profiles[profile]))
 
1864
            break;
 
1865
    return profile + 1;
 
1866
}
 
1867
 
 
1868
static int
 
1869
matroska_aac_sri (int samplerate)
 
1870
{
 
1871
    static const int aac_sample_rates[] = {
 
1872
        96000, 88200, 64000, 48000, 44100, 32000,
 
1873
        24000, 22050, 16000, 12000, 11025,  8000,
 
1874
    };
 
1875
    int sri;
 
1876
 
 
1877
    for (sri=0; sri<ARRAY_SIZE(aac_sample_rates); sri++)
 
1878
        if (aac_sample_rates[sri] == samplerate)
 
1879
            break;
 
1880
    return sri;
 
1881
}
 
1882
 
 
1883
static int
 
1884
matroska_read_header (AVFormatContext    *s,
 
1885
                      AVFormatParameters *ap)
 
1886
{
 
1887
    MatroskaDemuxContext *matroska = s->priv_data;
 
1888
    char *doctype;
 
1889
    int version, last_level, res = 0;
 
1890
    uint32_t id;
 
1891
 
 
1892
    matroska->ctx = s;
 
1893
 
 
1894
    /* First read the EBML header. */
 
1895
    doctype = NULL;
 
1896
    if ((res = ebml_read_header(matroska, &doctype, &version)) < 0)
 
1897
        return res;
 
1898
    if ((doctype == NULL) || strcmp(doctype, "matroska")) {
 
1899
        av_log(matroska->ctx, AV_LOG_ERROR,
 
1900
               "Wrong EBML doctype ('%s' != 'matroska').\n",
 
1901
               doctype ? doctype : "(none)");
 
1902
        if (doctype)
 
1903
            av_free(doctype);
 
1904
        return AVERROR_NOFMT;
 
1905
    }
 
1906
    av_free(doctype);
 
1907
    if (version > 2) {
 
1908
        av_log(matroska->ctx, AV_LOG_ERROR,
 
1909
               "Matroska demuxer version 2 too old for file version %d\n",
 
1910
               version);
 
1911
        return AVERROR_NOFMT;
 
1912
    }
 
1913
 
 
1914
    /* The next thing is a segment. */
 
1915
    while (1) {
 
1916
        if (!(id = ebml_peek_id(matroska, &last_level)))
 
1917
            return AVERROR(EIO);
 
1918
        if (id == MATROSKA_ID_SEGMENT)
 
1919
            break;
 
1920
 
 
1921
        /* oi! */
 
1922
        av_log(matroska->ctx, AV_LOG_INFO,
 
1923
               "Expected a Segment ID (0x%x), but received 0x%x!\n",
 
1924
               MATROSKA_ID_SEGMENT, id);
 
1925
        if ((res = ebml_read_skip(matroska)) < 0)
 
1926
            return res;
 
1927
    }
 
1928
 
 
1929
    /* We now have a Matroska segment.
 
1930
     * Seeks are from the beginning of the segment,
 
1931
     * after the segment ID/length. */
 
1932
    if ((res = ebml_read_master(matroska, &id)) < 0)
 
1933
        return res;
 
1934
    matroska->segment_start = url_ftell(&s->pb);
 
1935
 
 
1936
    matroska->time_scale = 1000000;
 
1937
    /* we've found our segment, start reading the different contents in here */
 
1938
    while (res == 0) {
 
1939
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
1940
            res = AVERROR(EIO);
 
1941
            break;
 
1942
        } else if (matroska->level_up) {
 
1943
            matroska->level_up--;
 
1944
            break;
 
1945
        }
 
1946
 
 
1947
        switch (id) {
 
1948
            /* stream info */
 
1949
            case MATROSKA_ID_INFO: {
 
1950
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
1951
                    break;
 
1952
                res = matroska_parse_info(matroska);
 
1953
                break;
 
1954
            }
 
1955
 
 
1956
            /* track info headers */
 
1957
            case MATROSKA_ID_TRACKS: {
 
1958
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
1959
                    break;
 
1960
                res = matroska_parse_tracks(matroska);
 
1961
                break;
 
1962
            }
 
1963
 
 
1964
            /* stream index */
 
1965
            case MATROSKA_ID_CUES: {
 
1966
                if (!matroska->index_parsed) {
 
1967
                    if ((res = ebml_read_master(matroska, &id)) < 0)
 
1968
                        break;
 
1969
                    res = matroska_parse_index(matroska);
 
1970
                } else
 
1971
                    res = ebml_read_skip(matroska);
 
1972
                break;
 
1973
            }
 
1974
 
 
1975
            /* metadata */
 
1976
            case MATROSKA_ID_TAGS: {
 
1977
                if (!matroska->metadata_parsed) {
 
1978
                    if ((res = ebml_read_master(matroska, &id)) < 0)
 
1979
                        break;
 
1980
                    res = matroska_parse_metadata(matroska);
 
1981
                } else
 
1982
                    res = ebml_read_skip(matroska);
 
1983
                break;
 
1984
            }
 
1985
 
 
1986
            /* file index (if seekable, seek to Cues/Tags to parse it) */
 
1987
            case MATROSKA_ID_SEEKHEAD: {
 
1988
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
1989
                    break;
 
1990
                res = matroska_parse_seekhead(matroska);
 
1991
                break;
 
1992
            }
 
1993
 
 
1994
            case MATROSKA_ID_CLUSTER: {
 
1995
                /* Do not read the master - this will be done in the next
 
1996
                 * call to matroska_read_packet. */
 
1997
                res = 1;
 
1998
                break;
 
1999
            }
 
2000
 
 
2001
            default:
 
2002
                av_log(matroska->ctx, AV_LOG_INFO,
 
2003
                       "Unknown matroska file header ID 0x%x\n", id);
 
2004
            /* fall-through */
 
2005
 
 
2006
            case EBML_ID_VOID:
 
2007
                res = ebml_read_skip(matroska);
 
2008
                break;
 
2009
        }
 
2010
 
 
2011
        if (matroska->level_up) {
 
2012
            matroska->level_up--;
 
2013
            break;
 
2014
        }
 
2015
    }
 
2016
 
 
2017
    /* Have we found a cluster? */
 
2018
    if (ebml_peek_id(matroska, NULL) == MATROSKA_ID_CLUSTER) {
 
2019
        int i, j;
 
2020
        MatroskaTrack *track;
 
2021
        AVStream *st;
 
2022
 
 
2023
        for (i = 0; i < matroska->num_tracks; i++) {
 
2024
            enum CodecID codec_id = CODEC_ID_NONE;
 
2025
            uint8_t *extradata = NULL;
 
2026
            int extradata_size = 0;
 
2027
            int extradata_offset = 0;
 
2028
            track = matroska->tracks[i];
 
2029
            track->stream_index = -1;
 
2030
 
 
2031
            /* Apply some sanity checks. */
 
2032
            if (track->codec_id == NULL)
 
2033
                continue;
 
2034
 
 
2035
            for(j=0; ff_mkv_codec_tags[j].str; j++){
 
2036
                if(!strncmp(ff_mkv_codec_tags[j].str, track->codec_id,
 
2037
                            strlen(ff_mkv_codec_tags[j].str))){
 
2038
                    codec_id= ff_mkv_codec_tags[j].id;
 
2039
                    break;
 
2040
                }
 
2041
            }
 
2042
 
 
2043
            /* Set the FourCC from the CodecID. */
 
2044
            /* This is the MS compatibility mode which stores a
 
2045
             * BITMAPINFOHEADER in the CodecPrivate. */
 
2046
            if (!strcmp(track->codec_id,
 
2047
                        MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC) &&
 
2048
                (track->codec_priv_size >= 40) &&
 
2049
                (track->codec_priv != NULL)) {
 
2050
                MatroskaVideoTrack *vtrack = (MatroskaVideoTrack *) track;
 
2051
 
 
2052
                /* Offset of biCompression. Stored in LE. */
 
2053
                vtrack->fourcc = AV_RL32(track->codec_priv + 16);
 
2054
                codec_id = codec_get_id(codec_bmp_tags, vtrack->fourcc);
 
2055
 
 
2056
            }
 
2057
 
 
2058
            /* This is the MS compatibility mode which stores a
 
2059
             * WAVEFORMATEX in the CodecPrivate. */
 
2060
            else if (!strcmp(track->codec_id,
 
2061
                             MATROSKA_CODEC_ID_AUDIO_ACM) &&
 
2062
                (track->codec_priv_size >= 18) &&
 
2063
                (track->codec_priv != NULL)) {
 
2064
                uint16_t tag;
 
2065
 
 
2066
                /* Offset of wFormatTag. Stored in LE. */
 
2067
                tag = AV_RL16(track->codec_priv);
 
2068
                codec_id = codec_get_id(codec_wav_tags, tag);
 
2069
 
 
2070
            }
 
2071
 
 
2072
            else if (codec_id == CODEC_ID_AAC && !track->codec_priv_size) {
 
2073
                MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *) track;
 
2074
                int profile = matroska_aac_profile(track->codec_id);
 
2075
                int sri = matroska_aac_sri(audiotrack->internal_samplerate);
 
2076
                extradata = av_malloc(5);
 
2077
                if (extradata == NULL)
 
2078
                    return AVERROR(ENOMEM);
 
2079
                extradata[0] = (profile << 3) | ((sri&0x0E) >> 1);
 
2080
                extradata[1] = ((sri&0x01) << 7) | (audiotrack->channels<<3);
 
2081
                if (strstr(track->codec_id, "SBR")) {
 
2082
                    sri = matroska_aac_sri(audiotrack->samplerate);
 
2083
                    extradata[2] = 0x56;
 
2084
                    extradata[3] = 0xE5;
 
2085
                    extradata[4] = 0x80 | (sri<<3);
 
2086
                    extradata_size = 5;
 
2087
                } else {
 
2088
                    extradata_size = 2;
 
2089
                }
 
2090
            }
 
2091
 
 
2092
            else if (codec_id == CODEC_ID_TTA) {
 
2093
                MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *) track;
 
2094
                ByteIOContext b;
 
2095
                extradata_size = 30;
 
2096
                extradata = av_mallocz(extradata_size);
 
2097
                if (extradata == NULL)
 
2098
                    return AVERROR(ENOMEM);
 
2099
                init_put_byte(&b, extradata, extradata_size, 1,
 
2100
                              NULL, NULL, NULL, NULL);
 
2101
                put_buffer(&b, (uint8_t *) "TTA1", 4);
 
2102
                put_le16(&b, 1);
 
2103
                put_le16(&b, audiotrack->channels);
 
2104
                put_le16(&b, audiotrack->bitdepth);
 
2105
                put_le32(&b, audiotrack->samplerate);
 
2106
                put_le32(&b, matroska->ctx->duration * audiotrack->samplerate);
 
2107
            }
 
2108
 
 
2109
            else if (codec_id == CODEC_ID_RV10 || codec_id == CODEC_ID_RV20 ||
 
2110
                     codec_id == CODEC_ID_RV30 || codec_id == CODEC_ID_RV40) {
 
2111
                extradata_offset = 26;
 
2112
                track->codec_priv_size -= extradata_offset;
 
2113
                track->flags |= MATROSKA_TRACK_REAL_V;
 
2114
            }
 
2115
 
 
2116
            else if (codec_id == CODEC_ID_RA_144) {
 
2117
                MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track;
 
2118
                audiotrack->samplerate = 8000;
 
2119
                audiotrack->channels = 1;
 
2120
            }
 
2121
 
 
2122
            else if (codec_id == CODEC_ID_RA_288 ||
 
2123
                     codec_id == CODEC_ID_COOK ||
 
2124
                     codec_id == CODEC_ID_ATRAC3) {
 
2125
                MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track;
 
2126
                ByteIOContext b;
 
2127
 
 
2128
                init_put_byte(&b, track->codec_priv, track->codec_priv_size, 0,
 
2129
                              NULL, NULL, NULL, NULL);
 
2130
                url_fskip(&b, 24);
 
2131
                audiotrack->coded_framesize = get_be32(&b);
 
2132
                url_fskip(&b, 12);
 
2133
                audiotrack->sub_packet_h    = get_be16(&b);
 
2134
                audiotrack->frame_size      = get_be16(&b);
 
2135
                audiotrack->sub_packet_size = get_be16(&b);
 
2136
                audiotrack->buf = av_malloc(audiotrack->frame_size * audiotrack->sub_packet_h);
 
2137
                if (codec_id == CODEC_ID_RA_288) {
 
2138
                    audiotrack->block_align = audiotrack->coded_framesize;
 
2139
                    track->codec_priv_size = 0;
 
2140
                } else {
 
2141
                    audiotrack->block_align = audiotrack->sub_packet_size;
 
2142
                    extradata_offset = 78;
 
2143
                    track->codec_priv_size -= extradata_offset;
 
2144
                }
 
2145
            }
 
2146
 
 
2147
            else if (codec_id == CODEC_ID_TEXT) {
 
2148
                MatroskaSubtitleTrack *subtrack=(MatroskaSubtitleTrack *)track;
 
2149
                if (!strcmp(track->codec_id, "S_TEXT/ASS") ||
 
2150
                    !strcmp(track->codec_id, "S_TEXT/SSA") ||
 
2151
                    !strcmp(track->codec_id, "S_ASS") ||
 
2152
                    !strcmp(track->codec_id, "S_SSA"))
 
2153
                    subtrack->ass = 1;
 
2154
            }
 
2155
 
 
2156
            if (codec_id == CODEC_ID_NONE) {
 
2157
                av_log(matroska->ctx, AV_LOG_INFO,
 
2158
                       "Unknown/unsupported CodecID %s.\n",
 
2159
                       track->codec_id);
 
2160
            }
 
2161
 
 
2162
            track->stream_index = matroska->num_streams;
 
2163
 
 
2164
            matroska->num_streams++;
 
2165
            st = av_new_stream(s, track->stream_index);
 
2166
            if (st == NULL)
 
2167
                return AVERROR(ENOMEM);
 
2168
            av_set_pts_info(st, 64, matroska->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
 
2169
 
 
2170
            st->codec->codec_id = codec_id;
 
2171
            st->start_time = 0;
 
2172
            if (strcmp(track->language, "und"))
 
2173
                strcpy(st->language, track->language);
 
2174
 
 
2175
            if (track->default_duration)
 
2176
                av_reduce(&st->codec->time_base.num, &st->codec->time_base.den,
 
2177
                          track->default_duration, 1000000000, 30000);
 
2178
 
 
2179
            if(extradata){
 
2180
                st->codec->extradata = extradata;
 
2181
                st->codec->extradata_size = extradata_size;
 
2182
            } else if(track->codec_priv && track->codec_priv_size > 0){
 
2183
                st->codec->extradata = av_malloc(track->codec_priv_size);
 
2184
                if(st->codec->extradata == NULL)
 
2185
                    return AVERROR(ENOMEM);
 
2186
                st->codec->extradata_size = track->codec_priv_size;
 
2187
                memcpy(st->codec->extradata,track->codec_priv+extradata_offset,
 
2188
                       track->codec_priv_size);
 
2189
            }
 
2190
 
 
2191
            if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
 
2192
                MatroskaVideoTrack *videotrack = (MatroskaVideoTrack *)track;
 
2193
 
 
2194
                st->codec->codec_type = CODEC_TYPE_VIDEO;
 
2195
                st->codec->codec_tag = videotrack->fourcc;
 
2196
                st->codec->width = videotrack->pixel_width;
 
2197
                st->codec->height = videotrack->pixel_height;
 
2198
                if (videotrack->display_width == 0)
 
2199
                    videotrack->display_width= videotrack->pixel_width;
 
2200
                if (videotrack->display_height == 0)
 
2201
                    videotrack->display_height= videotrack->pixel_height;
 
2202
                av_reduce(&st->codec->sample_aspect_ratio.num,
 
2203
                          &st->codec->sample_aspect_ratio.den,
 
2204
                          st->codec->height * videotrack->display_width,
 
2205
                          st->codec-> width * videotrack->display_height,
 
2206
                          255);
 
2207
                st->need_parsing = AVSTREAM_PARSE_HEADERS;
 
2208
            } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
 
2209
                MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track;
 
2210
 
 
2211
                st->codec->codec_type = CODEC_TYPE_AUDIO;
 
2212
                st->codec->sample_rate = audiotrack->samplerate;
 
2213
                st->codec->channels = audiotrack->channels;
 
2214
                st->codec->block_align = audiotrack->block_align;
 
2215
            } else if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE) {
 
2216
                st->codec->codec_type = CODEC_TYPE_SUBTITLE;
 
2217
            }
 
2218
 
 
2219
            /* What do we do with private data? E.g. for Vorbis. */
 
2220
        }
 
2221
        res = 0;
 
2222
    }
 
2223
 
 
2224
    if (matroska->index_parsed) {
 
2225
        int i, track, stream;
 
2226
        for (i=0; i<matroska->num_indexes; i++) {
 
2227
            MatroskaDemuxIndex *idx = &matroska->index[i];
 
2228
            track = matroska_find_track_by_num(matroska, idx->track);
 
2229
            stream = matroska->tracks[track]->stream_index;
 
2230
            if (stream >= 0)
 
2231
                av_add_index_entry(matroska->ctx->streams[stream],
 
2232
                                   idx->pos, idx->time/matroska->time_scale,
 
2233
                                   0, 0, AVINDEX_KEYFRAME);
 
2234
        }
 
2235
    }
 
2236
 
 
2237
    return res;
 
2238
}
 
2239
 
 
2240
static inline int
 
2241
rv_offset(uint8_t *data, int slice, int slices)
 
2242
{
 
2243
    return AV_RL32(data+8*slice+4) + 8*slices;
 
2244
}
 
2245
 
 
2246
static int
 
2247
matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
 
2248
                     int64_t pos, uint64_t cluster_time, uint64_t duration,
 
2249
                     int is_keyframe, int is_bframe)
 
2250
{
 
2251
    int res = 0;
 
2252
    int track;
 
2253
    AVStream *st;
 
2254
    AVPacket *pkt;
 
2255
    uint8_t *origdata = data;
 
2256
    int16_t block_time;
 
2257
    uint32_t *lace_size = NULL;
 
2258
    int n, flags, laces = 0;
 
2259
    uint64_t num;
 
2260
 
 
2261
    /* first byte(s): tracknum */
 
2262
    if ((n = matroska_ebmlnum_uint(data, size, &num)) < 0) {
 
2263
        av_log(matroska->ctx, AV_LOG_ERROR, "EBML block data error\n");
 
2264
        av_free(origdata);
 
2265
        return res;
 
2266
    }
 
2267
    data += n;
 
2268
    size -= n;
 
2269
 
 
2270
    /* fetch track from num */
 
2271
    track = matroska_find_track_by_num(matroska, num);
 
2272
    if (size <= 3 || track < 0 || track >= matroska->num_tracks) {
 
2273
        av_log(matroska->ctx, AV_LOG_INFO,
 
2274
               "Invalid stream %d or size %u\n", track, size);
 
2275
        av_free(origdata);
 
2276
        return res;
 
2277
    }
 
2278
    if (matroska->tracks[track]->stream_index < 0)
 
2279
        return res;
 
2280
    st = matroska->ctx->streams[matroska->tracks[track]->stream_index];
 
2281
    if (st->discard >= AVDISCARD_ALL) {
 
2282
        av_free(origdata);
 
2283
        return res;
 
2284
    }
 
2285
    if (duration == AV_NOPTS_VALUE)
 
2286
        duration = matroska->tracks[track]->default_duration / matroska->time_scale;
 
2287
 
 
2288
    /* block_time (relative to cluster time) */
 
2289
    block_time = AV_RB16(data);
 
2290
    data += 2;
 
2291
    flags = *data++;
 
2292
    size -= 3;
 
2293
    if (is_keyframe == -1)
 
2294
        is_keyframe = flags & 0x80 ? PKT_FLAG_KEY : 0;
 
2295
 
 
2296
    if (matroska->skip_to_keyframe) {
 
2297
        if (!is_keyframe || st != matroska->skip_to_stream)
 
2298
            return res;
 
2299
        matroska->skip_to_keyframe = 0;
 
2300
    }
 
2301
 
 
2302
    switch ((flags & 0x06) >> 1) {
 
2303
        case 0x0: /* no lacing */
 
2304
            laces = 1;
 
2305
            lace_size = av_mallocz(sizeof(int));
 
2306
            lace_size[0] = size;
 
2307
            break;
 
2308
 
 
2309
        case 0x1: /* xiph lacing */
 
2310
        case 0x2: /* fixed-size lacing */
 
2311
        case 0x3: /* EBML lacing */
 
2312
            if (size == 0) {
 
2313
                res = -1;
 
2314
                break;
 
2315
            }
 
2316
            laces = (*data) + 1;
 
2317
            data += 1;
 
2318
            size -= 1;
 
2319
            lace_size = av_mallocz(laces * sizeof(int));
 
2320
 
 
2321
            switch ((flags & 0x06) >> 1) {
 
2322
                case 0x1: /* xiph lacing */ {
 
2323
                    uint8_t temp;
 
2324
                    uint32_t total = 0;
 
2325
                    for (n = 0; res == 0 && n < laces - 1; n++) {
 
2326
                        while (1) {
 
2327
                            if (size == 0) {
 
2328
                                res = -1;
 
2329
                                break;
 
2330
                            }
 
2331
                            temp = *data;
 
2332
                            lace_size[n] += temp;
 
2333
                            data += 1;
 
2334
                            size -= 1;
 
2335
                            if (temp != 0xff)
 
2336
                                break;
 
2337
                        }
 
2338
                        total += lace_size[n];
 
2339
                    }
 
2340
                    lace_size[n] = size - total;
 
2341
                    break;
 
2342
                }
 
2343
 
 
2344
                case 0x2: /* fixed-size lacing */
 
2345
                    for (n = 0; n < laces; n++)
 
2346
                        lace_size[n] = size / laces;
 
2347
                    break;
 
2348
 
 
2349
                case 0x3: /* EBML lacing */ {
 
2350
                    uint32_t total;
 
2351
                    n = matroska_ebmlnum_uint(data, size, &num);
 
2352
                    if (n < 0) {
 
2353
                        av_log(matroska->ctx, AV_LOG_INFO,
 
2354
                               "EBML block data error\n");
 
2355
                        break;
 
2356
                    }
 
2357
                    data += n;
 
2358
                    size -= n;
 
2359
                    total = lace_size[0] = num;
 
2360
                    for (n = 1; res == 0 && n < laces - 1; n++) {
 
2361
                        int64_t snum;
 
2362
                        int r;
 
2363
                        r = matroska_ebmlnum_sint (data, size, &snum);
 
2364
                        if (r < 0) {
 
2365
                            av_log(matroska->ctx, AV_LOG_INFO,
 
2366
                                   "EBML block data error\n");
 
2367
                            break;
 
2368
                        }
 
2369
                        data += r;
 
2370
                        size -= r;
 
2371
                        lace_size[n] = lace_size[n - 1] + snum;
 
2372
                        total += lace_size[n];
 
2373
                    }
 
2374
                    lace_size[n] = size - total;
 
2375
                    break;
 
2376
                }
 
2377
            }
 
2378
            break;
 
2379
    }
 
2380
 
 
2381
    if (res == 0) {
 
2382
        int real_v = matroska->tracks[track]->flags & MATROSKA_TRACK_REAL_V;
 
2383
        uint64_t timecode = AV_NOPTS_VALUE;
 
2384
 
 
2385
        if (cluster_time != (uint64_t)-1
 
2386
            && (block_time >= 0 || cluster_time >= -block_time))
 
2387
            timecode = cluster_time + block_time;
 
2388
 
 
2389
        for (n = 0; n < laces; n++) {
 
2390
            int slice, slices = 1;
 
2391
 
 
2392
            if (real_v) {
 
2393
                slices = *data++ + 1;
 
2394
                lace_size[n]--;
 
2395
            }
 
2396
 
 
2397
            for (slice=0; slice<slices; slice++) {
 
2398
                int slice_size, slice_offset = 0;
 
2399
                if (real_v)
 
2400
                    slice_offset = rv_offset(data, slice, slices);
 
2401
                if (slice+1 == slices)
 
2402
                    slice_size = lace_size[n] - slice_offset;
 
2403
                else
 
2404
                    slice_size = rv_offset(data, slice+1, slices) - slice_offset;
 
2405
 
 
2406
                if (st->codec->codec_id == CODEC_ID_RA_288 ||
 
2407
                    st->codec->codec_id == CODEC_ID_COOK ||
 
2408
                    st->codec->codec_id == CODEC_ID_ATRAC3) {
 
2409
                    MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)matroska->tracks[track];
 
2410
                    int a = st->codec->block_align;
 
2411
                    int sps = audiotrack->sub_packet_size;
 
2412
                    int cfs = audiotrack->coded_framesize;
 
2413
                    int h = audiotrack->sub_packet_h;
 
2414
                    int y = audiotrack->sub_packet_cnt;
 
2415
                    int w = audiotrack->frame_size;
 
2416
                    int x;
 
2417
 
 
2418
                    if (!audiotrack->pkt_cnt) {
 
2419
                        if (st->codec->codec_id == CODEC_ID_RA_288)
 
2420
                            for (x=0; x<h/2; x++)
 
2421
                                memcpy(audiotrack->buf+x*2*w+y*cfs,
 
2422
                                       data+x*cfs, cfs);
 
2423
                        else
 
2424
                            for (x=0; x<w/sps; x++)
 
2425
                                memcpy(audiotrack->buf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), data+x*sps, sps);
 
2426
 
 
2427
                        if (++audiotrack->sub_packet_cnt >= h) {
 
2428
                            audiotrack->sub_packet_cnt = 0;
 
2429
                            audiotrack->pkt_cnt = h*w / a;
 
2430
                        }
 
2431
                    }
 
2432
                    while (audiotrack->pkt_cnt) {
 
2433
                        pkt = av_mallocz(sizeof(AVPacket));
 
2434
                        av_new_packet(pkt, a);
 
2435
                        memcpy(pkt->data, audiotrack->buf
 
2436
                               + a * (h*w / a - audiotrack->pkt_cnt--), a);
 
2437
                        pkt->pos = pos;
 
2438
                        pkt->stream_index = matroska->tracks[track]->stream_index;
 
2439
                        matroska_queue_packet(matroska, pkt);
 
2440
                    }
 
2441
                } else {
 
2442
                    int offset = 0;
 
2443
 
 
2444
                    if (st->codec->codec_id == CODEC_ID_TEXT
 
2445
                        && ((MatroskaSubtitleTrack *)(matroska->tracks[track]))->ass) {
 
2446
                        int i;
 
2447
                        for (i=0; i<8 && data[slice_offset+offset]; offset++)
 
2448
                            if (data[slice_offset+offset] == ',')
 
2449
                                i++;
 
2450
                    }
 
2451
 
 
2452
                    pkt = av_mallocz(sizeof(AVPacket));
 
2453
                    /* XXX: prevent data copy... */
 
2454
                    if (av_new_packet(pkt, slice_size-offset) < 0) {
 
2455
                        res = AVERROR(ENOMEM);
 
2456
                        n = laces-1;
 
2457
                        break;
 
2458
                    }
 
2459
                    memcpy (pkt->data, data+slice_offset+offset, slice_size-offset);
 
2460
 
 
2461
                    if (n == 0)
 
2462
                        pkt->flags = is_keyframe;
 
2463
                    pkt->stream_index = matroska->tracks[track]->stream_index;
 
2464
 
 
2465
                    pkt->pts = timecode;
 
2466
                    pkt->pos = pos;
 
2467
                    pkt->duration = duration;
 
2468
 
 
2469
                    matroska_queue_packet(matroska, pkt);
 
2470
                }
 
2471
 
 
2472
                if (timecode != AV_NOPTS_VALUE)
 
2473
                    timecode = duration ? timecode + duration : AV_NOPTS_VALUE;
 
2474
            }
 
2475
            data += lace_size[n];
 
2476
        }
 
2477
    }
 
2478
 
 
2479
    av_free(lace_size);
 
2480
    av_free(origdata);
 
2481
    return res;
 
2482
}
 
2483
 
 
2484
static int
 
2485
matroska_parse_blockgroup (MatroskaDemuxContext *matroska,
 
2486
                           uint64_t              cluster_time)
 
2487
{
 
2488
    int res = 0;
 
2489
    uint32_t id;
 
2490
    int is_bframe = 0;
 
2491
    int is_keyframe = PKT_FLAG_KEY, last_num_packets = matroska->num_packets;
 
2492
    uint64_t duration = AV_NOPTS_VALUE;
 
2493
    uint8_t *data;
 
2494
    int size = 0;
 
2495
    int64_t pos = 0;
 
2496
 
 
2497
    av_log(matroska->ctx, AV_LOG_DEBUG, "parsing blockgroup...\n");
 
2498
 
 
2499
    while (res == 0) {
 
2500
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
2501
            res = AVERROR(EIO);
 
2502
            break;
 
2503
        } else if (matroska->level_up) {
 
2504
            matroska->level_up--;
 
2505
            break;
 
2506
        }
 
2507
 
 
2508
        switch (id) {
 
2509
            /* one block inside the group. Note, block parsing is one
 
2510
             * of the harder things, so this code is a bit complicated.
 
2511
             * See http://www.matroska.org/ for documentation. */
 
2512
            case MATROSKA_ID_BLOCK: {
 
2513
                pos = url_ftell(&matroska->ctx->pb);
 
2514
                res = ebml_read_binary(matroska, &id, &data, &size);
 
2515
                break;
 
2516
            }
 
2517
 
 
2518
            case MATROSKA_ID_BLOCKDURATION: {
 
2519
                if ((res = ebml_read_uint(matroska, &id, &duration)) < 0)
 
2520
                    break;
 
2521
                break;
 
2522
            }
 
2523
 
 
2524
            case MATROSKA_ID_BLOCKREFERENCE: {
 
2525
                int64_t num;
 
2526
                /* We've found a reference, so not even the first frame in
 
2527
                 * the lace is a key frame. */
 
2528
                is_keyframe = 0;
 
2529
                if (last_num_packets != matroska->num_packets)
 
2530
                    matroska->packets[last_num_packets]->flags = 0;
 
2531
                if ((res = ebml_read_sint(matroska, &id, &num)) < 0)
 
2532
                    break;
 
2533
                if (num > 0)
 
2534
                    is_bframe = 1;
 
2535
                break;
 
2536
            }
 
2537
 
 
2538
            default:
 
2539
                av_log(matroska->ctx, AV_LOG_INFO,
 
2540
                       "Unknown entry 0x%x in blockgroup data\n", id);
 
2541
                /* fall-through */
 
2542
 
 
2543
            case EBML_ID_VOID:
 
2544
                res = ebml_read_skip(matroska);
 
2545
                break;
 
2546
        }
 
2547
 
 
2548
        if (matroska->level_up) {
 
2549
            matroska->level_up--;
 
2550
            break;
 
2551
        }
 
2552
    }
 
2553
 
 
2554
    if (res)
 
2555
        return res;
 
2556
 
 
2557
    if (size > 0)
 
2558
        res = matroska_parse_block(matroska, data, size, pos, cluster_time,
 
2559
                                   duration, is_keyframe, is_bframe);
 
2560
 
 
2561
    return res;
 
2562
}
 
2563
 
 
2564
static int
 
2565
matroska_parse_cluster (MatroskaDemuxContext *matroska)
 
2566
{
 
2567
    int res = 0;
 
2568
    uint32_t id;
 
2569
    uint64_t cluster_time = 0;
 
2570
    uint8_t *data;
 
2571
    int64_t pos;
 
2572
    int size;
 
2573
 
 
2574
    av_log(matroska->ctx, AV_LOG_DEBUG,
 
2575
           "parsing cluster at %"PRId64"\n", url_ftell(&matroska->ctx->pb));
 
2576
 
 
2577
    while (res == 0) {
 
2578
        if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
2579
            res = AVERROR(EIO);
 
2580
            break;
 
2581
        } else if (matroska->level_up) {
 
2582
            matroska->level_up--;
 
2583
            break;
 
2584
        }
 
2585
 
 
2586
        switch (id) {
 
2587
            /* cluster timecode */
 
2588
            case MATROSKA_ID_CLUSTERTIMECODE: {
 
2589
                uint64_t num;
 
2590
                if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
 
2591
                    break;
 
2592
                cluster_time = num;
 
2593
                break;
 
2594
            }
 
2595
 
 
2596
                /* a group of blocks inside a cluster */
 
2597
            case MATROSKA_ID_BLOCKGROUP:
 
2598
                if ((res = ebml_read_master(matroska, &id)) < 0)
 
2599
                    break;
 
2600
                res = matroska_parse_blockgroup(matroska, cluster_time);
 
2601
                break;
 
2602
 
 
2603
            case MATROSKA_ID_SIMPLEBLOCK:
 
2604
                pos = url_ftell(&matroska->ctx->pb);
 
2605
                res = ebml_read_binary(matroska, &id, &data, &size);
 
2606
                if (res == 0)
 
2607
                    res = matroska_parse_block(matroska, data, size, pos,
 
2608
                                               cluster_time, AV_NOPTS_VALUE,
 
2609
                                               -1, 0);
 
2610
                break;
 
2611
 
 
2612
            default:
 
2613
                av_log(matroska->ctx, AV_LOG_INFO,
 
2614
                       "Unknown entry 0x%x in cluster data\n", id);
 
2615
                /* fall-through */
 
2616
 
 
2617
            case EBML_ID_VOID:
 
2618
                res = ebml_read_skip(matroska);
 
2619
                break;
 
2620
        }
 
2621
 
 
2622
        if (matroska->level_up) {
 
2623
            matroska->level_up--;
 
2624
            break;
 
2625
        }
 
2626
    }
 
2627
 
 
2628
    return res;
 
2629
}
 
2630
 
 
2631
static int
 
2632
matroska_read_packet (AVFormatContext *s,
 
2633
                      AVPacket        *pkt)
 
2634
{
 
2635
    MatroskaDemuxContext *matroska = s->priv_data;
 
2636
    int res;
 
2637
    uint32_t id;
 
2638
 
 
2639
    /* Read stream until we have a packet queued. */
 
2640
    while (matroska_deliver_packet(matroska, pkt)) {
 
2641
 
 
2642
        /* Have we already reached the end? */
 
2643
        if (matroska->done)
 
2644
            return AVERROR(EIO);
 
2645
 
 
2646
        res = 0;
 
2647
        while (res == 0) {
 
2648
            if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
 
2649
                return AVERROR(EIO);
 
2650
            } else if (matroska->level_up) {
 
2651
                matroska->level_up--;
 
2652
                break;
 
2653
            }
 
2654
 
 
2655
            switch (id) {
 
2656
                case MATROSKA_ID_CLUSTER:
 
2657
                    if ((res = ebml_read_master(matroska, &id)) < 0)
 
2658
                        break;
 
2659
                    if ((res = matroska_parse_cluster(matroska)) == 0)
 
2660
                        res = 1; /* Parsed one cluster, let's get out. */
 
2661
                    break;
 
2662
 
 
2663
                default:
 
2664
                case EBML_ID_VOID:
 
2665
                    res = ebml_read_skip(matroska);
 
2666
                    break;
 
2667
            }
 
2668
 
 
2669
            if (matroska->level_up) {
 
2670
                matroska->level_up--;
 
2671
                break;
 
2672
            }
 
2673
        }
 
2674
 
 
2675
        if (res == -1)
 
2676
            matroska->done = 1;
 
2677
    }
 
2678
 
 
2679
    return 0;
 
2680
}
 
2681
 
 
2682
static int
 
2683
matroska_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp,
 
2684
                    int flags)
 
2685
{
 
2686
    MatroskaDemuxContext *matroska = s->priv_data;
 
2687
    AVStream *st = s->streams[stream_index];
 
2688
    int index;
 
2689
 
 
2690
    /* find index entry */
 
2691
    index = av_index_search_timestamp(st, timestamp, flags);
 
2692
    if (index < 0)
 
2693
        return 0;
 
2694
 
 
2695
    /* do the seek */
 
2696
    url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET);
 
2697
    matroska->skip_to_keyframe = !(flags & AVSEEK_FLAG_ANY);
 
2698
    matroska->skip_to_stream = st;
 
2699
    matroska->num_packets = 0;
 
2700
    matroska->peek_id = 0;
 
2701
    return 0;
 
2702
}
 
2703
 
 
2704
static int
 
2705
matroska_read_close (AVFormatContext *s)
 
2706
{
 
2707
    MatroskaDemuxContext *matroska = s->priv_data;
 
2708
    int n = 0;
 
2709
 
 
2710
    av_free(matroska->writing_app);
 
2711
    av_free(matroska->muxing_app);
 
2712
    av_free(matroska->index);
 
2713
 
 
2714
    if (matroska->packets != NULL) {
 
2715
        for (n = 0; n < matroska->num_packets; n++) {
 
2716
            av_free_packet(matroska->packets[n]);
 
2717
            av_free(matroska->packets[n]);
 
2718
        }
 
2719
        av_free(matroska->packets);
 
2720
    }
 
2721
 
 
2722
    for (n = 0; n < matroska->num_tracks; n++) {
 
2723
        MatroskaTrack *track = matroska->tracks[n];
 
2724
        av_free(track->codec_id);
 
2725
        av_free(track->codec_name);
 
2726
        av_free(track->codec_priv);
 
2727
        av_free(track->name);
 
2728
 
 
2729
        if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
 
2730
            MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track;
 
2731
            av_free(audiotrack->buf);
 
2732
        }
 
2733
 
 
2734
        av_free(track);
 
2735
    }
 
2736
 
 
2737
    return 0;
 
2738
}
 
2739
 
 
2740
AVInputFormat matroska_demuxer = {
 
2741
    "matroska",
 
2742
    "Matroska file format",
 
2743
    sizeof(MatroskaDemuxContext),
 
2744
    matroska_probe,
 
2745
    matroska_read_header,
 
2746
    matroska_read_packet,
 
2747
    matroska_read_close,
 
2748
    matroska_read_seek,
 
2749
};