From 51c3861e1663a1e4e9ea465176e68d82e98cc6e9 Mon Sep 17 00:00:00 2001 From: Peter Ross Date: Mon, 4 Aug 2008 07:35:07 +0000 Subject: [PATCH] Add D-Cinema audio muxer Originally committed as revision 14531 to svn://svn.ffmpeg.org/ffmpeg/trunk --- Changelog | 1 + libavformat/Makefile | 1 + libavformat/allformats.c | 2 +- libavformat/daud.c | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Changelog b/Changelog index 0adba1f495..fb422e1795 100644 --- a/Changelog +++ b/Changelog @@ -127,6 +127,7 @@ version - Motion Pixels Video decoder - Motion Pixels MVI demuxer - removed animated GIF decoder/demuxer +- D-Cinema audio muxer version 0.4.9-pre1: diff --git a/libavformat/Makefile b/libavformat/Makefile index 2d681a707f..8c62a36665 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -33,6 +33,7 @@ OBJS-$(CONFIG_BFI_DEMUXER) += bfi.o OBJS-$(CONFIG_C93_DEMUXER) += c93.o vocdec.o voc.o OBJS-$(CONFIG_CRC_MUXER) += crcenc.o OBJS-$(CONFIG_DAUD_DEMUXER) += daud.o +OBJS-$(CONFIG_DAUD_MUXER) += daud.o OBJS-$(CONFIG_DIRAC_DEMUXER) += raw.o OBJS-$(CONFIG_DIRAC_MUXER) += raw.o OBJS-$(CONFIG_DSICIN_DEMUXER) += dsicin.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 6441ca996c..eab3a924f7 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -68,7 +68,7 @@ void av_register_all(void) REGISTER_DEMUXER (BFI, bfi); REGISTER_DEMUXER (C93, c93); REGISTER_MUXER (CRC, crc); - REGISTER_DEMUXER (DAUD, daud); + REGISTER_MUXDEMUX (DAUD, daud); REGISTER_MUXDEMUX (DIRAC, dirac); REGISTER_DEMUXER (DSICIN, dsicin); REGISTER_MUXDEMUX (DTS, dts); diff --git a/libavformat/daud.c b/libavformat/daud.c index 5f04e7aaee..c0626dfb24 100644 --- a/libavformat/daud.c +++ b/libavformat/daud.c @@ -47,6 +47,24 @@ static int daud_packet(AVFormatContext *s, AVPacket *pkt) { return ret; } +static int daud_write_header(struct AVFormatContext *s) +{ + AVCodecContext *codec = s->streams[0]->codec; + if (codec->channels!=6 || codec->sample_rate!=96000) + return -1; + return 0; +} + +static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt) +{ + put_be16(s->pb, pkt->size); + put_be16(s->pb, 0x8010); // unknown + put_buffer(s->pb, pkt->data, pkt->size); + put_flush_packet(s->pb); + return 0; +} + +#if CONFIG_DAUD_DEMUXER AVInputFormat daud_demuxer = { "daud", NULL_IF_CONFIG_SMALL("D-Cinema audio format"), @@ -58,3 +76,20 @@ AVInputFormat daud_demuxer = { NULL, .extensions = "302", }; +#endif + +#ifdef CONFIG_DAUD_MUXER +AVOutputFormat daud_muxer = +{ + "daud", + NULL_IF_CONFIG_SMALL("D-Cinema audio format"), + NULL, + "302", + 0, + CODEC_ID_PCM_S24DAUD, + CODEC_ID_NONE, + daud_write_header, + daud_write_packet, + .flags= AVFMT_NOTIMESTAMPS, +}; +#endif