| OLD | NEW |
| 1 /* | 1 /* |
| 2 * raw FLAC muxer | 2 * raw FLAC muxer |
| 3 * Copyright (c) 2006-2009 Justin Ruggles | 3 * Copyright (c) 2006-2009 Justin Ruggles |
| 4 * | 4 * |
| 5 * This file is part of FFmpeg. | 5 * This file is part of FFmpeg. |
| 6 * | 6 * |
| 7 * FFmpeg is free software; you can redistribute it and/or | 7 * FFmpeg is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2.1 of the License, or (at your option) any later version. | 10 * version 2.1 of the License, or (at your option) any later version. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 { | 32 { |
| 33 put_byte(pb, last_block ? 0x81 : 0x01); | 33 put_byte(pb, last_block ? 0x81 : 0x01); |
| 34 put_be24(pb, n_padding_bytes); | 34 put_be24(pb, n_padding_bytes); |
| 35 while (n_padding_bytes > 0) { | 35 while (n_padding_bytes > 0) { |
| 36 put_byte(pb, 0); | 36 put_byte(pb, 0); |
| 37 n_padding_bytes--; | 37 n_padding_bytes--; |
| 38 } | 38 } |
| 39 return 0; | 39 return 0; |
| 40 } | 40 } |
| 41 | 41 |
| 42 static int flac_write_block_comment(ByteIOContext *pb, AVMetadata *m, | 42 static int flac_write_block_comment(ByteIOContext *pb, AVMetadata **m, |
| 43 int last_block, int bitexact) | 43 int last_block, int bitexact) |
| 44 { | 44 { |
| 45 const char *vendor = bitexact ? "ffmpeg" : LIBAVFORMAT_IDENT; | 45 const char *vendor = bitexact ? "ffmpeg" : LIBAVFORMAT_IDENT; |
| 46 unsigned int len, count; | 46 unsigned int len, count; |
| 47 uint8_t *p, *p0; | 47 uint8_t *p, *p0; |
| 48 | 48 |
| 49 len = ff_vorbiscomment_length(m, vendor, &count); | 49 len = ff_vorbiscomment_length(*m, vendor, &count); |
| 50 p0 = av_malloc(len+4); | 50 p0 = av_malloc(len+4); |
| 51 if (!p0) | 51 if (!p0) |
| 52 return AVERROR(ENOMEM); | 52 return AVERROR(ENOMEM); |
| 53 p = p0; | 53 p = p0; |
| 54 | 54 |
| 55 bytestream_put_byte(&p, last_block ? 0x84 : 0x04); | 55 bytestream_put_byte(&p, last_block ? 0x84 : 0x04); |
| 56 bytestream_put_be24(&p, len); | 56 bytestream_put_be24(&p, len); |
| 57 ff_vorbiscomment_write(&p, m, vendor, count); | 57 ff_vorbiscomment_write(&p, m, vendor, count); |
| 58 | 58 |
| 59 put_buffer(pb, p0, len+4); | 59 put_buffer(pb, p0, len+4); |
| 60 av_freep(&p0); | 60 av_freep(&p0); |
| 61 p = NULL; | 61 p = NULL; |
| 62 | 62 |
| 63 return 0; | 63 return 0; |
| 64 } | 64 } |
| 65 | 65 |
| 66 static int flac_write_header(struct AVFormatContext *s) | 66 static int flac_write_header(struct AVFormatContext *s) |
| 67 { | 67 { |
| 68 int ret; | 68 int ret; |
| 69 AVCodecContext *codec = s->streams[0]->codec; | 69 AVCodecContext *codec = s->streams[0]->codec; |
| 70 | 70 |
| 71 ret = ff_flac_write_header(s->pb, codec, 0); | 71 ret = ff_flac_write_header(s->pb, codec, 0); |
| 72 if (ret) | 72 if (ret) |
| 73 return ret; | 73 return ret; |
| 74 | 74 |
| 75 ret = flac_write_block_comment(s->pb, s->metadata, 0, | 75 ret = flac_write_block_comment(s->pb, &s->metadata, 0, |
| 76 codec->flags & CODEC_FLAG_BITEXACT); | 76 codec->flags & CODEC_FLAG_BITEXACT); |
| 77 if (ret) | 77 if (ret) |
| 78 return ret; | 78 return ret; |
| 79 | 79 |
| 80 /* The command line flac encoder defaults to placing a seekpoint | 80 /* The command line flac encoder defaults to placing a seekpoint |
| 81 * every 10s. So one might add padding to allow that later | 81 * every 10s. So one might add padding to allow that later |
| 82 * but there seems to be no simple way to get the duration here. | 82 * but there seems to be no simple way to get the duration here. |
| 83 * So let's try the flac default of 8192 bytes */ | 83 * So let's try the flac default of 8192 bytes */ |
| 84 flac_write_block_padding(s->pb, 8192, 1); | 84 flac_write_block_padding(s->pb, 8192, 1); |
| 85 | 85 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 NULL_IF_CONFIG_SMALL("raw FLAC"), | 121 NULL_IF_CONFIG_SMALL("raw FLAC"), |
| 122 "audio/x-flac", | 122 "audio/x-flac", |
| 123 "flac", | 123 "flac", |
| 124 0, | 124 0, |
| 125 CODEC_ID_FLAC, | 125 CODEC_ID_FLAC, |
| 126 CODEC_ID_NONE, | 126 CODEC_ID_NONE, |
| 127 flac_write_header, | 127 flac_write_header, |
| 128 flac_write_packet, | 128 flac_write_packet, |
| 129 flac_write_trailer, | 129 flac_write_trailer, |
| 130 .flags= AVFMT_NOTIMESTAMPS, | 130 .flags= AVFMT_NOTIMESTAMPS, |
| 131 .metadata_conv = ff_vorbiscomment_metadata_conv, | |
| 132 }; | 131 }; |
| OLD | NEW |