lavf: move RIFF INFO tag writing from avienc to riff
It will be useful in the wav muxer. Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
a119c64e38
commit
71e92414bf
@ -105,19 +105,6 @@ static char* avi_stream2fourcc(char* tag, int index, enum AVMediaType type)
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void avi_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
|
|
||||||
{
|
|
||||||
int len = strlen(str);
|
|
||||||
if (len > 0) {
|
|
||||||
len++;
|
|
||||||
ffio_wfourcc(pb, tag);
|
|
||||||
avio_wl32(pb, len);
|
|
||||||
avio_put_str(pb, str);
|
|
||||||
if (len & 1)
|
|
||||||
avio_w8(pb, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int avi_write_counters(AVFormatContext* s, int riff_id)
|
static int avi_write_counters(AVFormatContext* s, int riff_id)
|
||||||
{
|
{
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
@ -300,7 +287,7 @@ static int avi_write_header(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
ff_end_tag(pb, strf);
|
ff_end_tag(pb, strf);
|
||||||
if ((t = av_dict_get(s->streams[i]->metadata, "title", NULL, 0))) {
|
if ((t = av_dict_get(s->streams[i]->metadata, "title", NULL, 0))) {
|
||||||
avi_write_info_tag(s->pb, "strn", t->value);
|
ff_riff_write_info_tag(s->pb, "strn", t->value);
|
||||||
t = NULL;
|
t = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -377,14 +364,7 @@ static int avi_write_header(AVFormatContext *s)
|
|||||||
|
|
||||||
ff_end_tag(pb, list1);
|
ff_end_tag(pb, list1);
|
||||||
|
|
||||||
list2 = ff_start_tag(pb, "LIST");
|
ff_riff_write_info(s);
|
||||||
ffio_wfourcc(pb, "INFO");
|
|
||||||
ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
|
|
||||||
for (i = 0; *ff_riff_tags[i]; i++) {
|
|
||||||
if ((t = av_dict_get(s->metadata, ff_riff_tags[i], NULL, AV_DICT_MATCH_CASE)))
|
|
||||||
avi_write_info_tag(s->pb, t->key, t->value);
|
|
||||||
}
|
|
||||||
ff_end_tag(pb, list2);
|
|
||||||
|
|
||||||
/* some padding for easier tag editing */
|
/* some padding for easier tag editing */
|
||||||
list2 = ff_start_tag(pb, "JUNK");
|
list2 = ff_start_tag(pb, "JUNK");
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* RIFF codec tags
|
* RIFF common functions and data
|
||||||
* Copyright (c) 2000 Fabrice Bellard
|
* Copyright (c) 2000 Fabrice Bellard
|
||||||
*
|
*
|
||||||
* This file is part of Libav.
|
* This file is part of Libav.
|
||||||
@ -708,3 +708,33 @@ int ff_read_riff_info(AVFormatContext *s, int64_t size)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
|
||||||
|
{
|
||||||
|
int len = strlen(str);
|
||||||
|
if (len > 0) {
|
||||||
|
len++;
|
||||||
|
ffio_wfourcc(pb, tag);
|
||||||
|
avio_wl32(pb, len);
|
||||||
|
avio_put_str(pb, str);
|
||||||
|
if (len & 1)
|
||||||
|
avio_w8(pb, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ff_riff_write_info(AVFormatContext *s)
|
||||||
|
{
|
||||||
|
AVIOContext *pb = s->pb;
|
||||||
|
int i;
|
||||||
|
int64_t list_pos;
|
||||||
|
AVDictionaryEntry *t = NULL;
|
||||||
|
|
||||||
|
list_pos = ff_start_tag(pb, "LIST");
|
||||||
|
ffio_wfourcc(pb, "INFO");
|
||||||
|
ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
|
||||||
|
for (i = 0; *ff_riff_tags[i]; i++) {
|
||||||
|
if ((t = av_dict_get(s->metadata, ff_riff_tags[i], NULL, AV_DICT_MATCH_CASE)))
|
||||||
|
ff_riff_write_info_tag(s->pb, t->key, t->value);
|
||||||
|
}
|
||||||
|
ff_end_tag(pb, list_pos);
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* RIFF codec tags
|
* RIFF common functions and data
|
||||||
* copyright (c) 2000 Fabrice Bellard
|
* copyright (c) 2000 Fabrice Bellard
|
||||||
*
|
*
|
||||||
* This file is part of Libav.
|
* This file is part of Libav.
|
||||||
@ -60,4 +60,14 @@ void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssiz
|
|||||||
|
|
||||||
int ff_read_riff_info(AVFormatContext *s, int64_t size);
|
int ff_read_riff_info(AVFormatContext *s, int64_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write all recognized RIFF tags from s->metadata
|
||||||
|
*/
|
||||||
|
void ff_riff_write_info(AVFormatContext *s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a single RIFF info tag
|
||||||
|
*/
|
||||||
|
void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str);
|
||||||
|
|
||||||
#endif /* AVFORMAT_RIFF_H */
|
#endif /* AVFORMAT_RIFF_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user