summaryrefslogtreecommitdiff
path: root/src/libFLAC/stream_encoder_framing.c
diff options
context:
space:
mode:
authorJosh Coalson <jcoalson@users.sourceforce.net>2002-08-25 05:27:15 +0000
committerJosh Coalson <jcoalson@users.sourceforce.net>2002-08-25 05:27:15 +0000
commitcb9d93ad4dd46a4b54bb1690cf12641463d6f53b (patch)
tree080af0202c20e8768d94bf433f62145de33f241c /src/libFLAC/stream_encoder_framing.c
parentfedb0ae8370f985fb09c0dc59f99f1b606322b5c (diff)
downloadflac-cb9d93ad4dd46a4b54bb1690cf12641463d6f53b.tar.gz
add vendor string to encoding
Diffstat (limited to 'src/libFLAC/stream_encoder_framing.c')
-rw-r--r--src/libFLAC/stream_encoder_framing.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libFLAC/stream_encoder_framing.c b/src/libFLAC/stream_encoder_framing.c
index 63b72a4b..95a701de 100644
--- a/src/libFLAC/stream_encoder_framing.c
+++ b/src/libFLAC/stream_encoder_framing.c
@@ -18,6 +18,7 @@
*/
#include <stdio.h>
+#include <string.h> /* for strlen() */
#include "private/stream_encoder_framing.h"
#include "private/crc.h"
#include "FLAC/assert.h"
@@ -33,6 +34,7 @@ static FLAC__bool add_residual_partitioned_rice_(FLAC__BitBuffer *bb, const FLAC
FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitBuffer *bb)
{
unsigned i;
+ const unsigned vendor_string_length = (unsigned)strlen(FLAC__VENDOR_STRING);
if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->is_last, FLAC__STREAM_METADATA_IS_LAST_LEN))
return false;
@@ -40,8 +42,16 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__
if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->type, FLAC__STREAM_METADATA_TYPE_LEN))
return false;
- FLAC__ASSERT(metadata->length < (1u << FLAC__STREAM_METADATA_LENGTH_LEN));
- if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->length, FLAC__STREAM_METADATA_LENGTH_LEN))
+ /*
+ * First, for VORBIS_COMMENTs, adjust the length to reflect our vendor string
+ */
+ i = metadata->length;
+ if(metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) {
+ i -= metadata->data.vorbis_comment.vendor_string.length;
+ i += vendor_string_length;
+ }
+ FLAC__ASSERT(i < (1u << FLAC__STREAM_METADATA_LENGTH_LEN));
+ if(!FLAC__bitbuffer_write_raw_uint32(bb, i, FLAC__STREAM_METADATA_LENGTH_LEN))
return false;
switch(metadata->type) {
@@ -95,9 +105,9 @@ FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__
}
break;
case FLAC__METADATA_TYPE_VORBIS_COMMENT:
- if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.vendor_string.length))
+ if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, 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))
+ if(!FLAC__bitbuffer_write_byte_block(bb, FLAC__VENDOR_STRING, vendor_string_length))
return false;
if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.num_comments))
return false;