mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-12-20 02:28:17 +00:00
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;
|
||||
}
|
||||
|
||||
// only look for metadata values when we are not nested and key != NULL
|
||||
if (depth == 1 && key) {
|
||||
acodec = astream ? astream->codec : NULL;
|
||||
vcodec = vstream ? vstream->codec : NULL;
|
||||
if (key) {
|
||||
// stream info doesn't live any deeper than the first object
|
||||
if (depth == 1) {
|
||||
acodec = astream ? astream->codec : NULL;
|
||||
vcodec = vstream ? vstream->codec : NULL;
|
||||
|
||||
if (amf_type == AMF_DATA_TYPE_NUMBER ||
|
||||
amf_type == AMF_DATA_TYPE_BOOL) {
|
||||
if (!strcmp(key, "duration"))
|
||||
s->duration = num_val * AV_TIME_BASE;
|
||||
else if (!strcmp(key, "videodatarate") && vcodec &&
|
||||
0 <= (int)(num_val * 1024.0))
|
||||
vcodec->bit_rate = num_val * 1024.0;
|
||||
else if (!strcmp(key, "audiodatarate") && acodec &&
|
||||
0 <= (int)(num_val * 1024.0))
|
||||
acodec->bit_rate = num_val * 1024.0;
|
||||
else if (!strcmp(key, "datastream")) {
|
||||
AVStream *st = create_stream(s, AVMEDIA_TYPE_DATA);
|
||||
if (!st)
|
||||
return AVERROR(ENOMEM);
|
||||
st->codec->codec_id = AV_CODEC_ID_TEXT;
|
||||
} else if (flv->trust_metadata) {
|
||||
if (!strcmp(key, "videocodecid") && vcodec) {
|
||||
flv_set_video_codec(s, vstream, num_val, 0);
|
||||
} else if (!strcmp(key, "audiocodecid") && acodec) {
|
||||
int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET;
|
||||
flv_set_audio_codec(s, astream, acodec, id);
|
||||
} else if (!strcmp(key, "audiosamplerate") && acodec) {
|
||||
acodec->sample_rate = num_val;
|
||||
} else if (!strcmp(key, "audiosamplesize") && acodec) {
|
||||
acodec->bits_per_coded_sample = num_val;
|
||||
} else if (!strcmp(key, "stereo") && acodec) {
|
||||
acodec->channels = num_val + 1;
|
||||
acodec->channel_layout = acodec->channels == 2 ?
|
||||
AV_CH_LAYOUT_STEREO :
|
||||
AV_CH_LAYOUT_MONO;
|
||||
} else if (!strcmp(key, "width") && vcodec) {
|
||||
vcodec->width = num_val;
|
||||
} else if (!strcmp(key, "height") && vcodec) {
|
||||
vcodec->height = num_val;
|
||||
if (amf_type == AMF_DATA_TYPE_NUMBER ||
|
||||
amf_type == AMF_DATA_TYPE_BOOL) {
|
||||
if (!strcmp(key, "duration"))
|
||||
s->duration = num_val * AV_TIME_BASE;
|
||||
else if (!strcmp(key, "videodatarate") && vcodec &&
|
||||
0 <= (int)(num_val * 1024.0))
|
||||
vcodec->bit_rate = num_val * 1024.0;
|
||||
else if (!strcmp(key, "audiodatarate") && acodec &&
|
||||
0 <= (int)(num_val * 1024.0))
|
||||
acodec->bit_rate = num_val * 1024.0;
|
||||
else if (!strcmp(key, "datastream")) {
|
||||
AVStream *st = create_stream(s, AVMEDIA_TYPE_DATA);
|
||||
if (!st)
|
||||
return AVERROR(ENOMEM);
|
||||
st->codec->codec_id = AV_CODEC_ID_TEXT;
|
||||
} else if (flv->trust_metadata) {
|
||||
if (!strcmp(key, "videocodecid") && vcodec) {
|
||||
flv_set_video_codec(s, vstream, num_val, 0);
|
||||
} else if (!strcmp(key, "audiocodecid") && acodec) {
|
||||
int id = ((int)num_val) << FLV_AUDIO_CODECID_OFFSET;
|
||||
flv_set_audio_codec(s, astream, acodec, id);
|
||||
} else if (!strcmp(key, "audiosamplerate") && acodec) {
|
||||
acodec->sample_rate = num_val;
|
||||
} else if (!strcmp(key, "audiosamplesize") && acodec) {
|
||||
acodec->bits_per_coded_sample = num_val;
|
||||
} else if (!strcmp(key, "stereo") && acodec) {
|
||||
acodec->channels = num_val + 1;
|
||||
acodec->channel_layout = acodec->channels == 2 ?
|
||||
AV_CH_LAYOUT_STEREO :
|
||||
AV_CH_LAYOUT_MONO;
|
||||
} else if (!strcmp(key, "width") && vcodec) {
|
||||
vcodec->width = num_val;
|
||||
} else if (!strcmp(key, "height") && vcodec) {
|
||||
vcodec->height = num_val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -560,7 +562,7 @@ static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
|
||||
if (!strcmp(buffer, "onTextData"))
|
||||
return 1;
|
||||
|
||||
if (strcmp(buffer, "onMetaData"))
|
||||
if (strcmp(buffer, "onMetaData") && strcmp(buffer, "onCuePoint"))
|
||||
return -1;
|
||||
|
||||
// find the streams now so that amf_parse_object doesn't need to do
|
||||
|
Loading…
Reference in New Issue
Block a user