From ce1d2a95c3d73663aecc6e5f51533d2bcf1fb1ae Mon Sep 17 00:00:00 2001
From: Justin Ruggles <jruggle@earthlink.net>
Date: Fri, 12 May 2006 15:13:51 +0000
Subject: [PATCH] Raw flac muxer, patch by Justin Ruggles (jruggle earthlink
 net). Can be used with "-acodec copy" to either copy a flac file verbatim or
 extract the raw flac from an ogg-flac file.

Originally committed as revision 5368 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/raw.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/libavformat/raw.c b/libavformat/raw.c
index 057e060341f..aaca88103d6 100644
--- a/libavformat/raw.c
+++ b/libavformat/raw.c
@@ -26,6 +26,20 @@ static int raw_write_header(struct AVFormatContext *s)
     return 0;
 }
 
+static int flac_write_header(struct AVFormatContext *s)
+{
+    static const uint8_t header[8] = {
+        0x66, 0x4C, 0x61, 0x43, 0x80, 0x00, 0x00, 0x22
+    };
+    uint8_t *streaminfo = s->streams[0]->codec->extradata;
+    int len = s->streams[0]->codec->extradata_size;
+    if(streaminfo != NULL && len > 0) {
+        put_buffer(&s->pb, header, 8);
+        put_buffer(&s->pb, streaminfo, len);
+    }
+    return 0;
+}
+
 static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
 {
     put_buffer(&s->pb, pkt->data, pkt->size);
@@ -397,6 +411,21 @@ AVInputFormat flac_iformat = {
     .extensions = "flac",
 };
 
+#ifdef CONFIG_MUXERS
+AVOutputFormat flac_oformat = {
+    "flac",
+    "raw flac",
+    "audio/x-flac",
+    "flac",
+    0,
+    CODEC_ID_FLAC,
+    0,
+    flac_write_header,
+    raw_write_packet,
+    raw_write_trailer,
+};
+#endif //CONFIG_MUXERS
+
 AVInputFormat ac3_iformat = {
     "ac3",
     "raw ac3",
@@ -792,6 +821,7 @@ int raw_init(void)
 
     av_register_input_format(&shorten_iformat);
     av_register_input_format(&flac_iformat);
+    av_register_output_format(&flac_oformat);
 
     av_register_input_format(&ac3_iformat);
     av_register_output_format(&ac3_oformat);
-- 
GitLab