mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-02 04:52:09 +00:00
riff: Move functions around to be covered by appropriate #ifdefs
This fixes compilation with --disable-muxers.
This commit is contained in:
parent
0af1fe845a
commit
7b2121e7e2
@ -531,6 +531,84 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, const AVCodecTag *t
|
||||
if (!for_asf && enc->extradata_size & 1)
|
||||
avio_w8(pb, 0);
|
||||
}
|
||||
|
||||
void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale)
|
||||
{
|
||||
int gcd;
|
||||
int audio_frame_size;
|
||||
|
||||
/* We use the known constant frame size for the codec if known, otherwise
|
||||
fallback to using AVCodecContext.frame_size, which is not as reliable
|
||||
for indicating packet duration */
|
||||
audio_frame_size = av_get_audio_frame_duration(stream, 0);
|
||||
if (!audio_frame_size)
|
||||
audio_frame_size = stream->frame_size;
|
||||
|
||||
*au_ssize= stream->block_align;
|
||||
if (audio_frame_size && stream->sample_rate) {
|
||||
*au_scale = audio_frame_size;
|
||||
*au_rate= stream->sample_rate;
|
||||
}else if(stream->codec_type == AVMEDIA_TYPE_VIDEO ||
|
||||
stream->codec_type == AVMEDIA_TYPE_DATA ||
|
||||
stream->codec_type == AVMEDIA_TYPE_SUBTITLE){
|
||||
*au_scale= stream->time_base.num;
|
||||
*au_rate = stream->time_base.den;
|
||||
}else{
|
||||
*au_scale= stream->block_align ? stream->block_align*8 : 8;
|
||||
*au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate;
|
||||
}
|
||||
gcd= av_gcd(*au_scale, *au_rate);
|
||||
*au_scale /= gcd;
|
||||
*au_rate /= gcd;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
static int riff_has_valid_tags(AVFormatContext *s)
|
||||
{
|
||||
int i;
|
||||
AVDictionaryEntry *t = 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)))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ff_riff_write_info(AVFormatContext *s)
|
||||
{
|
||||
AVIOContext *pb = s->pb;
|
||||
int i;
|
||||
int64_t list_pos;
|
||||
AVDictionaryEntry *t = NULL;
|
||||
|
||||
ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
|
||||
|
||||
/* writing empty LIST is not nice and may cause problems */
|
||||
if (!riff_has_valid_tags(s))
|
||||
return;
|
||||
|
||||
list_pos = ff_start_tag(pb, "LIST");
|
||||
ffio_wfourcc(pb, "INFO");
|
||||
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);
|
||||
}
|
||||
#endif //CONFIG_MUXERS
|
||||
|
||||
#if CONFIG_DEMUXERS
|
||||
@ -632,37 +710,6 @@ int ff_get_bmp_header(AVIOContext *pb, AVStream *st)
|
||||
avio_rl32(pb); /* ClrImportant */
|
||||
return tag1;
|
||||
}
|
||||
#endif // CONFIG_DEMUXERS
|
||||
|
||||
void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale)
|
||||
{
|
||||
int gcd;
|
||||
int audio_frame_size;
|
||||
|
||||
/* We use the known constant frame size for the codec if known, otherwise
|
||||
fallback to using AVCodecContext.frame_size, which is not as reliable
|
||||
for indicating packet duration */
|
||||
audio_frame_size = av_get_audio_frame_duration(stream, 0);
|
||||
if (!audio_frame_size)
|
||||
audio_frame_size = stream->frame_size;
|
||||
|
||||
*au_ssize= stream->block_align;
|
||||
if (audio_frame_size && stream->sample_rate) {
|
||||
*au_scale = audio_frame_size;
|
||||
*au_rate= stream->sample_rate;
|
||||
}else if(stream->codec_type == AVMEDIA_TYPE_VIDEO ||
|
||||
stream->codec_type == AVMEDIA_TYPE_DATA ||
|
||||
stream->codec_type == AVMEDIA_TYPE_SUBTITLE){
|
||||
*au_scale= stream->time_base.num;
|
||||
*au_rate = stream->time_base.den;
|
||||
}else{
|
||||
*au_scale= stream->block_align ? stream->block_align*8 : 8;
|
||||
*au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate;
|
||||
}
|
||||
gcd= av_gcd(*au_scale, *au_rate);
|
||||
*au_scale /= gcd;
|
||||
*au_rate /= gcd;
|
||||
}
|
||||
|
||||
int ff_read_riff_info(AVFormatContext *s, int64_t size)
|
||||
{
|
||||
@ -708,51 +755,4 @@ int ff_read_riff_info(AVFormatContext *s, int64_t size)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int riff_has_valid_tags(AVFormatContext *s)
|
||||
{
|
||||
int i;
|
||||
AVDictionaryEntry *t = 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)))
|
||||
return 1;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
ff_metadata_conv(&s->metadata, ff_riff_info_conv, NULL);
|
||||
|
||||
/* writing empty LIST is not nice and may cause problems */
|
||||
if (!riff_has_valid_tags(s))
|
||||
return;
|
||||
|
||||
list_pos = ff_start_tag(pb, "LIST");
|
||||
ffio_wfourcc(pb, "INFO");
|
||||
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);
|
||||
}
|
||||
#endif // CONFIG_DEMUXERS
|
||||
|
Loading…
Reference in New Issue
Block a user