mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-10-24 02:09:03 +03:00
avformat/asfdec_f: export stream-specific metadata in the stream
Store such entries in the metadata of the corresponding stream. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
committed by
michaelni
parent
dadf0b5b2e
commit
2668cb6e31
@@ -70,6 +70,8 @@ typedef struct ASFStream {
|
||||
|
||||
int payload_ext_ct;
|
||||
ASFPayload payload[8];
|
||||
|
||||
AVDictionary *metadata;
|
||||
} ASFStream;
|
||||
|
||||
typedef struct ASFContext {
|
||||
@@ -645,7 +647,9 @@ static int asf_read_metadata(AVFormatContext *s)
|
||||
if(stream_num < 128)
|
||||
asf->dar[stream_num].den = aspect_y;
|
||||
} else {
|
||||
get_tag(s, &s->metadata, name, value_type, value_len);
|
||||
get_tag(s, stream_num > 0 && stream_num < 128 ? &asf->streams[stream_num].metadata
|
||||
: &s->metadata,
|
||||
name, value_type, value_len);
|
||||
}
|
||||
av_freep(&name);
|
||||
}
|
||||
@@ -818,6 +822,10 @@ static int asf_read_header(AVFormatContext *s)
|
||||
int stream_num = asf->asfid2avid[i];
|
||||
if (stream_num >= 0) {
|
||||
AVStream *st = s->streams[stream_num];
|
||||
int ret = av_dict_copy(&st->metadata, asf->streams[i].metadata, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ff_metadata_conv(&st->metadata, NULL, ff_asf_metadata_conv);
|
||||
if (!st->codecpar->bit_rate)
|
||||
st->codecpar->bit_rate = asf->stream_bitrates[i];
|
||||
if (asf->dar[i].num > 0 && asf->dar[i].den > 0) {
|
||||
@@ -1431,7 +1439,11 @@ static void skip_to_key(AVFormatContext *s)
|
||||
|
||||
static int asf_read_close(AVFormatContext *s)
|
||||
{
|
||||
ASFContext *asf = s->priv_data;
|
||||
|
||||
asf_reset_header(s);
|
||||
for (int i = 0; i < 128; i++)
|
||||
av_dict_free(&asf->streams[i].metadata);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1618,6 +1630,7 @@ const FFInputFormat ff_asf_demuxer = {
|
||||
.p.flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH,
|
||||
.p.priv_class = &asf_class,
|
||||
.priv_data_size = sizeof(ASFContext),
|
||||
.flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
|
||||
.read_probe = asf_probe,
|
||||
.read_header = asf_read_header,
|
||||
.read_packet = asf_read_packet,
|
||||
|
||||
@@ -169,6 +169,10 @@ static int asfrtp_parse_sdp_line(AVFormatContext *s, int stream_index,
|
||||
|
||||
for (i = 0; i < rt->asf_ctx->nb_streams; i++) {
|
||||
if (s->streams[stream_index]->id == rt->asf_ctx->streams[i]->id) {
|
||||
int ret = av_dict_copy(&s->streams[stream_index]->metadata,
|
||||
rt->asf_ctx->streams[i]->metadata, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
avcodec_parameters_copy(s->streams[stream_index]->codecpar,
|
||||
rt->asf_ctx->streams[i]->codecpar);
|
||||
ffstream(s->streams[stream_index])->need_parsing =
|
||||
|
||||
@@ -83,7 +83,11 @@ fate-vc1: $(FATE_VC1-yes)
|
||||
FATE_MICROSOFT-$(call ALLYES, PIPE_PROTOCOL ASF_DEMUXER FRAMECRC_MUXER) += fate-asf-repldata
|
||||
fate-asf-repldata: CMD = framecrc -i $(TARGET_SAMPLES)/asf/bug821-2.asf -c copy
|
||||
|
||||
FATE_MICROSOFT_FFPROBE-$(CONFIG_ASF_DEMUXER) += fate-asf-stream-metadata
|
||||
fate-asf-stream-metadata: CMD = probe -show_entries format_tags:stream_tags $(TARGET_SAMPLES)/wmv8/wmv8_x8intra.wmv
|
||||
|
||||
FATE_MICROSOFT += $(FATE_MICROSOFT-yes)
|
||||
|
||||
FATE_SAMPLES_FFMPEG += $(FATE_MICROSOFT)
|
||||
fate-microsoft: $(FATE_MICROSOFT)
|
||||
FATE_SAMPLES_FFPROBE += $(FATE_MICROSOFT_FFPROBE-yes)
|
||||
fate-microsoft: $(FATE_MICROSOFT) $(FATE_MICROSOFT_FFPROBE-yes)
|
||||
|
||||
19
tests/ref/fate/asf-stream-metadata
Normal file
19
tests/ref/fate/asf-stream-metadata
Normal file
@@ -0,0 +1,19 @@
|
||||
[STREAM]
|
||||
TAG:IsVBR=0
|
||||
TAG:DeviceConformanceTemplate=L2
|
||||
TAG:WM/WMADRCPeakReference=8322
|
||||
TAG:WM/WMADRCAverageReference=1228
|
||||
TAG:NumberOfFrames=110
|
||||
TAG:language=eng
|
||||
[/STREAM]
|
||||
[STREAM]
|
||||
TAG:IsVBR=0
|
||||
TAG:DeviceConformanceTemplate=@
|
||||
TAG:language=eng
|
||||
[/STREAM]
|
||||
[FORMAT]
|
||||
TAG:creation_time=2003-12-12T01:31:27.640000Z
|
||||
TAG:WMFSDKVersion=9.00.00.2980
|
||||
TAG:WMFSDKNeeded=0.0.0.0000
|
||||
TAG:IsVBR=0
|
||||
[/FORMAT]
|
||||
Reference in New Issue
Block a user