diff --git a/include/FLAC++/encoder.h b/include/FLAC++/encoder.h index e7476d07..bcecd390 100644 --- a/include/FLAC++/encoder.h +++ b/include/FLAC++/encoder.h @@ -38,6 +38,7 @@ #include "FLAC/seekable_stream_encoder.h" #include "FLAC/stream_encoder.h" #include "decoder.h" +#include "metadata.h" /** \file include/FLAC++/encoder.h @@ -125,6 +126,7 @@ namespace FLAC { bool set_rice_parameter_search_dist(unsigned value); bool set_total_samples_estimate(FLAC__uint64 value); bool set_metadata(::FLAC__StreamMetadata **metadata, unsigned num_blocks); + bool set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks); State get_state() const; Decoder::Stream::State get_verify_decoder_state() const; @@ -222,6 +224,7 @@ namespace FLAC { bool set_rice_parameter_search_dist(unsigned value); bool set_total_samples_estimate(FLAC__uint64 value); bool set_metadata(::FLAC__StreamMetadata **metadata, unsigned num_blocks); + bool set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks); State get_state() const; Stream::State get_stream_encoder_state() const; @@ -322,6 +325,7 @@ namespace FLAC { bool set_rice_parameter_search_dist(unsigned value); bool set_total_samples_estimate(FLAC__uint64 value); bool set_metadata(::FLAC__StreamMetadata **metadata, unsigned num_blocks); + bool set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks); bool set_filename(const char *value); State get_state() const; diff --git a/src/libFLAC++/file_encoder.cpp b/src/libFLAC++/file_encoder.cpp index c8101723..875fc6c4 100644 --- a/src/libFLAC++/file_encoder.cpp +++ b/src/libFLAC++/file_encoder.cpp @@ -165,6 +165,17 @@ namespace FLAC { return (bool)::FLAC__file_encoder_set_metadata(encoder_, metadata, num_blocks); } + bool File::set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks) + { + FLAC__ASSERT(is_valid()); + ::FLAC__StreamMetadata *m[num_blocks]; + for(unsigned i = 0; i < num_blocks; i++) { + // we can get away with this since we know the encoder will only correct the is_last flags + m[i] = const_cast< ::FLAC__StreamMetadata*>((::FLAC__StreamMetadata*)metadata[i]); + } + return (bool)::FLAC__file_encoder_set_metadata(encoder_, m, num_blocks); + } + bool File::set_filename(const char *value) { FLAC__ASSERT(is_valid()); diff --git a/src/libFLAC++/seekable_stream_encoder.cpp b/src/libFLAC++/seekable_stream_encoder.cpp index 1d1e42bb..9e8f58ec 100644 --- a/src/libFLAC++/seekable_stream_encoder.cpp +++ b/src/libFLAC++/seekable_stream_encoder.cpp @@ -165,6 +165,17 @@ namespace FLAC { return (bool)::FLAC__seekable_stream_encoder_set_metadata(encoder_, metadata, num_blocks); } + bool SeekableStream::set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks) + { + FLAC__ASSERT(is_valid()); + ::FLAC__StreamMetadata *m[num_blocks]; + for(unsigned i = 0; i < num_blocks; i++) { + // we can get away with this since we know the encoder will only correct the is_last flags + m[i] = const_cast< ::FLAC__StreamMetadata*>((::FLAC__StreamMetadata*)metadata[i]); + } + return (bool)::FLAC__seekable_stream_encoder_set_metadata(encoder_, m, num_blocks); + } + SeekableStream::State SeekableStream::get_state() const { FLAC__ASSERT(is_valid()); diff --git a/src/libFLAC++/stream_encoder.cpp b/src/libFLAC++/stream_encoder.cpp index 6e6ca647..5aaa43e1 100644 --- a/src/libFLAC++/stream_encoder.cpp +++ b/src/libFLAC++/stream_encoder.cpp @@ -30,6 +30,7 @@ */ #include "FLAC++/encoder.h" +#include "FLAC++/metadata.h" #include "FLAC/assert.h" #ifdef _MSC_VER @@ -165,6 +166,17 @@ namespace FLAC { return (bool)::FLAC__stream_encoder_set_metadata(encoder_, metadata, num_blocks); } + bool Stream::set_metadata(FLAC::Metadata::Prototype **metadata, unsigned num_blocks) + { + FLAC__ASSERT(is_valid()); + ::FLAC__StreamMetadata *m[num_blocks]; + for(unsigned i = 0; i < num_blocks; i++) { + // we can get away with this since we know the encoder will only correct the is_last flags + m[i] = const_cast< ::FLAC__StreamMetadata*>((::FLAC__StreamMetadata*)metadata[i]); + } + return (bool)::FLAC__stream_encoder_set_metadata(encoder_, m, num_blocks); + } + Stream::State Stream::get_state() const { FLAC__ASSERT(is_valid());