# HG changeset patch # User rbultje # Date 1275070885 0 # Node ID 441608273a5c99405863b3b4dd5379fa4ca2ca0a # Parent 87e28edf7a98e08234d9a77fc0ac00d6171e7a1c 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 . diff -r 87e28edf7a98 -r 441608273a5c rmenc.c --- a/rmenc.c Fri May 28 18:18:33 2010 +0000 +++ b/rmenc.c Fri May 28 18:21:25 2010 +0000 @@ -60,7 +60,7 @@ } } -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 @@ 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 @@ 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 @@ } } - 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 @@ 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 @@ rm_write_header, rm_write_packet, rm_write_trailer, + .codec_tag= (const AVCodecTag* const []){ff_rm_codec_tags, 0}, };