Mercurial > libavformat.hg
changeset 6065:441608273a5c libavformat
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 <francescolavra interfree it>.
author | rbultje |
---|---|
date | Fri, 28 May 2010 18:21:25 +0000 |
parents | 87e28edf7a98 |
children | 490c440a53e7 |
files | rmenc.c |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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;i<size;i+=2) { buf1[i] = buf[i+1]; buf1[i+1] = buf[i]; } put_buffer(pb, buf1, size); + } else { + put_buffer(pb, buf, size); + } put_flush_packet(pb); stream->nb_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}, };