---
now withbogus hunks edit corrected
sorry for the mess
libavformat/matroskadec.c | 535 +++++++++++++++++++++++++---------------------
1 file changed, 292 insertions(+), 243 deletions(-)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index bcd7d1a..ac01855 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -70,8 +70,8 @@ typedef const struct EbmlSyntax {
int list_elem_size;
int data_offset;
union {
- uint64_t u;
- double f;
+ uint64_t u;
+ double f;
const char *s;
const struct EbmlSyntax *n;
} def;
@@ -83,22 +83,22 @@ typedef struct {
} EbmlList;
typedef struct {
- int size;
+ int size;
uint8_t *data;
- int64_t pos;
+ int64_t pos;
} EbmlBin;
typedef struct {
uint64_t version;
uint64_t max_size;
uint64_t id_length;
- char *doctype;
+ char *doctype;
uint64_t doctype_version;
} Ebml;
typedef struct {
uint64_t algo;
- EbmlBin settings;
+ EbmlBin settings;
} MatroskaTrackCompression;
typedef struct {
@@ -108,7 +108,7 @@ typedef struct {
} MatroskaTrackEncoding;
typedef struct {
- double frame_rate;
+ double frame_rate;
uint64_t display_width;
uint64_t display_height;
uint64_t pixel_width;
@@ -117,18 +117,18 @@ typedef struct {
} MatroskaTrackVideo;
typedef struct {
- double samplerate;
- double out_samplerate;
+ double samplerate;
+ double out_samplerate;
uint64_t bitdepth;
uint64_t channels;
/* real audio header (extracted from extradata) */
- int coded_framesize;
- int sub_packet_h;
- int frame_size;
- int sub_packet_size;
- int sub_packet_cnt;
- int pkt_cnt;
+ int coded_framesize;
+ int sub_packet_h;
+ int frame_size;
+ int sub_packet_size;
+ int sub_packet_cnt;
+ int pkt_cnt;
uint64_t buf_timecode;
uint8_t *buf;
} MatroskaTrackAudio;
@@ -137,10 +137,10 @@ typedef struct {
uint64_t num;
uint64_t uid;
uint64_t type;
- char *name;
- char *codec_id;
- EbmlBin codec_priv;
- char *language;
+ char *name;
+ char *codec_id;
+ EbmlBin codec_priv;
+ char *language;
double time_scale;
uint64_t default_duration;
uint64_t flag_default;
@@ -167,7 +167,7 @@ typedef struct {
uint64_t start;
uint64_t end;
uint64_t uid;
- char *title;
+ char *title;
AVChapter *chapter;
} MatroskaChapter;
@@ -191,7 +191,7 @@ typedef struct {
} MatroskaTag;
typedef struct {
- char *type;
+ char *type;
uint64_t typevalue;
uint64_t trackuid;
uint64_t chapteruid;
@@ -228,8 +228,8 @@ typedef struct {
uint32_t current_id;
uint64_t time_scale;
- double duration;
- char *title;
+ double duration;
+ char *title;
EbmlList tracks;
EbmlList attachments;
EbmlList chapters;
@@ -264,9 +264,9 @@ typedef struct {
typedef struct {
uint64_t duration;
- int64_t reference;
+ int64_t reference;
uint64_t non_simple;
- EbmlBin bin;
+ EbmlBin bin;
} MatroskaBlock;
static EbmlSyntax ebml_header[] = {
@@ -576,8 +576,8 @@ static int matroska_resync(MatroskaDemuxContext *matroska,
int64_t last_pos)
id == MATROSKA_ID_CUES || id == MATROSKA_ID_TAGS ||
id == MATROSKA_ID_SEEKHEAD || id == MATROSKA_ID_ATTACHMENTS ||
id == MATROSKA_ID_CLUSTER || id == MATROSKA_ID_CHAPTERS) {
- matroska->current_id = id;
- return 0;
+ matroska->current_id = id;
+ return 0;
}
id = (id << 8) | avio_r8(pb);
}
@@ -592,7 +592,7 @@ eof:
static int ebml_level_end(MatroskaDemuxContext *matroska)
{
AVIOContext *pb = matroska->ctx->pb;
- int64_t pos = avio_tell(pb);
+ int64_t pos = avio_tell(pb);
if (matroska->num_levels > 0) {
MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1];
@@ -615,7 +615,7 @@ static int ebml_level_end(MatroskaDemuxContext *matroska)
static int ebml_read_num(MatroskaDemuxContext *matroska, AVIOContext *pb,
int max_size, uint64_t *number)
{
- int read = 1, n = 1;
+ int read = 1, n = 1;
uint64_t total = 0;
/* The first byte tells us the length in bytes - avio_r8() can normally
@@ -626,7 +626,7 @@ static int ebml_read_num(MatroskaDemuxContext *matroska,
AVIOContext *pb,
if (!pb->eof_reached) {
int64_t pos = avio_tell(pb);
av_log(matroska->ctx, AV_LOG_ERROR,
- "Read error at pos. %"PRIu64" (0x%"PRIx64")\n",
+ "Read error at pos. %" PRIu64 " (0x%" PRIx64 ")\n",
pos, pos);
return pb->error ? pb->error : AVERROR(EIO);
}
@@ -696,7 +696,7 @@ static int ebml_read_float(AVIOContext *pb, int size,
double *num)
*num = 0;
} else if (size == 4) {
*num = av_int2float(avio_rb32(pb));
- } else if (size == 8){
+ } else if (size == 8) {
*num = av_int2double(avio_rb64(pb));
} else
return AVERROR_INVALIDDATA;
@@ -716,7 +716,7 @@ static int ebml_read_ascii(AVIOContext *pb, int size, char
**str)
* byte more, read the string and NULL-terminate it ourselves. */
if (!(res = av_malloc(size + 1)))
return AVERROR(ENOMEM);
- if (avio_read(pb, (uint8_t *) res, size) != size) {
+ if (avio_read(pb, (uint8_t *)res, size) != size) {
av_free(res);
return AVERROR(EIO);
}
@@ -798,7 +798,7 @@ static int matroska_ebmlnum_sint(MatroskaDemuxContext
*matroska,
return res;
/* make signed (weird way) */
- *num = unum - ((1LL << (7*res - 1)) - 1);
+ *num = unum - ((1LL << (7 * res - 1)) - 1);
return res;
}
@@ -810,12 +810,12 @@ static int ebml_parse_id(MatroskaDemuxContext *matroska,
EbmlSyntax *syntax,
uint32_t id, void *data)
{
int i;
- for (i=0; syntax[i].id; i++)
+ for (i = 0; syntax[i].id; i++)
if (id == syntax[i].id)
break;
if (!syntax[i].id && id == MATROSKA_ID_CLUSTER &&
matroska->num_levels > 0 &&
- matroska->levels[matroska->num_levels-1].length == 0xffffffffffffff)
+ matroska->levels[matroska->num_levels - 1].length == 0xffffffffffffff)
return 0; // we reached the end of an unknown size cluster
if (!syntax[i].id && id != EBML_ID_VOID && id != EBML_ID_CRC32) {
av_log(matroska->ctx, AV_LOG_INFO, "Unknown entry 0x%X\n", id);
@@ -833,7 +833,7 @@ static int ebml_parse(MatroskaDemuxContext *matroska,
EbmlSyntax *syntax,
int res = ebml_read_num(matroska, matroska->ctx->pb, 4, &id);
if (res < 0)
return res;
- matroska->current_id = id | 1 << 7*res;
+ matroska->current_id = id | 1 << 7 * res;
}
return ebml_parse_id(matroska, syntax, matroska->current_id, data);
}
@@ -843,13 +843,13 @@ static int ebml_parse_nest(MatroskaDemuxContext
*matroska, EbmlSyntax *syntax,
{
int i, res = 0;
- for (i=0; syntax[i].id; i++)
+ for (i = 0; syntax[i].id; i++)
switch (syntax[i].type) {
case EBML_UINT:
*(uint64_t *)((char *)data+syntax[i].data_offset) =
syntax[i].def.u;
break;
case EBML_FLOAT:
- *(double *)((char *)data+syntax[i].data_offset) =
syntax[i].def.f;
+ *(double *)((char *)data + syntax[i].data_offset) =
syntax[i].def.f;
break;
case EBML_STR:
case EBML_UTF8:
@@ -896,7 +896,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
list->nb_elem = 0;
return res;
}
- data = (char*)list->elem + list->nb_elem*syntax->list_elem_size;
+ data = (char *)list->elem + list->nb_elem * syntax->list_elem_size;
memset(data, 0, syntax->list_elem_size);
list->nb_elem++;
}
@@ -907,26 +907,32 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
return res;
if (max_lengths[syntax->type] && length > max_lengths[syntax->type]) {
av_log(matroska->ctx, AV_LOG_ERROR,
- "Invalid length 0x%"PRIx64" > 0x%"PRIx64" for syntax
element %i\n",
+ "Invalid length 0x%" PRIx64 " > 0x%" PRIx64
+ " for syntax element %i\n",
length, max_lengths[syntax->type], syntax->type);
return AVERROR_INVALIDDATA;
}
}
switch (syntax->type) {
- case EBML_UINT: res = ebml_read_uint (pb, length, data); break;
- case EBML_FLOAT: res = ebml_read_float (pb, length, data); break;
+ case EBML_UINT: res = ebml_read_uint(pb, length, data);
+ break;
+ case EBML_FLOAT: res = ebml_read_float(pb, length, data);
+ break;
case EBML_STR:
- case EBML_UTF8: res = ebml_read_ascii (pb, length, data); break;
- case EBML_BIN: res = ebml_read_binary(pb, length, data); break;
- case EBML_NEST: if ((res=ebml_read_master(matroska, length)) < 0)
- return res;
- if (id == MATROSKA_ID_SEGMENT)
- matroska->segment_start =
avio_tell(matroska->ctx->pb);
- return ebml_parse_nest(matroska, syntax->def.n, data);
+ case EBML_UTF8: res = ebml_read_ascii(pb, length, data);
+ break;
+ case EBML_BIN: res = ebml_read_binary(pb, length, data);
+ break;
+ case EBML_NEST:
+ if ((res = ebml_read_master(matroska, length)) < 0)
+ return res;
+ if (id == MATROSKA_ID_SEGMENT)
+ matroska->segment_start = avio_tell(matroska->ctx->pb);
+ return ebml_parse_nest(matroska, syntax->def.n, data);
case EBML_PASS: return ebml_parse_id(matroska, syntax->def.n, id, data);
case EBML_STOP: return 1;
- default: return avio_skip(pb,length)<0 ? AVERROR(EIO) : 0;
+ default: return avio_skip(pb, length) < 0 ? AVERROR(EIO) : 0;
}
if (res == AVERROR_INVALIDDATA)
av_log(matroska->ctx, AV_LOG_ERROR, "Invalid element\n");
@@ -938,17 +944,20 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
static void ebml_free(EbmlSyntax *syntax, void *data)
{
int i, j;
- for (i=0; syntax[i].id; i++) {
+ for (i = 0; syntax[i].id; i++) {
void *data_off = (char *)data + syntax[i].data_offset;
switch (syntax[i].type) {
case EBML_STR:
- case EBML_UTF8: av_freep(data_off); break;
- case EBML_BIN: av_freep(&((EbmlBin *)data_off)->data); break;
+ case EBML_UTF8: av_freep(data_off);
+ break;
+ case EBML_BIN: av_freep(&((EbmlBin *)data_off)->data);
+ break;
case EBML_NEST:
if (syntax[i].list_elem_size) {
EbmlList *list = data_off;
char *ptr = list->elem;
- for (j=0; j<list->nb_elem; j++, ptr+=syntax[i].list_elem_size)
+ for (j = 0; j < list->nb_elem;
+ j++, ptr += syntax[i].list_elem_size)
ebml_free(syntax[i].def.n, ptr);
av_free(list->elem);
} else
@@ -958,14 +967,13 @@ static void ebml_free(EbmlSyntax *syntax, void *data)
}
}
-
/*
* Autodetecting...
*/
static int matroska_probe(AVProbeData *p)
{
uint64_t total = 0;
- int len_mask = 0x80, size = 1, n = 1, i;
+ int len_mask = 0x80, size = 1, n = 1, i;
/* EBML header? */
if (AV_RB32(p->buf) != EBML_ID_HEADER)
@@ -978,14 +986,14 @@ static int matroska_probe(AVProbeData *p)
len_mask >>= 1;
}
if (size > 8)
- return 0;
+ return 0;
total &= (len_mask - 1);
while (n < size)
total = (total << 8) | p->buf[4 + n++];
/* Does the probe data contain the whole header? */
if (p->buf_size < 4 + size + total)
- return 0;
+ return 0;
/* The header should contain a known document type. For now,
* we don't parse the whole header but simply check for the
@@ -995,8 +1003,8 @@ static int matroska_probe(AVProbeData *p)
int probelen = strlen(matroska_doctypes[i]);
if (total < probelen)
continue;
- for (n = 4+size; n <= 4+size+total-probelen; n++)
- if (!memcmp(p->buf+n, matroska_doctypes[i], probelen))
+ for (n = 4 + size; n <= 4 + size + total - probelen; n++)
+ if (!memcmp(p->buf + n, matroska_doctypes[i], probelen))
return AVPROBE_SCORE_MAX;
}
@@ -1010,7 +1018,7 @@ static MatroskaTrack
*matroska_find_track_by_num(MatroskaDemuxContext *matroska,
MatroskaTrack *tracks = matroska->tracks.elem;
int i;
- for (i=0; i < matroska->tracks.nb_elem; i++)
+ for (i = 0; i < matroska->tracks.nb_elem; i++)
if (tracks[i].num == num)
return &tracks[i];
@@ -1018,13 +1026,13 @@ static MatroskaTrack
*matroska_find_track_by_num(MatroskaDemuxContext *matroska,
return NULL;
}
-static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
+static int matroska_decode_buffer(uint8_t **buf, int *buf_size,
MatroskaTrack *track)
{
MatroskaTrackEncoding *encodings = track->encodings.elem;
- uint8_t* data = *buf;
+ uint8_t *data = *buf;
int isize = *buf_size;
- uint8_t* pkt_data = NULL;
+ uint8_t *pkt_data = NULL;
uint8_t av_unused *newpktdata;
int pkt_size = isize;
int result = 0;
@@ -1061,7 +1069,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
}
pkt_data = newpktdata;
result = av_lzo1x_decode(pkt_data, &olen, data, &isize);
- } while (result==AV_LZO_OUTPUT_FULL && pkt_size<10000000);
+ } while (result == AV_LZO_OUTPUT_FULL && pkt_size < 10000000);
if (result) {
result = AVERROR_INVALIDDATA;
goto failed;
@@ -1071,7 +1079,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
#endif
#if CONFIG_ZLIB
case MATROSKA_TRACK_ENCODING_COMP_ZLIB: {
- z_stream zstream = {0};
+ z_stream zstream = { 0 };
if (inflateInit(&zstream) != Z_OK)
return -1;
zstream.next_in = data;
@@ -1087,7 +1095,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
zstream.avail_out = pkt_size - zstream.total_out;
zstream.next_out = pkt_data + zstream.total_out;
result = inflate(&zstream, Z_NO_FLUSH);
- } while (result==Z_OK && pkt_size<10000000);
+ } while (result == Z_OK && pkt_size < 10000000);
pkt_size = zstream.total_out;
inflateEnd(&zstream);
if (result != Z_STREAM_END) {
@@ -1102,7 +1110,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
#endif
#if CONFIG_BZLIB
case MATROSKA_TRACK_ENCODING_COMP_BZLIB: {
- bz_stream bzstream = {0};
+ bz_stream bzstream = { 0 };
if (BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
return -1;
bzstream.next_in = data;
@@ -1118,7 +1126,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
bzstream.avail_out = pkt_size - bzstream.total_out_lo32;
bzstream.next_out = pkt_data + bzstream.total_out_lo32;
result = BZ2_bzDecompress(&bzstream);
- } while (result==BZ_OK && pkt_size<10000000);
+ } while (result == BZ_OK && pkt_size < 10000000);
pkt_size = bzstream.total_out_lo32;
BZ2_bzDecompressEnd(&bzstream);
if (result != BZ_STREAM_END) {
@@ -1138,7 +1146,7 @@ static int matroska_decode_buffer(uint8_t** buf, int*
buf_size,
*buf = pkt_data;
*buf_size = pkt_size;
return 0;
- failed:
+failed:
av_free(pkt_data);
return result;
}
@@ -1147,27 +1155,34 @@ static void
matroska_fix_ass_packet(MatroskaDemuxContext *matroska,
AVPacket *pkt, uint64_t display_duration)
{
AVBufferRef *line;
- char *layer, *ptr = pkt->data, *end = ptr+pkt->size;
- for (; *ptr!=',' && ptr<end-1; ptr++);
+ char *layer, *ptr = pkt->data, *end = ptr + pkt->size;
+ for (; *ptr != ',' && ptr < end - 1; ptr++) ;
if (*ptr == ',')
layer = ++ptr;
- for (; *ptr!=',' && ptr<end-1; ptr++);
+ for (; *ptr != ',' && ptr < end - 1; ptr++) ;
if (*ptr == ',') {
int64_t end_pts = pkt->pts + display_duration;
int sc = matroska->time_scale * pkt->pts / 10000000;
int ec = matroska->time_scale * end_pts / 10000000;
int sh, sm, ss, eh, em, es, len;
- sh = sc/360000; sc -= 360000*sh;
- sm = sc/ 6000; sc -= 6000*sm;
- ss = sc/ 100; sc -= 100*ss;
- eh = ec/360000; ec -= 360000*eh;
- em = ec/ 6000; ec -= 6000*em;
- es = ec/ 100; ec -= 100*es;
+ sh = sc / 360000;
+ sc -= 360000 * sh;
+ sm = sc / 6000;
+ sc -= 6000 * sm;
+ ss = sc / 100;
+ sc -= 100 * ss;
+ eh = ec / 360000;
+ ec -= 360000 * eh;
+ em = ec / 6000;
+ ec -= 6000 * em;
+ es = ec / 100;
+ ec -= 100 * es;
*ptr++ = '\0';
- len = 50 + end-ptr + FF_INPUT_BUFFER_PADDING_SIZE;
+ len = 50 + end - ptr + FF_INPUT_BUFFER_PADDING_SIZE;
if (!(line = av_buffer_alloc(len)))
return;
- snprintf(line->data, len,"Dialogue:
%s,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s\r\n",
+ snprintf(line->data, len,
+ "Dialogue: %s,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s\r\n",
layer, sh, sm, ss, sc, eh, em, es, ec, ptr);
av_buffer_unref(&pkt->buf);
pkt->buf = line;
@@ -1197,20 +1212,23 @@ static void matroska_convert_tag(AVFormatContext *s,
EbmlList *list,
char key[1024];
int i;
- for (i=0; i < list->nb_elem; i++) {
- const char *lang = tags[i].lang && strcmp(tags[i].lang, "und") ?
- tags[i].lang : NULL;
+ for (i = 0; i < list->nb_elem; i++) {
+ const char *lang = tags[i].lang && strcmp(tags[i].lang, "und")
+ ? tags[i].lang
+ : NULL;
if (!tags[i].name) {
av_log(s, AV_LOG_WARNING, "Skipping invalid tag with no
TagName.\n");
continue;
}
- if (prefix) snprintf(key, sizeof(key), "%s/%s", prefix, tags[i].name);
- else av_strlcpy(key, tags[i].name, sizeof(key));
+ if (prefix)
+ snprintf(key, sizeof(key), "%s/%s", prefix, tags[i].name);
+ else
+ av_strlcpy(key, tags[i].name, sizeof(key));
if (tags[i].def || !lang) {
- av_dict_set(metadata, key, tags[i].string, 0);
- if (tags[i].sub.nb_elem)
- matroska_convert_tag(s, &tags[i].sub, metadata, key);
+ av_dict_set(metadata, key, tags[i].string, 0);
+ if (tags[i].sub.nb_elem)
+ matroska_convert_tag(s, &tags[i].sub, metadata, key);
}
if (lang) {
av_strlcat(key, "-", sizeof(key));
@@ -1229,24 +1247,24 @@ static void matroska_convert_tags(AVFormatContext *s)
MatroskaTags *tags = matroska->tags.elem;
int i, j;
- for (i=0; i < matroska->tags.nb_elem; i++) {
+ for (i = 0; i < matroska->tags.nb_elem; i++) {
if (tags[i].target.attachuid) {
MatroskaAttachement *attachment = matroska->attachments.elem;
- for (j=0; j<matroska->attachments.nb_elem; j++)
- if (attachment[j].uid == tags[i].target.attachuid
- && attachment[j].stream)
+ for (j = 0; j < matroska->attachments.nb_elem; j++)
+ if (attachment[j].uid == tags[i].target.attachuid &&
+ attachment[j].stream)
matroska_convert_tag(s, &tags[i].tag,
&attachment[j].stream->metadata,
NULL);
} else if (tags[i].target.chapteruid) {
MatroskaChapter *chapter = matroska->chapters.elem;
- for (j=0; j<matroska->chapters.nb_elem; j++)
- if (chapter[j].uid == tags[i].target.chapteruid
- && chapter[j].chapter)
+ for (j = 0; j < matroska->chapters.nb_elem; j++)
+ if (chapter[j].uid == tags[i].target.chapteruid &&
+ chapter[j].chapter)
matroska_convert_tag(s, &tags[i].tag,
&chapter[j].chapter->metadata, NULL);
} else if (tags[i].target.trackuid) {
MatroskaTrack *track = matroska->tracks.elem;
- for (j=0; j<matroska->tracks.nb_elem; j++)
+ for (j = 0; j < matroska->tracks.nb_elem; j++)
if (track[j].uid == tags[i].target.trackuid && track[j].stream)
matroska_convert_tag(s, &tags[i].tag,
&track[j].stream->metadata, NULL);
@@ -1257,20 +1275,21 @@ static void matroska_convert_tags(AVFormatContext *s)
}
}
-static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, int
idx)
+static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska,
+ int idx)
{
- EbmlList *seekhead_list = &matroska->seekhead;
+ EbmlList *seekhead_list = &matroska->seekhead;
MatroskaSeekhead *seekhead = seekhead_list->elem;
- uint32_t level_up = matroska->level_up;
- int64_t before_pos = avio_tell(matroska->ctx->pb);
- uint32_t saved_id = matroska->current_id;
+ uint32_t level_up = matroska->level_up;
+ int64_t before_pos = avio_tell(matroska->ctx->pb);
+ uint32_t saved_id = matroska->current_id;
MatroskaLevel level;
int64_t offset;
int ret = 0;
- if (idx >= seekhead_list->nb_elem
- || seekhead[idx].id == MATROSKA_ID_SEEKHEAD
- || seekhead[idx].id == MATROSKA_ID_CLUSTER)
+ if (idx >= seekhead_list->nb_elem ||
+ seekhead[idx].id == MATROSKA_ID_SEEKHEAD ||
+ seekhead[idx].id == MATROSKA_ID_CLUSTER)
return 0;
/* seek */
@@ -1302,7 +1321,7 @@ static int
matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, int idx
}
/* seek back */
avio_seek(matroska->ctx->pb, before_pos, SEEK_SET);
- matroska->level_up = level_up;
+ matroska->level_up = level_up;
matroska->current_id = saved_id;
return ret;
@@ -1335,8 +1354,9 @@ static void
matroska_execute_seekhead(MatroskaDemuxContext *matroska)
}
}
-static void matroska_parse_cues(MatroskaDemuxContext *matroska) {
- EbmlList *seekhead_list = &matroska->seekhead;
+static void matroska_parse_cues(MatroskaDemuxContext *matroska)
+{
+ EbmlList *seekhead_list = &matroska->seekhead;
MatroskaSeekhead *seekhead = seekhead_list->elem;
EbmlList *index_list;
MatroskaIndex *index;
@@ -1352,8 +1372,8 @@ static void matroska_parse_cues(MatroskaDemuxContext
*matroska) {
index_list = &matroska->index;
index = index_list->elem;
- if (index_list->nb_elem
- && index[0].time > 1E14/matroska->time_scale) {
+ if (index_list->nb_elem &&
+ index[0].time > 1E14 / matroska->time_scale) {
av_log(matroska->ctx, AV_LOG_WARNING, "Working around broken
index.\n");
index_scale = matroska->time_scale;
}
@@ -1365,7 +1385,7 @@ static void matroska_parse_cues(MatroskaDemuxContext
*matroska) {
if (track && track->stream)
av_add_index_entry(track->stream,
pos[j].pos + matroska->segment_start,
- index[i].time/index_scale, 0, 0,
+ index[i].time / index_scale, 0, 0,
AVINDEX_KEYFRAME);
}
}
@@ -1373,10 +1393,10 @@ static void matroska_parse_cues(MatroskaDemuxContext
*matroska) {
static int matroska_aac_profile(char *codec_id)
{
- static const char * const aac_profiles[] = { "MAIN", "LC", "SSR" };
+ static const char *const aac_profiles[] = { "MAIN", "LC", "SSR" };
int profile;
- for (profile=0; profile<FF_ARRAY_ELEMS(aac_profiles); profile++)
+ for (profile = 0; profile < FF_ARRAY_ELEMS(aac_profiles); profile++)
if (strstr(codec_id, aac_profiles[profile]))
break;
return profile + 1;
@@ -1386,7 +1406,7 @@ static int matroska_aac_sri(int samplerate)
{
int sri;
- for (sri=0; sri<FF_ARRAY_ELEMS(avpriv_mpeg4audio_sample_rates); sri++)
+ for (sri = 0; sri < FF_ARRAY_ELEMS(avpriv_mpeg4audio_sample_rates); sri++)
if (avpriv_mpeg4audio_sample_rates[sri] == samplerate)
break;
return sri;
@@ -1409,13 +1429,16 @@ static int matroska_read_header(AVFormatContext *s)
matroska->ctx = s;
/* First read the EBML header. */
- if (ebml_parse(matroska, ebml_syntax, &ebml)
- || ebml.version > EBML_VERSION || ebml.max_size >
sizeof(uint64_t)
- || ebml.id_length > sizeof(uint32_t) || ebml.doctype_version > 2) {
+ if (ebml_parse(matroska, ebml_syntax, &ebml) ||
+ ebml.version > EBML_VERSION ||
+ ebml.max_size > sizeof(uint64_t) ||
+ ebml.id_length > sizeof(uint32_t) || ebml.doctype_version > 2) {
av_log(matroska->ctx, AV_LOG_ERROR,
"EBML header using unsupported features\n"
- "(EBML version %"PRIu64", doctype %s, doc version %"PRIu64")\n",
+ "(EBML version %"PRIu64
+ ", doctype %s, doc version %"PRIu64")\n",
ebml.version, ebml.doctype, ebml.doctype_version);
+
ebml_free(ebml_syntax, &ebml);
return AVERROR_PATCHWELCOME;
}
@@ -1452,7 +1475,7 @@ static int matroska_read_header(AVFormatContext *s)
av_dict_set(&s->metadata, "title", matroska->title, 0);
tracks = matroska->tracks.elem;
- for (i=0; i < matroska->tracks.nb_elem; i++) {
+ for (i = 0; i < matroska->tracks.nb_elem; i++) {
MatroskaTrack *track = &tracks[i];
enum AVCodecID codec_id = AV_CODEC_ID_NONE;
EbmlList *encodings_list = &track->encodings;
@@ -1467,7 +1490,7 @@ static int matroska_read_header(AVFormatContext *s)
track->type != MATROSKA_TRACK_TYPE_AUDIO &&
track->type != MATROSKA_TRACK_TYPE_SUBTITLE) {
av_log(matroska->ctx, AV_LOG_INFO,
- "Unknown or unsupported track type %"PRIu64"\n",
+ "Unknown or unsupported track type %" PRIu64 "\n",
track->type);
continue;
}
@@ -1476,7 +1499,7 @@ static int matroska_read_header(AVFormatContext *s)
if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
if (!track->default_duration && track->video.frame_rate > 0)
- track->default_duration = 1000000000/track->video.frame_rate;
+ track->default_duration = 1000000000 / track->video.frame_rate;
if (!track->video.display_width)
track->video.display_width = track->video.pixel_width;
if (!track->video.display_height)
@@ -1504,7 +1527,7 @@ static int matroska_read_header(AVFormatContext *s)
encodings[0].scope = 0;
av_log(matroska->ctx, AV_LOG_ERROR,
"Unsupported encoding type");
- } else if (track->codec_priv.size && encodings[0].scope&2) {
+ } else if (track->codec_priv.size && encodings[0].scope & 2) {
uint8_t *codec_priv = track->codec_priv.data;
int ret = matroska_decode_buffer(&track->codec_priv.data,
&track->codec_priv.size,
@@ -1521,10 +1544,10 @@ static int matroska_read_header(AVFormatContext *s)
}
}
- for(j=0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++){
- if(!strncmp(ff_mkv_codec_tags[j].str, track->codec_id,
- strlen(ff_mkv_codec_tags[j].str))){
- codec_id= ff_mkv_codec_tags[j].id;
+ for (j = 0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++) {
+ if (!strncmp(ff_mkv_codec_tags[j].str, track->codec_id,
+ strlen(ff_mkv_codec_tags[j].str))) {
+ codec_id = ff_mkv_codec_tags[j].id;
break;
}
}
@@ -1533,42 +1556,52 @@ static int matroska_read_header(AVFormatContext *s)
if (st == NULL)
return AVERROR(ENOMEM);
- if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC")
- && track->codec_priv.size >= 40
- && track->codec_priv.data != NULL) {
+ if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC") &&
+ track->codec_priv.size >= 40 &&
+ track->codec_priv.data != NULL) {
track->ms_compat = 1;
track->video.fourcc = AV_RL32(track->codec_priv.data + 16);
codec_id = ff_codec_get_id(ff_codec_bmp_tags, track->video.fourcc);
extradata_offset = 40;
- } else if (!strcmp(track->codec_id, "A_MS/ACM")
- && track->codec_priv.size >= 14
- && track->codec_priv.data != NULL) {
+ } else if (!strcmp(track->codec_id, "A_MS/ACM") &&
+ track->codec_priv.size >= 14 &&
+ track->codec_priv.data != NULL) {
int ret;
- ffio_init_context(&b, track->codec_priv.data,
track->codec_priv.size,
- 0, NULL, NULL, NULL, NULL);
+ ffio_init_context(&b, track->codec_priv.data,
+ track->codec_priv.size,
+ 0, NULL, NULL, NULL,
+ NULL);
ret = ff_get_wav_header(&b, st->codec, track->codec_priv.size);
if (ret < 0)
return ret;
codec_id = st->codec->codec_id;
extradata_offset = FFMIN(track->codec_priv.size, 18);
- } else if (!strcmp(track->codec_id, "V_QUICKTIME")
- && (track->codec_priv.size >= 86)
- && (track->codec_priv.data != NULL)) {
+ } else if (!strcmp(track->codec_id, "V_QUICKTIME") &&
+ (track->codec_priv.size >= 86) &&
+ (track->codec_priv.data != NULL)) {
track->video.fourcc = AV_RL32(track->codec_priv.data);
- codec_id=ff_codec_get_id(ff_codec_movvideo_tags,
track->video.fourcc);
+ codec_id = ff_codec_get_id(ff_codec_movvideo_tags,
+ track->video.fourcc);
} else if (codec_id == AV_CODEC_ID_PCM_S16BE) {
switch (track->audio.bitdepth) {
- case 8: codec_id = AV_CODEC_ID_PCM_U8; break;
- case 24: codec_id = AV_CODEC_ID_PCM_S24BE; break;
- case 32: codec_id = AV_CODEC_ID_PCM_S32BE; break;
+ case 8: codec_id = AV_CODEC_ID_PCM_U8;
+ break;
+ case 24: codec_id = AV_CODEC_ID_PCM_S24BE;
+ break;
+ case 32: codec_id = AV_CODEC_ID_PCM_S32BE;
+ break;
}
} else if (codec_id == AV_CODEC_ID_PCM_S16LE) {
switch (track->audio.bitdepth) {
- case 8: codec_id = AV_CODEC_ID_PCM_U8; break;
- case 24: codec_id = AV_CODEC_ID_PCM_S24LE; break;
- case 32: codec_id = AV_CODEC_ID_PCM_S32LE; break;
+ case 8: codec_id = AV_CODEC_ID_PCM_U8;
+ break;
+ case 24: codec_id = AV_CODEC_ID_PCM_S24LE;
+ break;
+ case 32: codec_id = AV_CODEC_ID_PCM_S32LE;
+ break;
}
- } else if (codec_id==AV_CODEC_ID_PCM_F32LE &&
track->audio.bitdepth==64) {
+ } else if (codec_id == AV_CODEC_ID_PCM_F32LE &&
+ track->audio.bitdepth == 64) {
codec_id = AV_CODEC_ID_PCM_F64LE;
} else if (codec_id == AV_CODEC_ID_AAC && !track->codec_priv.size) {
int profile = matroska_aac_profile(track->codec_id);
@@ -1576,20 +1609,20 @@ static int matroska_read_header(AVFormatContext *s)
extradata = av_mallocz(5 + FF_INPUT_BUFFER_PADDING_SIZE);
if (extradata == NULL)
return AVERROR(ENOMEM);
- extradata[0] = (profile << 3) | ((sri&0x0E) >> 1);
- extradata[1] = ((sri&0x01) << 7) | (track->audio.channels<<3);
+ extradata[0] = (profile << 3) | ((sri & 0x0E) >> 1);
+ extradata[1] = ((sri & 0x01) << 7) | (track->audio.channels << 3);
if (strstr(track->codec_id, "SBR")) {
- sri = matroska_aac_sri(track->audio.out_samplerate);
- extradata[2] = 0x56;
- extradata[3] = 0xE5;
- extradata[4] = 0x80 | (sri<<3);
+ sri = matroska_aac_sri(track->audio.out_samplerate);
+ extradata[2] = 0x56;
+ extradata[3] = 0xE5;
+ extradata[4] = 0x80 | (sri << 3);
extradata_size = 5;
} else
extradata_size = 2;
} else if (codec_id == AV_CODEC_ID_ALAC && track->codec_priv.size) {
/* Only ALAC's magic cookie is stored in Matroska's track headers.
- Create the "atom size", "tag", and "tag version" fields the
- decoder expects manually. */
+ * Create the "atom size", "tag", and "tag version" fields the
+ * decoder expects manually. */
extradata_size = 12 + track->codec_priv.size;
extradata = av_mallocz(extradata_size +
FF_INPUT_BUFFER_PADDING_SIZE);
if (extradata == NULL)
@@ -1598,31 +1631,36 @@ static int matroska_read_header(AVFormatContext *s)
memcpy(&extradata[4], "alac", 4);
AV_WB32(&extradata[8], 0);
memcpy(&extradata[12], track->codec_priv.data,
- track->codec_priv.size);
+ track->codec_priv.size);
} else if (codec_id == AV_CODEC_ID_TTA) {
extradata_size = 30;
extradata = av_mallocz(extradata_size);
if (extradata == NULL)
return AVERROR(ENOMEM);
ffio_init_context(&b, extradata, extradata_size, 1,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
avio_write(&b, "TTA1", 4);
avio_wl16(&b, 1);
avio_wl16(&b, track->audio.channels);
avio_wl16(&b, track->audio.bitdepth);
avio_wl32(&b, track->audio.out_samplerate);
avio_wl32(&b, matroska->ctx->duration *
track->audio.out_samplerate);
- } else if (codec_id == AV_CODEC_ID_RV10 || codec_id ==
AV_CODEC_ID_RV20 ||
- codec_id == AV_CODEC_ID_RV30 || codec_id ==
AV_CODEC_ID_RV40) {
+ } else if (codec_id == AV_CODEC_ID_RV10 ||
+ codec_id == AV_CODEC_ID_RV20 ||
+ codec_id == AV_CODEC_ID_RV30 ||
+ codec_id == AV_CODEC_ID_RV40) {
extradata_offset = 26;
} else if (codec_id == AV_CODEC_ID_RA_144) {
track->audio.out_samplerate = 8000;
- track->audio.channels = 1;
- } else if (codec_id == AV_CODEC_ID_RA_288 || codec_id ==
AV_CODEC_ID_COOK ||
- codec_id == AV_CODEC_ID_ATRAC3 || codec_id ==
AV_CODEC_ID_SIPR) {
+ track->audio.channels = 1;
+ } else if (codec_id == AV_CODEC_ID_RA_288 ||
+ codec_id == AV_CODEC_ID_COOK ||
+ codec_id == AV_CODEC_ID_ATRAC3 ||
+ codec_id == AV_CODEC_ID_SIPR) {
int flavor;
- ffio_init_context(&b,
track->codec_priv.data,track->codec_priv.size,
- 0, NULL, NULL, NULL, NULL);
+ ffio_init_context(&b, track->codec_priv.data,
+ track->codec_priv.size,
+ 0, NULL, NULL, NULL, NULL);
avio_skip(&b, 22);
flavor = avio_rb16(&b);
track->audio.coded_framesize = avio_rb32(&b);
@@ -1631,7 +1669,8 @@ static int matroska_read_header(AVFormatContext *s)
track->audio.frame_size = avio_rb16(&b);
track->audio.sub_packet_size = avio_rb16(&b);
if (flavor <= 0 || track->audio.coded_framesize <= 0 ||
- track->audio.sub_packet_h <= 0 || track->audio.frame_size <= 0
||
+ track->audio.sub_packet_h <= 0 ||
+ track->audio.frame_size <= 0 ||
track->audio.sub_packet_size <= 0)
return AVERROR_INVALIDDATA;
track->audio.buf = av_malloc(track->audio.frame_size *
track->audio.sub_packet_h);
@@ -1656,7 +1695,8 @@ static int matroska_read_header(AVFormatContext *s)
if (track->time_scale < 0.01)
track->time_scale = 1.0;
- avpriv_set_pts_info(st, 64, matroska->time_scale*track->time_scale,
1000*1000*1000); /* 64 bit pts in ns */
+ avpriv_set_pts_info(st, 64, matroska->time_scale * track->time_scale,
+ 1000 * 1000 * 1000); /* 64 bit pts in ns */
st->codec->codec_id = codec_id;
st->start_time = 0;
@@ -1670,13 +1710,13 @@ static int matroska_read_header(AVFormatContext *s)
st->disposition |= AV_DISPOSITION_FORCED;
if (!st->codec->extradata) {
- if(extradata){
+ if (extradata) {
st->codec->extradata = extradata;
st->codec->extradata_size = extradata_size;
- } else if(track->codec_priv.data && track->codec_priv.size > 0){
+ } else if (track->codec_priv.data && track->codec_priv.size > 0) {
st->codec->extradata = av_mallocz(track->codec_priv.size +
FF_INPUT_BUFFER_PADDING_SIZE);
- if(st->codec->extradata == NULL)
+ if (st->codec->extradata == NULL)
return AVERROR(ENOMEM);
st->codec->extradata_size = track->codec_priv.size;
memcpy(st->codec->extradata,
@@ -1688,12 +1728,12 @@ static int matroska_read_header(AVFormatContext *s)
if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->codec_tag = track->video.fourcc;
- st->codec->width = track->video.pixel_width;
- st->codec->height = track->video.pixel_height;
+ st->codec->width = track->video.pixel_width;
+ st->codec->height = track->video.pixel_height;
av_reduce(&st->sample_aspect_ratio.num,
&st->sample_aspect_ratio.den,
st->codec->height * track->video.display_width,
- st->codec-> width * track->video.display_height,
+ st->codec->width * track->video.display_height,
255);
if (st->codec->codec_id != AV_CODEC_ID_H264 &&
st->codec->codec_id != AV_CODEC_ID_HEVC)
@@ -1703,11 +1743,11 @@ static int matroska_read_header(AVFormatContext *s)
1000000000, track->default_duration, 30000);
}
} else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
+ st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->sample_rate = track->audio.out_samplerate;
- st->codec->channels = track->audio.channels;
+ st->codec->channels = track->audio.channels;
if (st->codec->codec_id != AV_CODEC_ID_AAC)
- st->need_parsing = AVSTREAM_PARSE_HEADERS;
+ st->need_parsing = AVSTREAM_PARSE_HEADERS;
} else if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE) {
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
if (st->codec->codec_id == AV_CODEC_ID_SSA)
@@ -1716,7 +1756,7 @@ static int matroska_read_header(AVFormatContext *s)
}
attachements = attachements_list->elem;
- for (j=0; j<attachements_list->nb_elem; j++) {
+ for (j = 0; j < attachements_list->nb_elem; j++) {
if (!(attachements[j].filename && attachements[j].mime &&
attachements[j].bin.data && attachements[j].bin.size > 0)) {
av_log(matroska->ctx, AV_LOG_ERROR, "incomplete attachment\n");
@@ -1724,17 +1764,18 @@ static int matroska_read_header(AVFormatContext *s)
AVStream *st = avformat_new_stream(s, NULL);
if (st == NULL)
break;
- av_dict_set(&st->metadata, "filename",attachements[j].filename, 0);
+ av_dict_set(&st->metadata, "filename", attachements[j].filename,
0);
av_dict_set(&st->metadata, "mimetype", attachements[j].mime, 0);
- st->codec->codec_id = AV_CODEC_ID_NONE;
+ st->codec->codec_id = AV_CODEC_ID_NONE;
st->codec->codec_type = AVMEDIA_TYPE_ATTACHMENT;
st->codec->extradata = av_malloc(attachements[j].bin.size);
- if(st->codec->extradata == NULL)
+ if (st->codec->extradata == NULL)
break;
st->codec->extradata_size = attachements[j].bin.size;
- memcpy(st->codec->extradata, attachements[j].bin.data,
attachements[j].bin.size);
+ memcpy(st->codec->extradata, attachements[j].bin.data,
+ attachements[j].bin.size);
- for (i=0; ff_mkv_mime_tags[i].id != AV_CODEC_ID_NONE; i++) {
+ for (i = 0; ff_mkv_mime_tags[i].id != AV_CODEC_ID_NONE; i++) {
if (!strncmp(ff_mkv_mime_tags[i].str, attachements[j].mime,
strlen(ff_mkv_mime_tags[i].str))) {
st->codec->codec_id = ff_mkv_mime_tags[i].id;
@@ -1746,15 +1787,16 @@ static int matroska_read_header(AVFormatContext *s)
}
chapters = chapters_list->elem;
- for (i=0; i<chapters_list->nb_elem; i++)
- if (chapters[i].start != AV_NOPTS_VALUE && chapters[i].uid
- && (max_start==0 || chapters[i].start > max_start)) {
+ for (i = 0; i < chapters_list->nb_elem; i++)
+ if (chapters[i].start != AV_NOPTS_VALUE && chapters[i].uid &&
+ (max_start == 0 || chapters[i].start > max_start)) {
chapters[i].chapter =
- avpriv_new_chapter(s, chapters[i].uid, (AVRational){1, 1000000000},
- chapters[i].start, chapters[i].end,
- chapters[i].title);
+ avpriv_new_chapter(s, chapters[i].uid,
+ (AVRational) {1, 1000000000 },
+ chapters[i].start, chapters[i].end,
+ chapters[i].title);
av_dict_set(&chapters[i].chapter->metadata,
- "title", chapters[i].title, 0);
+ "title", chapters[i].title, 0);
max_start = chapters[i].start;
}
@@ -1810,7 +1852,7 @@ static void matroska_clear_queue(MatroskaDemuxContext
*matroska)
}
static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf,
- int* buf_size, int type,
+ int *buf_size, int type,
uint32_t **lace_buf, int *laces)
{
int res = 0, n, size = *buf_size;
@@ -1828,9 +1870,9 @@ static int matroska_parse_laces(MatroskaDemuxContext
*matroska, uint8_t **buf,
}
assert(size > 0);
- *laces = *data + 1;
- data += 1;
- size -= 1;
+ *laces = *data + 1;
+ data += 1;
+ size -= 1;
lace_size = av_mallocz(*laces * sizeof(int));
if (!lace_size)
return AVERROR(ENOMEM);
@@ -1845,10 +1887,10 @@ static int matroska_parse_laces(MatroskaDemuxContext
*matroska, uint8_t **buf,
res = AVERROR_EOF;
break;
}
- temp = *data;
+ temp = *data;
lace_size[n] += temp;
- data += 1;
- size -= 1;
+ data += 1;
+ size -= 1;
if (temp != 0xff)
break;
}
@@ -1923,12 +1965,12 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext
*matroska,
uint64_t timecode, uint64_t duration,
int64_t pos)
{
- int a = st->codec->block_align;
+ int a = st->codec->block_align;
int sps = track->audio.sub_packet_size;
int cfs = track->audio.coded_framesize;
- int h = track->audio.sub_packet_h;
- int y = track->audio.sub_packet_cnt;
- int w = track->audio.frame_size;
+ int h = track->audio.sub_packet_h;
+ int y = track->audio.sub_packet_cnt;
+ int w = track->audio.frame_size;
int x;
if (!track->audio.pkt_cnt) {
@@ -1940,24 +1982,25 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext
*matroska,
"Corrupt int4 RM-style audio packet size\n");
return AVERROR_INVALIDDATA;
}
- for (x=0; x<h/2; x++)
- memcpy(track->audio.buf+x*2*w+y*cfs,
- data+x*cfs, cfs);
+ for (x = 0; x < h / 2; x++)
+ memcpy(track->audio.buf + x * 2 * w + y * cfs,
+ data + x * cfs, cfs);
} else if (st->codec->codec_id == AV_CODEC_ID_SIPR) {
if (size < w) {
av_log(matroska->ctx, AV_LOG_ERROR,
"Corrupt sipr RM-style audio packet size\n");
return AVERROR_INVALIDDATA;
}
- memcpy(track->audio.buf + y*w, data, w);
+ memcpy(track->audio.buf + y * w, data, w);
} else {
if (size < sps * w / sps) {
av_log(matroska->ctx, AV_LOG_ERROR,
"Corrupt generic RM-style audio packet size\n");
return AVERROR_INVALIDDATA;
}
- for (x=0; x<w/sps; x++)
- memcpy(track->audio.buf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)),
data+x*sps, sps);
+ for (x = 0; x < w / sps; x++)
+ memcpy(track->audio.buf + sps * (h * x + ((h + 1) / 2) * (y &
1) + (y >> 1)),
+ data + x * sps, sps);
}
if (++track->audio.sub_packet_cnt >= h) {
@@ -1971,13 +2014,12 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext
*matroska,
while (track->audio.pkt_cnt) {
AVPacket *pkt = av_mallocz(sizeof(AVPacket));
av_new_packet(pkt, a);
- memcpy(pkt->data, track->audio.buf
- + a * (h*w / a - track->audio.pkt_cnt--), a);
+ memcpy(pkt->data, track->audio.buf + a * (h * w / a -
track->audio.pkt_cnt--), a);
pkt->pts = track->audio.buf_timecode;
track->audio.buf_timecode = AV_NOPTS_VALUE;
pkt->pos = pos;
pkt->stream_index = st->index;
- dynarray_add(&matroska->packets,&matroska->num_packets,pkt);
+ dynarray_add(&matroska->packets, &matroska->num_packets, pkt);
}
return 0;
@@ -2038,16 +2080,16 @@ static int matroska_parse_wavpack(MatroskaTrack *track,
uint8_t *src,
dst = tmp;
dstlen += blocksize + 32;
- AV_WL32(dst + offset, MKTAG('w', 'v', 'p', 'k')); // tag
- AV_WL32(dst + offset + 4, blocksize + 24); // blocksize - 8
- AV_WL16(dst + offset + 8, ver); // version
+ AV_WL32(dst + offset, MKTAG('w', 'v', 'p', 'k')); // tag
+ AV_WL32(dst + offset + 4, blocksize + 24); // blocksize - 8
+ AV_WL16(dst + offset + 8, ver); // version
AV_WL16(dst + offset + 10, 0); //
track/index_no
AV_WL32(dst + offset + 12, 0); // total samples
AV_WL32(dst + offset + 16, 0); // block index
AV_WL32(dst + offset + 20, samples); // number of
samples
AV_WL32(dst + offset + 24, flags); // flags
AV_WL32(dst + offset + 28, crc); // crc
- memcpy (dst + offset + 32, src, blocksize); // block data
+ memcpy(dst + offset + 32, src, blocksize); // block data
src += blocksize;
srclen -= blocksize;
@@ -2138,7 +2180,7 @@ static int matroska_parse_frame(MatroskaDemuxContext
*matroska,
st->codec->codec_id == AV_CODEC_ID_SSA)
matroska_merge_packets(matroska->prev_pkt, pkt);
else {
- dynarray_add(&matroska->packets,&matroska->num_packets,pkt);
+ dynarray_add(&matroska->packets, &matroska->num_packets, pkt);
matroska->prev_pkt = pkt;
}
@@ -2173,7 +2215,7 @@ static int matroska_parse_block(MatroskaDemuxContext
*matroska, uint8_t *data,
track = matroska_find_track_by_num(matroska, num);
if (!track || !track->stream) {
av_log(matroska->ctx, AV_LOG_INFO,
- "Invalid stream %"PRIu64" or size %u\n", num, size);
+ "Invalid stream %" PRIu64 " or size %u\n", num, size);
return AVERROR_INVALIDDATA;
} else if (size <= 3)
return 0;
@@ -2188,14 +2230,15 @@ static int matroska_parse_block(MatroskaDemuxContext
*matroska, uint8_t *data,
if (is_keyframe == -1)
is_keyframe = flags & 0x80 ? AV_PKT_FLAG_KEY : 0;
- if (cluster_time != (uint64_t)-1
- && (block_time >= 0 || cluster_time >= -block_time)) {
+ if (cluster_time != (uint64_t)-1 &&
+ (block_time >= 0 || cluster_time >= -block_time)) {
timecode = cluster_time + block_time;
- if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE
- && timecode < track->end_timecode)
+ if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE &&
+ timecode < track->end_timecode)
is_keyframe = 0; /* overlapping subtitles are not key frame */
if (is_keyframe)
- av_add_index_entry(st, cluster_pos, timecode,
0,0,AVINDEX_KEYFRAME);
+ av_add_index_entry(st, cluster_pos, timecode, 0, 0,
+ AVINDEX_KEYFRAME);
}
if (matroska->skip_to_keyframe && track->type !=
MATROSKA_TRACK_TYPE_SUBTITLE) {
@@ -2217,7 +2260,7 @@ static int matroska_parse_block(MatroskaDemuxContext
*matroska, uint8_t *data,
"Incorrect block_duration, possibly corrupted container");
}
} else {
- duration = track->default_duration / matroska->time_scale;
+ duration = track->default_duration / matroska->time_scale;
block_duration = duration * laces;
}
@@ -2230,14 +2273,12 @@ static int matroska_parse_block(MatroskaDemuxContext
*matroska, uint8_t *data,
st->codec->codec_id == AV_CODEC_ID_COOK ||
st->codec->codec_id == AV_CODEC_ID_SIPR ||
st->codec->codec_id == AV_CODEC_ID_ATRAC3) &&
- st->codec->block_align && track->audio.sub_packet_size) {
-
+ st->codec->block_align && track->audio.sub_packet_size) {
res = matroska_parse_rm_audio(matroska, track, st, data,
lace_size[n],
timecode, duration, pos);
if (res)
goto end;
-
} else {
res = matroska_parse_frame(matroska, track, st, data, lace_size[n],
timecode, duration,
@@ -2288,14 +2329,16 @@ static int
matroska_parse_cluster_incremental(MatroskaDemuxContext *matroska)
if (!res &&
matroska->current_cluster_num_blocks <
- matroska->current_cluster.blocks.nb_elem) {
+ matroska->current_cluster.blocks.nb_elem) {
blocks_list = &matroska->current_cluster.blocks;
blocks = blocks_list->elem;
matroska->current_cluster_num_blocks = blocks_list->nb_elem;
i = blocks_list->nb_elem - 1;
if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
- int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
+ int is_keyframe = blocks[i].non_simple
+ ? !blocks[i].reference
+ : -1;
if (!blocks[i].non_simple)
blocks[i].duration = AV_NOPTS_VALUE;
res = matroska_parse_block(matroska,
@@ -2307,7 +2350,8 @@ static int
matroska_parse_cluster_incremental(MatroskaDemuxContext *matroska)
}
}
- if (res < 0) matroska->done = 1;
+ if (res < 0)
+ matroska->done = 1;
return res;
}
@@ -2327,16 +2371,18 @@ static int matroska_parse_cluster(MatroskaDemuxContext
*matroska)
res = ebml_parse(matroska, matroska_clusters, &cluster);
blocks_list = &cluster.blocks;
blocks = blocks_list->elem;
- for (i=0; i<blocks_list->nb_elem && !res; i++)
+ for (i = 0; i < blocks_list->nb_elem && !res; i++)
if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
- int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
+ int is_keyframe = blocks[i].non_simple
+ ? !blocks[i].reference
+ : -1;
if (!blocks[i].non_simple)
blocks[i].duration = AV_NOPTS_VALUE;
- res=matroska_parse_block(matroska,
- blocks[i].bin.data, blocks[i].bin.size,
- blocks[i].bin.pos, cluster.timecode,
- blocks[i].duration, is_keyframe,
- pos);
+ res = matroska_parse_block(matroska,
+ blocks[i].bin.data, blocks[i].bin.size,
+ blocks[i].bin.pos, cluster.timecode,
+ blocks[i].duration, is_keyframe,
+ pos);
}
ebml_free(matroska_cluster, &cluster);
return res;
@@ -2382,7 +2428,8 @@ static int matroska_read_seek(AVFormatContext *s, int
stream_index,
timestamp = FFMAX(timestamp, st->index_entries[0].timestamp);
if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
- avio_seek(s->pb, st->index_entries[st->nb_index_entries-1].pos,
SEEK_SET);
+ avio_seek(s->pb, st->index_entries[st->nb_index_entries - 1].pos,
+ SEEK_SET);
matroska->current_id = 0;
while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
matroska_clear_queue(matroska);
@@ -2396,17 +2443,19 @@ static int matroska_read_seek(AVFormatContext *s, int
stream_index,
return 0;
index_min = index;
- for (i=0; i < matroska->tracks.nb_elem; i++) {
- tracks[i].audio.pkt_cnt = 0;
+ for (i = 0; i < matroska->tracks.nb_elem; i++) {
+ tracks[i].audio.pkt_cnt = 0;
tracks[i].audio.sub_packet_cnt = 0;
- tracks[i].audio.buf_timecode = AV_NOPTS_VALUE;
- tracks[i].end_timecode = 0;
- if (tracks[i].type == MATROSKA_TRACK_TYPE_SUBTITLE
- && !tracks[i].stream->discard != AVDISCARD_ALL) {
- index_sub = av_index_search_timestamp(tracks[i].stream,
st->index_entries[index].timestamp, AVSEEK_FLAG_BACKWARD);
- if (index_sub >= 0
- && st->index_entries[index_sub].pos <
st->index_entries[index_min].pos
- && st->index_entries[index].timestamp -
st->index_entries[index_sub].timestamp < 30000000000/matroska->time_scale)
+ tracks[i].audio.buf_timecode = AV_NOPTS_VALUE;
+ tracks[i].end_timecode = 0;
+ if (tracks[i].type == MATROSKA_TRACK_TYPE_SUBTITLE &&
+ !tracks[i].stream->discard != AVDISCARD_ALL) {
+ index_sub = av_index_search_timestamp(
+ tracks[i].stream, st->index_entries[index].timestamp,
+ AVSEEK_FLAG_BACKWARD);
+ if (index_sub >= 0 &&
+ st->index_entries[index_sub].pos <
st->index_entries[index_min].pos &&
+ st->index_entries[index].timestamp -
st->index_entries[index_sub].timestamp < 30000000000 / matroska->time_scale)
index_min = index_sub;
}
}
@@ -2428,7 +2477,7 @@ static int matroska_read_close(AVFormatContext *s)
matroska_clear_queue(matroska);
- for (n=0; n < matroska->tracks.nb_elem; n++)
+ for (n = 0; n < matroska->tracks.nb_elem; n++)
if (tracks[n].type == MATROSKA_TRACK_TYPE_AUDIO)
av_free(tracks[n].audio.buf);
ebml_free(matroska_cluster, &matroska->current_cluster);
--
1.8.3.2
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel