📄 metadata.cpp
字号:
FLAC__uint64 CueSheet::get_lead_in() const { FLAC__ASSERT(is_valid()); return object_->data.cue_sheet.lead_in; } bool CueSheet::get_is_cd() const { FLAC__ASSERT(is_valid()); return object_->data.cue_sheet.is_cd? true : false; } unsigned CueSheet::get_num_tracks() const { FLAC__ASSERT(is_valid()); return object_->data.cue_sheet.num_tracks; } CueSheet::Track CueSheet::get_track(unsigned i) const { FLAC__ASSERT(is_valid()); FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks); return Track(object_->data.cue_sheet.tracks + i); } void CueSheet::set_media_catalog_number(const char value[128]) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(0 != value); memcpy(object_->data.cue_sheet.media_catalog_number, value, 128); object_->data.cue_sheet.media_catalog_number[128] = '\0'; } void CueSheet::set_lead_in(FLAC__uint64 value) { FLAC__ASSERT(is_valid()); object_->data.cue_sheet.lead_in = value; } void CueSheet::set_is_cd(bool value) { FLAC__ASSERT(is_valid()); object_->data.cue_sheet.is_cd = value; } void CueSheet::set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks); FLAC__ASSERT(index_num < object_->data.cue_sheet.tracks[track_num].num_indices); object_->data.cue_sheet.tracks[track_num].indices[index_num] = index; } bool CueSheet::insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks); FLAC__ASSERT(index_num <= object_->data.cue_sheet.tracks[track_num].num_indices); return (bool)::FLAC__metadata_object_cuesheet_track_insert_index(object_, track_num, index_num, index); } bool CueSheet::delete_index(unsigned track_num, unsigned index_num) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks); FLAC__ASSERT(index_num < object_->data.cue_sheet.tracks[track_num].num_indices); return (bool)::FLAC__metadata_object_cuesheet_track_delete_index(object_, track_num, index_num); } bool CueSheet::set_track(unsigned i, const CueSheet::Track &track) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks); // We can safely const_cast since copy=true return (bool)::FLAC__metadata_object_cuesheet_set_track(object_, i, const_cast< ::FLAC__StreamMetadata_CueSheet_Track*>(track.get_track()), /*copy=*/true); } bool CueSheet::insert_track(unsigned i, const CueSheet::Track &track) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(i <= object_->data.cue_sheet.num_tracks); // We can safely const_cast since copy=true return (bool)::FLAC__metadata_object_cuesheet_insert_track(object_, i, const_cast< ::FLAC__StreamMetadata_CueSheet_Track*>(track.get_track()), /*copy=*/true); } bool CueSheet::delete_track(unsigned i) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks); return (bool)::FLAC__metadata_object_cuesheet_delete_track(object_, i); } bool CueSheet::is_legal(bool check_cd_da_subset, const char **violation) const { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_object_cuesheet_is_legal(object_, check_cd_da_subset, violation); } // // 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 // // ============================================================ FLACPP_API bool get_streaminfo(const char *filename, StreamInfo &streaminfo) { FLAC__ASSERT(0 != filename); ::FLAC__StreamMetadata object; if(::FLAC__metadata_get_streaminfo(filename, &object)) { streaminfo = object; return true; } else return false; } FLACPP_API bool get_tags(const char *filename, VorbisComment *&tags) { FLAC__ASSERT(0 != filename); ::FLAC__StreamMetadata *object; tags = 0; if(::FLAC__metadata_get_tags(filename, &object)) { tags = new VorbisComment(object, /*copy=*/false); return true; } else return false; } FLACPP_API bool get_tags(const char *filename, VorbisComment &tags) { FLAC__ASSERT(0 != filename); ::FLAC__StreamMetadata *object; if(::FLAC__metadata_get_tags(filename, &object)) { tags.assign(object, /*copy=*/false); return true; } else return false; } // ============================================================ // // Level 1 // // ============================================================ SimpleIterator::SimpleIterator(): iterator_(::FLAC__metadata_simple_iterator_new()) { } SimpleIterator::~SimpleIterator() { clear(); } void SimpleIterator::clear() { if(0 != iterator_) FLAC__metadata_simple_iterator_delete(iterator_); iterator_ = 0; } bool SimpleIterator::init(const char *filename, bool read_only, bool preserve_file_stats) { FLAC__ASSERT(0 != filename); FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_init(iterator_, filename, read_only, preserve_file_stats); } bool SimpleIterator::is_valid() const { return 0 != iterator_; } SimpleIterator::Status SimpleIterator::status() { FLAC__ASSERT(is_valid()); return Status(::FLAC__metadata_simple_iterator_status(iterator_)); } bool SimpleIterator::is_writable() const { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_is_writable(iterator_); } bool SimpleIterator::next() { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_next(iterator_); } bool SimpleIterator::prev() { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_prev(iterator_); } ::FLAC__MetadataType SimpleIterator::get_block_type() const { FLAC__ASSERT(is_valid()); return ::FLAC__metadata_simple_iterator_get_block_type(iterator_); } Prototype *SimpleIterator::get_block() { FLAC__ASSERT(is_valid()); return local::construct_block(::FLAC__metadata_simple_iterator_get_block(iterator_)); } bool SimpleIterator::set_block(Prototype *block, bool use_padding) { FLAC__ASSERT(0 != block); FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_set_block(iterator_, block->object_, use_padding); } bool SimpleIterator::insert_block_after(Prototype *block, bool use_padding) { FLAC__ASSERT(0 != block); FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_insert_block_after(iterator_, block->object_, use_padding); } bool SimpleIterator::delete_block(bool use_padding) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_simple_iterator_delete_block(iterator_, use_padding); } // ============================================================ // // Level 2 // // ============================================================ Chain::Chain(): chain_(::FLAC__metadata_chain_new()) { } Chain::~Chain() { clear(); } void Chain::clear() { if(0 != chain_) FLAC__metadata_chain_delete(chain_); chain_ = 0; } bool Chain::is_valid() const { return 0 != chain_; } Chain::Status Chain::status() { FLAC__ASSERT(is_valid()); return Status(::FLAC__metadata_chain_status(chain_)); } bool Chain::read(const char *filename) { FLAC__ASSERT(0 != filename); FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_read(chain_, filename); } bool Chain::read(FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_read_with_callbacks(chain_, handle, callbacks); } bool Chain::check_if_tempfile_needed(bool use_padding) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_check_if_tempfile_needed(chain_, use_padding); } bool Chain::write(bool use_padding, bool preserve_file_stats) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_write(chain_, use_padding, preserve_file_stats); } bool Chain::write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_write_with_callbacks(chain_, use_padding, handle, callbacks); } bool Chain::write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks, ::FLAC__IOHandle temp_handle, ::FLAC__IOCallbacks temp_callbacks) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_chain_write_with_callbacks_and_tempfile(chain_, use_padding, handle, callbacks, temp_handle, temp_callbacks); } void Chain::merge_padding() { FLAC__ASSERT(is_valid()); ::FLAC__metadata_chain_merge_padding(chain_); } void Chain::sort_padding() { FLAC__ASSERT(is_valid()); ::FLAC__metadata_chain_sort_padding(chain_); } Iterator::Iterator(): iterator_(::FLAC__metadata_iterator_new()) { } Iterator::~Iterator() { clear(); } void Iterator::clear() { if(0 != iterator_) FLAC__metadata_iterator_delete(iterator_); iterator_ = 0; } bool Iterator::is_valid() const { return 0 != iterator_; } void Iterator::init(Chain &chain) { FLAC__ASSERT(is_valid()); FLAC__ASSERT(chain.is_valid()); ::FLAC__metadata_iterator_init(iterator_, chain.chain_); } bool Iterator::next() { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_iterator_next(iterator_); } bool Iterator::prev() { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_iterator_prev(iterator_); } ::FLAC__MetadataType Iterator::get_block_type() const { FLAC__ASSERT(is_valid()); return ::FLAC__metadata_iterator_get_block_type(iterator_); } Prototype *Iterator::get_block() { FLAC__ASSERT(is_valid()); Prototype *block = local::construct_block(::FLAC__metadata_iterator_get_block(iterator_)); if(0 != block) block->set_reference(true); return block; } bool Iterator::set_block(Prototype *block) { FLAC__ASSERT(0 != block); FLAC__ASSERT(is_valid()); bool ret = (bool)::FLAC__metadata_iterator_set_block(iterator_, block->object_); if(ret) { block->set_reference(true); delete block; } return ret; } bool Iterator::delete_block(bool replace_with_padding) { FLAC__ASSERT(is_valid()); return (bool)::FLAC__metadata_iterator_delete_block(iterator_, replace_with_padding); } bool Iterator::insert_block_before(Prototype *block) { FLAC__ASSERT(0 != block); FLAC__ASSERT(is_valid()); bool ret = (bool)::FLAC__metadata_iterator_insert_block_before(iterator_, block->object_); if(ret) { block->set_reference(true); delete block; } return ret; } bool Iterator::insert_block_after(Prototype *block) { FLAC__ASSERT(0 != block); FLAC__ASSERT(is_valid()); bool ret = (bool)::FLAC__metadata_iterator_insert_block_after(iterator_, block->object_); if(ret) { block->set_reference(true); delete block; } return ret; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -