Commit 1c0ce2d4 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '4efdadc8'

* commit '4efdadc8':
  matroskadec: export just the STREAMINFO block as FLAC extradata

Conflicts:
	libavformat/matroskadec.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 69de229b 4efdadc8
......@@ -48,6 +48,7 @@
#include "libavutil/mathematics.h"
#include "libavcodec/bytestream.h"
#include "libavcodec/flac.h"
#include "libavcodec/mpeg4audio.h"
#include "avformat.h"
......@@ -1570,12 +1571,30 @@ static void matroska_metadata_creation_time(AVDictionary **metadata, int64_t dat
av_dict_set(metadata, "creation_time", buffer, 0);
}
static int matroska_parse_flac(AVFormatContext *s,
MatroskaTrack *track,
int *offset)
{
uint8_t *p = track->codec_priv.data;
int size = track->codec_priv.size;
if (size < 8 + FLAC_STREAMINFO_SIZE || p[4] & 0x7f) {
av_log(s, AV_LOG_WARNING, "Invalid FLAC private data\n");
track->codec_priv.size = 0;
return 0;
}
*offset = 8;
track->codec_priv.size = 8 + FLAC_STREAMINFO_SIZE;
return 0;
}
static int matroska_parse_tracks(AVFormatContext *s)
{
MatroskaDemuxContext *matroska = s->priv_data;
MatroskaTrack *tracks = matroska->tracks.elem;
AVStream *st;
int i, j;
int i, j, ret;
int k;
for (i = 0; i < matroska->tracks.nb_elem; i++) {
......@@ -1854,6 +1873,10 @@ static int matroska_parse_tracks(AVFormatContext *s)
st->codec->block_align = track->audio.sub_packet_size;
extradata_offset = 78;
}
} else if (codec_id == AV_CODEC_ID_FLAC && track->codec_priv.size) {
ret = matroska_parse_flac(s, track, &extradata_offset);
if (ret < 0)
return ret;
} else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) {
fourcc = AV_RL32(track->codec_priv.data);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment