mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit '4efdadc8ec50332c812e8a95e8c67f5a260e7cb0'
* commit '4efdadc8ec50332c812e8a95e8c67f5a260e7cb0': matroskadec: export just the STREAMINFO block as FLAC extradata Conflicts: libavformat/matroskadec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
1c0ce2d4e0
|
@ -48,6 +48,7 @@
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
|
|
||||||
#include "libavcodec/bytestream.h"
|
#include "libavcodec/bytestream.h"
|
||||||
|
#include "libavcodec/flac.h"
|
||||||
#include "libavcodec/mpeg4audio.h"
|
#include "libavcodec/mpeg4audio.h"
|
||||||
|
|
||||||
#include "avformat.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);
|
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)
|
static int matroska_parse_tracks(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
MatroskaDemuxContext *matroska = s->priv_data;
|
MatroskaDemuxContext *matroska = s->priv_data;
|
||||||
MatroskaTrack *tracks = matroska->tracks.elem;
|
MatroskaTrack *tracks = matroska->tracks.elem;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int i, j;
|
int i, j, ret;
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
for (i = 0; i < matroska->tracks.nb_elem; i++) {
|
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;
|
st->codec->block_align = track->audio.sub_packet_size;
|
||||||
extradata_offset = 78;
|
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) {
|
} else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) {
|
||||||
fourcc = AV_RL32(track->codec_priv.data);
|
fourcc = AV_RL32(track->codec_priv.data);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue