diff --git a/libavformat/raw.c b/libavformat/raw.c index 057e060341f74dbd9e4aa167d9ce75b6912d02ac..aaca88103d63cfd2d9bab201d3a8dd939da1ffb2 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);