diff --git a/src/libFLAC++/metadata.cpp b/src/libFLAC++/metadata.cpp index dd8b0a02..cc3b4171 100644 --- a/src/libFLAC++/metadata.cpp +++ b/src/libFLAC++/metadata.cpp @@ -52,7 +52,7 @@ namespace FLAC { ret = new CueSheet(object, /*copy=*/false); break; default: - FLAC__ASSERT(0); + ret = new Unknown(object, /*copy=*/false); break; } return ret; @@ -70,6 +70,7 @@ namespace FLAC { const SeekTable *seektable = dynamic_cast(object); const VorbisComment *vorbiscomment = dynamic_cast(object); const CueSheet *cuesheet = dynamic_cast(object); + const Unknown *unknown = dynamic_cast(object); if(0 != streaminfo) return new StreamInfo(*streaminfo); @@ -83,6 +84,8 @@ namespace FLAC { return new VorbisComment(*vorbiscomment); else if(0 != cuesheet) return new CueSheet(*cuesheet); + else if(0 != unknown) + return new Unknown(*unknown); else { FLAC__ASSERT(0); return 0; @@ -925,6 +928,36 @@ namespace FLAC { } + // + // Unknown + // + + Unknown::Unknown(): + Prototype(FLAC__metadata_object_new(FLAC__METADATA_TYPE_APPLICATION), /*copy=*/false) + { } + + Unknown::~Unknown() + { } + + const FLAC__byte *Unknown::get_data() const + { + FLAC__ASSERT(is_valid()); + return object_->data.application.data; + } + + bool Unknown::set_data(const FLAC__byte *data, unsigned length) + { + FLAC__ASSERT(is_valid()); + return (bool)::FLAC__metadata_object_application_set_data(object_, (FLAC__byte*)data, length, true); + } + + bool Unknown::set_data(FLAC__byte *data, unsigned length, bool copy) + { + FLAC__ASSERT(is_valid()); + return (bool)::FLAC__metadata_object_application_set_data(object_, data, length, copy); + } + + // ============================================================ // // Level 0