<li>
General:
<ul>
+ <li>Improved compression with no impact on format or decoding speed.</li>
<li>Encoding and decoding speedups across the board. Encoding at -8 is twice as fast.</li>
</ul>
</li>
<li>
flac:
<ul>
+ <li>Improved compression with no impact on format or decoding speed.</li>
<li>Encoding and decoding speedups across the board. Encoding at -8 is twice as fast.</li>
<li>Fixed a bug that caused suboptimal default compression settings in some locales (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1608883&group_id=13478&atid=113478">SF #1608883</a>).</li>
<li>Fixed a bug where FLAC-to-FLAC transcoding of a corrupted FLAC file would truncate the transcoded file at the first error (<a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1615019&group_id=13478&atid=113478">SF #1615019</a>).</li>
<li>Fixed a bug where using <span class="argument"><a href="documentation_tools_flac.html#flac_options_decode_through_errors">-F</a></span> with FLAC-to-FLAC transcoding of a corrupted FLAC would have no effect (<a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1615391&group_id=13478&atid=113478">SF #1615391</a>).</li>
+ <li>Fixed a bug where for new PICTURE metadata blocks specified with <span class="argument"><a href="documentation_tools_flac.html#flac_options_picture">-@@@@@@-picture</a></span> would not be transferred during FLAC-to-FLAC transcoding (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1627993&group_id=13478&atid=113478">SF #1627993</a>).</li>
</ul>
</li>
<li>
<li>
libraries:
<ul>
- <li>Completely rewritten bitbuffer which uses native machine word size instead of bytes for dramatic speed improvements.</li>
- <li>Much faster rice partition size estimation which greatly speeds encoding in higher modes.</li>
+ <li>Completely rewritten bitbuffer which uses native machine word size instead of bytes for dramatic speed improvements. The speedup should be most dramatic on CPUs with slower byte manipulation capability.</li>
+ <li>Much faster Rice partition size estimation which greatly speeds encoding in higher modes.</li>
<li>Fixed a bug with default apodization settings that were erroneous in some locales (<a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1608883&group_id=13478&atid=113478">SF #1608883</a>).</li>
</ul>
</li>
if(flac_decoder_data) {
/*
* we're encoding from FLAC so we will use the FLAC file's
- * metadata as the basic for the encoded file
+ * metadata as the basis for the encoded file
*/
{
/*
- * first handle padding: if --no-padding was specified,
- * then delete all padding; else if -P was specified,
- * use that instead of existing padding (if any); else
- * if existing file has padding, move all existing
- * padding blocks to one padding block at the end; else
- * use default padding.
+ * first handle pictures: simple append any --pictures
+ * specified.
*/
- int p = -1;
- size_t i, j;
- for(i = 0, j = 0; i < flac_decoder_data->num_metadata_blocks; i++) {
- if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_PADDING) {
- if(p < 0)
- p = 0;
- p += flac_decoder_data->metadata_blocks[i]->length;
- FLAC__metadata_object_delete(flac_decoder_data->metadata_blocks[i]);
- flac_decoder_data->metadata_blocks[i] = 0;
- }
- else
- flac_decoder_data->metadata_blocks[j++] = flac_decoder_data->metadata_blocks[i];
- }
- flac_decoder_data->num_metadata_blocks = j;
- if(options.padding > 0)
- p = options.padding;
- if(p < 0)
- p = e->total_samples_to_encode / e->sample_rate < 20*60? FLAC_ENCODE__DEFAULT_PADDING : FLAC_ENCODE__DEFAULT_PADDING*8;
- if(options.padding != 0) {
- if(p > 0 && flac_decoder_data->num_metadata_blocks < sizeof(flac_decoder_data->metadata_blocks)/sizeof(flac_decoder_data->metadata_blocks[0])) {
- flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
- if(0 == flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]) {
- flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for PADDING block\n", e->inbasefilename);
- if(0 != cuesheet)
- FLAC__metadata_object_delete(cuesheet);
- return false;
- }
- flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]->is_last = false; /* the encoder will set this for us */
- flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]->length = p;
- flac_decoder_data->num_metadata_blocks++;
+ for(i = 0; i < options.num_pictures; i++) {
+ FLAC__StreamMetadata *pic = FLAC__metadata_object_clone(options.pictures[i]);
+ if(0 == pic) {
+ flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for PICTURE block\n", e->inbasefilename);
+ if(0 != cuesheet)
+ FLAC__metadata_object_delete(cuesheet);
+ return false;
}
+ flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks++] = pic;
}
}
{
* we keep the existing one. also need to make sure to
* propagate any channel mask tag.
*/
+ /* @@@@@@ change to append in -T values from options.vorbis_comment if input has VC already */
size_t i, j;
FLAC__bool vc_found = false;
for(i = 0, j = 0; i < flac_decoder_data->num_metadata_blocks; i++) {
}
{
/*
- * finally handle seektable: if -S- was specified, no
+ * next handle seektable: if -S- was specified, no
* SEEKTABLE; else if -S was specified, use it/them;
* else if file has existing SEEKTABLE and input size is
* preserved (no --skip/--until/etc specified), keep it;
flac_decoder_data->num_metadata_blocks++;
}
}
+ {
+ /*
+ * finally handle padding: if --no-padding was specified,
+ * then delete all padding; else if -P was specified,
+ * use that instead of existing padding (if any); else
+ * if existing file has padding, move all existing
+ * padding blocks to one padding block at the end; else
+ * use default padding.
+ */
+ int p = -1;
+ size_t i, j;
+ for(i = 0, j = 0; i < flac_decoder_data->num_metadata_blocks; i++) {
+ if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_PADDING) {
+ if(p < 0)
+ p = 0;
+ p += flac_decoder_data->metadata_blocks[i]->length;
+ FLAC__metadata_object_delete(flac_decoder_data->metadata_blocks[i]);
+ flac_decoder_data->metadata_blocks[i] = 0;
+ }
+ else
+ flac_decoder_data->metadata_blocks[j++] = flac_decoder_data->metadata_blocks[i];
+ }
+ flac_decoder_data->num_metadata_blocks = j;
+ if(options.padding > 0)
+ p = options.padding;
+ if(p < 0)
+ p = e->total_samples_to_encode / e->sample_rate < 20*60? FLAC_ENCODE__DEFAULT_PADDING : FLAC_ENCODE__DEFAULT_PADDING*8;
+ if(options.padding != 0) {
+ if(p > 0 && flac_decoder_data->num_metadata_blocks < sizeof(flac_decoder_data->metadata_blocks)/sizeof(flac_decoder_data->metadata_blocks[0])) {
+ flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
+ if(0 == flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]) {
+ flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for PADDING block\n", e->inbasefilename);
+ if(0 != cuesheet)
+ FLAC__metadata_object_delete(cuesheet);
+ return false;
+ }
+ flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]->is_last = false; /* the encoder will set this for us */
+ flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]->length = p;
+ flac_decoder_data->num_metadata_blocks++;
+ }
+ }
+ }
metadata = &flac_decoder_data->metadata_blocks[1]; /* don't include STREAMINFO */
num_metadata = flac_decoder_data->num_metadata_blocks - 1;
}