Fix ff_mov_write_chan() so it can be used by other muxers.

This commit is contained in:
Carl Eugen Hoyos 2011-05-17 01:47:12 +02:00
parent d2549ba9df
commit 6d721f714e
3 changed files with 7 additions and 12 deletions

View File

@ -134,7 +134,11 @@ static int caf_write_header(AVFormatContext *s)
avio_wb32(pb, enc->channels); //< mChannelsPerFrame
avio_wb32(pb, enc->bits_per_coded_sample); //< mBitsPerChannel
ff_mov_write_chan(s, enc->channel_layout, "chan");
if (enc->channel_layout) {
ffio_wfourcc(pb, "chan");
avio_wb64(pb, 12);
ff_mov_write_chan(pb, enc->channel_layout);
}
ffio_wfourcc(pb, "data"); //< Audio Data chunk
caf->data = avio_tell(pb);

View File

@ -27,7 +27,6 @@
#include "internal.h"
#include "isom.h"
#include "riff.h"
#include "avio_internal.h"
#include "libavcodec/mpeg4audio.h"
#include "libavcodec/mpegaudiodata.h"
@ -484,24 +483,17 @@ void ff_mov_read_chan(AVFormatContext *s, int64_t size, AVCodecContext *codec)
avio_skip(pb, 8);
}
void ff_mov_write_chan(AVFormatContext *s, int64_t channel_layout,
const char *chunk_type)
void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout)
{
AVIOContext *pb = s->pb;
const MovChannelLayout *layouts;
uint32_t layout_tag = 0;
if (!channel_layout)
return;
for (layouts = mov_channel_layout; layouts->channel_layout; layouts++)
if (channel_layout == layouts->channel_layout) {
layout_tag = layouts->layout_tag;
break;
}
ffio_wfourcc(pb, chunk_type);
avio_wb64(pb, 12); //< mChunkSize
if (layout_tag) {
avio_wb32(pb, layout_tag); //< mChannelLayoutTag
avio_wb32(pb, 0); //< mChannelBitmap

View File

@ -157,7 +157,6 @@ enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags);
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
void ff_mov_read_chan(AVFormatContext *s, int64_t size, AVCodecContext *codec);
void ff_mov_write_chan(AVFormatContext *s, int64_t channel_layout,
const char *chunk_type);
void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout);
#endif /* AVFORMAT_ISOM_H */