From cff87f0404faf80093131d3c59e424699cc52c0d Mon Sep 17 00:00:00 2001 From: Francesco Lavra Date: Fri, 28 May 2010 18:21:25 +0000 Subject: Use ff_rm_codec_tags[] in RM muxer. This, incidentally, also allows muxing other audio codecs rather than only AC-3, so add some code that makes word byte-swapping only happen for AC-3, not for all audio codecs. Patch by Francesco Lavra . Originally committed as revision 23361 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rmenc.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'libavformat') diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c index 03db3ce5b8..9636d1e043 100644 --- a/libavformat/rmenc.c +++ b/libavformat/rmenc.c @@ -60,7 +60,7 @@ static void put_str8(ByteIOContext *s, const char *tag) } } -static void rv10_write_header(AVFormatContext *ctx, +static int rv10_write_header(AVFormatContext *ctx, int data_size, int index_pos) { RMMuxContext *rm = ctx->priv_data; @@ -225,7 +225,13 @@ static void rv10_write_header(AVFormatContext *ctx, put_be32(s, 0x10); /* unknown */ put_be16(s, stream->enc->channels); put_str8(s, "Int0"); /* codec name */ - put_str8(s, "dnet"); /* codec name */ + if (stream->enc->codec_tag) { + put_byte(s, 4); /* tag length */ + put_le32(s, stream->enc->codec_tag); + } else { + av_log(ctx, AV_LOG_ERROR, "Invalid codec tag\n"); + return -1; + } put_be16(s, 0); /* title length */ put_be16(s, 0); /* author length */ put_be16(s, 0); /* copyright length */ @@ -270,6 +276,7 @@ static void rv10_write_header(AVFormatContext *ctx, put_be32(s, nb_packets); /* number of packets */ put_be32(s,0); /* next data header */ + return 0; } static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream, @@ -330,7 +337,8 @@ static int rm_write_header(AVFormatContext *s) } } - rv10_write_header(s, 0, 0); + if (rv10_write_header(s, 0, 0)) + return AVERROR_INVALIDDATA; put_flush_packet(s->pb); return 0; } @@ -348,12 +356,16 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int write_packet_header(s, stream, size, !!(flags & AV_PKT_FLAG_KEY)); + if (stream->enc->codec_id == CODEC_ID_AC3) { /* for AC-3, the words seem to be reversed */ for(i=0;inb_frames++; av_free(buf1); @@ -456,4 +468,5 @@ AVOutputFormat rm_muxer = { rm_write_header, rm_write_packet, rm_write_trailer, + .codec_tag= (const AVCodecTag* const []){ff_rm_codec_tags, 0}, }; -- cgit v1.2.3