Merge commit '93c04e095dc37ebdab22174e88cfa91e24940866'
* commit '93c04e095dc37ebdab22174e88cfa91e24940866': Expose metadata found in onCuePoint events in .flv files. Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
9f97f7c546
@ -458,45 +458,47 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// only look for metadata values when we are not nested and key != NULL
|
if (key) {
|
||||||
if (depth == 1 && key) {
|
// stream info doesn't live any deeper than the first object
|
||||||
acodec = astream ? astream->codec : NULL;
|
if (depth == 1) {
|
||||||
vcodec = vstream ? vstream->codec : NULL;
|
acodec = astream ? astream->codec : NULL;
|
||||||
|
vcodec = vstream ? vstream->codec : NULL;
|
||||||
|
|
||||||
if (amf_type == AMF_DATA_TYPE_NUMBER ||
|
if (amf_type == AMF_DATA_TYPE_NUMBER ||
|
||||||
amf_type == AMF_DATA_TYPE_BOOL) {
|
amf_type == AMF_DATA_TYPE_BOOL) {
|
||||||
if (!strcmp(key, "duration"))
|
if (!strcmp(key, "duration"))
|
||||||
s->duration = num_val * AV_TIME_BASE;
|
s->duration = num_val * AV_TIME_BASE;
|
||||||
else if (!strcmp(key, "videodatarate") && vcodec &&
|
else if (!strcmp(key, "videodatarate") && vcodec &&
|
||||||
0 <= (int)(num_val * 1024.0))
|
0 <= (int)(num_val * 1024.0))
|
||||||
vcodec->bit_rate = num_val * 1024.0;
|
vcodec->bit_rate = num_val * 1024.0;
|
||||||
else if (!strcmp(key, "audiodatarate") && acodec &&
|
else if (!strcmp(key, "audiodatarate") && acodec &&
|
||||||
0 <= (int)(num_val * 1024.0))
|
0 <= (int)(num_val * 1024.0))
|
||||||
acodec->bit_rate = num_val * 1024.0;
|
acodec->bit_rate = num_val * 1024.0;
|
||||||
else if (!strcmp(key, "datastream")) {
|
else if (!strcmp(key, "datastream")) {
|
||||||
AVStream *st = create_stream(s, AVMEDIA_TYPE_DATA);
|
AVStream *st = create_stream(s, AVMEDIA_TYPE_DATA);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
st->codec->codec_id = AV_CODEC_ID_TEXT;
|
st->codec->codec_id = AV_CODEC_ID_TEXT;
|
||||||
} else if (flv->trust_metadata) {
|
} else if (flv->trust_metadata) {
|
||||||
if (!strcmp(key, "videocodecid") && vcodec) {
|
if (!strcmp(key, "videocodecid") && vcodec) {
|
||||||
flv_set_video_codec(s, vstream, num_val, 0);
|
flv_set_video_codec(s, vstream, num_val, 0);
|
||||||
} else if (!strcmp(key, "audiocodecid") && acodec) {
|
} else if (!strcmp(key, "audiocodecid") && acodec) {
|
||||||
int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET;
|
int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET;
|
||||||
flv_set_audio_codec(s, astream, acodec, id);
|
flv_set_audio_codec(s, astream, acodec, id);
|
||||||
} else if (!strcmp(key, "audiosamplerate") && acodec) {
|
} else if (!strcmp(key, "audiosamplerate") && acodec) {
|
||||||
acodec->sample_rate = num_val;
|
acodec->sample_rate = num_val;
|
||||||
} else if (!strcmp(key, "audiosamplesize") && acodec) {
|
} else if (!strcmp(key, "audiosamplesize") && acodec) {
|
||||||
acodec->bits_per_coded_sample = num_val;
|
acodec->bits_per_coded_sample = num_val;
|
||||||
} else if (!strcmp(key, "stereo") && acodec) {
|
} else if (!strcmp(key, "stereo") && acodec) {
|
||||||
acodec->channels = num_val + 1;
|
acodec->channels = num_val + 1;
|
||||||
acodec->channel_layout = acodec->channels == 2 ?
|
acodec->channel_layout = acodec->channels == 2 ?
|
||||||
AV_CH_LAYOUT_STEREO :
|
AV_CH_LAYOUT_STEREO :
|
||||||
AV_CH_LAYOUT_MONO;
|
AV_CH_LAYOUT_MONO;
|
||||||
} else if (!strcmp(key, "width") && vcodec) {
|
} else if (!strcmp(key, "width") && vcodec) {
|
||||||
vcodec->width = num_val;
|
vcodec->width = num_val;
|
||||||
} else if (!strcmp(key, "height") && vcodec) {
|
} else if (!strcmp(key, "height") && vcodec) {
|
||||||
vcodec->height = num_val;
|
vcodec->height = num_val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -560,7 +562,7 @@ static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
|
|||||||
if (!strcmp(buffer, "onTextData"))
|
if (!strcmp(buffer, "onTextData"))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (strcmp(buffer, "onMetaData"))
|
if (strcmp(buffer, "onMetaData") && strcmp(buffer, "onCuePoint"))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// find the streams now so that amf_parse_object doesn't need to do
|
// find the streams now so that amf_parse_object doesn't need to do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user