From 7a5d095f42b836d4c330a78c9fcf8ae17f005555 Mon Sep 17 00:00:00 2001 From: Josh Coalson Date: Sat, 4 May 2002 17:41:35 +0000 Subject: [PATCH] add vorbis comment block handling, update max sample rate checking, speed up application block writing --- src/libFLAC/stream_encoder_framing.c | 37 +++++++++++++++------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/libFLAC/stream_encoder_framing.c b/src/libFLAC/stream_encoder_framing.c index 8e03e82b..c884d8a4 100644 --- a/src/libFLAC/stream_encoder_framing.c +++ b/src/libFLAC/stream_encoder_framing.c @@ -58,8 +58,7 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetaData *metadata, FLAC__ FLAC__ASSERT(metadata->data.stream_info.max_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN)); if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.max_framesize, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN)) return false; - FLAC__ASSERT(metadata->data.stream_info.sample_rate > 0); - FLAC__ASSERT(metadata->data.stream_info.sample_rate < (1u << FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN)); + FLAC__ASSERT(FLAC__format_is_valid_sample_rate(metadata->data.stream_info.sample_rate)); if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.sample_rate, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN)) return false; FLAC__ASSERT(metadata->data.stream_info.channels > 0); @@ -72,28 +71,18 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetaData *metadata, FLAC__ return false; if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN)) return false; - for(i = 0; i < 16; i++) { - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.md5sum[i], 8)) - return false; - } + if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.stream_info.md5sum, 16)) + return false; break; case FLAC__METADATA_TYPE_PADDING: if(!FLAC__bitbuffer_write_zeroes(bb, metadata->length * 8)) return false; break; case FLAC__METADATA_TYPE_APPLICATION: - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.application.id[0], 8)) + if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)) return false; - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.application.id[1], 8)) + if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.application.data, metadata->length - (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8))) return false; - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.application.id[2], 8)) - return false; - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.application.id[3], 8)) - return false; - for(i = 0; i < metadata->length; i++) { - if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.application.data[i], 8)) - return false; - } break; case FLAC__METADATA_TYPE_SEEKTABLE: for(i = 0; i < metadata->data.seek_table.num_points; i++) { @@ -105,6 +94,20 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetaData *metadata, FLAC__ return false; } break; + case FLAC__METADATA_TYPE_VORBIS_COMMENT: + if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.vendor_string.length)) + return false; + if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.vorbis_comment.vendor_string.entry, metadata->data.vorbis_comment.vendor_string.length)) + return false; + if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.num_comments)) + return false; + for(i = 0; i < metadata->data.vorbis_comment.num_comments; i++) { + if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.comments[i].length)) + return false; + if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.vorbis_comment.comments[i].entry, metadata->data.vorbis_comment.comments[i].length)) + return false; + } + break; default: FLAC__ASSERT(0); } @@ -154,7 +157,7 @@ FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__bool st if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN)) return false; - FLAC__ASSERT(header->sample_rate > 0 && header->sample_rate < (1u << FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN)); + FLAC__ASSERT(FLAC__format_is_valid_sample_rate(header->sample_rate)); sample_rate_hint = 0; switch(header->sample_rate) { case 8000: u = 4; break;