⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metadata.cpp

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			FLAC__ASSERT(is_valid());			return (bool)::FLAC__metadata_object_seektable_is_legal(object_);		}		//		// VorbisComment::Entry		//		VorbisComment::Entry::Entry()		{			zero();		}		VorbisComment::Entry::Entry(const char *field, unsigned field_length)		{			zero();			construct(field, field_length);		}		VorbisComment::Entry::Entry(const char *field)		{			zero();			construct(field);		}		VorbisComment::Entry::Entry(const char *field_name, const char *field_value, unsigned field_value_length)		{			zero();			construct(field_name, field_value, field_value_length);		}		VorbisComment::Entry::Entry(const char *field_name, const char *field_value)		{			zero();			construct(field_name, field_value);		}		VorbisComment::Entry::Entry(const Entry &entry)		{			FLAC__ASSERT(entry.is_valid());			zero();			construct((const char *)entry.entry_.entry, entry.entry_.length);		}		VorbisComment::Entry &VorbisComment::Entry::operator=(const Entry &entry)		{			FLAC__ASSERT(entry.is_valid());			clear();			construct((const char *)entry.entry_.entry, entry.entry_.length);			return *this;		}		VorbisComment::Entry::~Entry()		{			clear();		}		bool VorbisComment::Entry::is_valid() const		{			return is_valid_;		}		unsigned VorbisComment::Entry::get_field_length() const		{			FLAC__ASSERT(is_valid());			return entry_.length;		}		unsigned VorbisComment::Entry::get_field_name_length() const		{			FLAC__ASSERT(is_valid());			return field_name_length_;		}		unsigned VorbisComment::Entry::get_field_value_length() const		{			FLAC__ASSERT(is_valid());			return field_value_length_;		}		::FLAC__StreamMetadata_VorbisComment_Entry VorbisComment::Entry::get_entry() const		{			FLAC__ASSERT(is_valid());			return entry_;		}		const char *VorbisComment::Entry::get_field() const		{			FLAC__ASSERT(is_valid());			return (const char *)entry_.entry;		}		const char *VorbisComment::Entry::get_field_name() const		{			FLAC__ASSERT(is_valid());			return field_name_;		}		const char *VorbisComment::Entry::get_field_value() const		{			FLAC__ASSERT(is_valid());			return field_value_;		}		bool VorbisComment::Entry::set_field(const char *field, unsigned field_length)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(0 != field);			if(!::FLAC__format_vorbiscomment_entry_is_legal((const ::FLAC__byte*)field, field_length))				return is_valid_ = false;			clear_entry();			if(0 == (entry_.entry = (FLAC__byte*)malloc(field_length+1))) {				is_valid_ = false;			}			else {				entry_.length = field_length;				memcpy(entry_.entry, field, field_length);				entry_.entry[field_length] = '\0';				(void) parse_field();			}			return is_valid_;		}		bool VorbisComment::Entry::set_field(const char *field)		{			return set_field(field, strlen(field));		}		bool VorbisComment::Entry::set_field_name(const char *field_name)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(0 != field_name);			if(!::FLAC__format_vorbiscomment_entry_name_is_legal(field_name))				return is_valid_ = false;			clear_field_name();			if(0 == (field_name_ = strdup(field_name))) {				is_valid_ = false;			}			else {				field_name_length_ = strlen(field_name_);				compose_field();			}			return is_valid_;		}		bool VorbisComment::Entry::set_field_value(const char *field_value, unsigned field_value_length)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(0 != field_value);			if(!::FLAC__format_vorbiscomment_entry_value_is_legal((const FLAC__byte*)field_value, field_value_length))				return is_valid_ = false;			clear_field_value();			if(0 == (field_value_ = (char *)malloc(field_value_length+1))) {				is_valid_ = false;			}			else {				field_value_length_ = field_value_length;				memcpy(field_value_, field_value, field_value_length);				field_value_[field_value_length] = '\0';				compose_field();			}			return is_valid_;		}		bool VorbisComment::Entry::set_field_value(const char *field_value)		{			return set_field_value(field_value, strlen(field_value));		}		void VorbisComment::Entry::zero()		{			is_valid_ = true;			entry_.length = 0;			entry_.entry = 0;			field_name_ = 0;			field_name_length_ = 0;			field_value_ = 0;			field_value_length_ = 0;		}		void VorbisComment::Entry::clear()		{			clear_entry();			clear_field_name();			clear_field_value();			is_valid_ = true;		}		void VorbisComment::Entry::clear_entry()		{			if(0 != entry_.entry) {				free(entry_.entry);				entry_.entry = 0;				entry_.length = 0;			}		}		void VorbisComment::Entry::clear_field_name()		{			if(0 != field_name_) {				free(field_name_);				field_name_ = 0;				field_name_length_ = 0;			}		}		void VorbisComment::Entry::clear_field_value()		{			if(0 != field_value_) {				free(field_value_);				field_value_ = 0;				field_value_length_ = 0;			}		}		void VorbisComment::Entry::construct(const char *field, unsigned field_length)		{			if(set_field(field, field_length))				parse_field();		}		void VorbisComment::Entry::construct(const char *field)		{			construct(field, strlen(field));		}		void VorbisComment::Entry::construct(const char *field_name, const char *field_value, unsigned field_value_length)		{			if(set_field_name(field_name) && set_field_value(field_value, field_value_length))				compose_field();		}		void VorbisComment::Entry::construct(const char *field_name, const char *field_value)		{			construct(field_name, field_value, strlen(field_value));		}		void VorbisComment::Entry::compose_field()		{			clear_entry();			if(0 == (entry_.entry = (FLAC__byte*)malloc(field_name_length_ + 1 + field_value_length_ + 1))) {				is_valid_ = false;			}			else {				memcpy(entry_.entry, field_name_, field_name_length_);				entry_.length += field_name_length_;				memcpy(entry_.entry + entry_.length, "=", 1);				entry_.length += 1;				memcpy(entry_.entry + entry_.length, field_value_, field_value_length_);				entry_.length += field_value_length_;				entry_.entry[entry_.length] = '\0';				is_valid_ = true;			}		}		void VorbisComment::Entry::parse_field()		{			clear_field_name();			clear_field_value();			const char *p = (const char *)memchr(entry_.entry, '=', entry_.length);			if(0 == p)				p = (const char *)entry_.entry + entry_.length;			field_name_length_ = p - (const char *)entry_.entry;			if(0 == (field_name_ = (char *)malloc(field_name_length_ + 1))) { // +1 for the trailing \0				is_valid_ = false;				return;			}			memcpy(field_name_, entry_.entry, field_name_length_);			field_name_[field_name_length_] = '\0';			if(entry_.length - field_name_length_ == 0) {				field_value_length_ = 0;				if(0 == (field_value_ = (char *)malloc(0))) {					is_valid_ = false;					return;				}			}			else {				field_value_length_ = entry_.length - field_name_length_ - 1;				if(0 == (field_value_ = (char *)malloc(field_value_length_ + 1))) { // +1 for the trailing \0					is_valid_ = false;					return;				}				memcpy(field_value_, ++p, field_value_length_);				field_value_[field_value_length_] = '\0';			}			is_valid_ = true;		}		//		// VorbisComment		//		VorbisComment::VorbisComment():		Prototype(FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT), /*copy=*/false)		{ }		VorbisComment::~VorbisComment()		{ }		unsigned VorbisComment::get_num_comments() const		{			FLAC__ASSERT(is_valid());			return object_->data.vorbis_comment.num_comments;		}		const FLAC__byte *VorbisComment::get_vendor_string() const		{			FLAC__ASSERT(is_valid());			return object_->data.vorbis_comment.vendor_string.entry;		}		VorbisComment::Entry VorbisComment::get_comment(unsigned index) const		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(index < object_->data.vorbis_comment.num_comments);			return Entry((const char *)object_->data.vorbis_comment.comments[index].entry, object_->data.vorbis_comment.comments[index].length);		}		bool VorbisComment::set_vendor_string(const FLAC__byte *string)		{			FLAC__ASSERT(is_valid());			// vendor_string is a special kind of entry			const ::FLAC__StreamMetadata_VorbisComment_Entry vendor_string = { strlen((const char *)string), (FLAC__byte*)string }; // we can cheat on const-ness because we make a copy below:			return (bool)::FLAC__metadata_object_vorbiscomment_set_vendor_string(object_, vendor_string, /*copy=*/true);		}		bool VorbisComment::set_comment(unsigned index, const VorbisComment::Entry &entry)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(index < object_->data.vorbis_comment.num_comments);			return (bool)::FLAC__metadata_object_vorbiscomment_set_comment(object_, index, entry.get_entry(), /*copy=*/true);		}		bool VorbisComment::insert_comment(unsigned index, const VorbisComment::Entry &entry)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(index <= object_->data.vorbis_comment.num_comments);			return (bool)::FLAC__metadata_object_vorbiscomment_insert_comment(object_, index, entry.get_entry(), /*copy=*/true);		}		bool VorbisComment::append_comment(const VorbisComment::Entry &entry)		{			FLAC__ASSERT(is_valid());			return (bool)::FLAC__metadata_object_vorbiscomment_append_comment(object_, entry.get_entry(), /*copy=*/true);		}		bool VorbisComment::delete_comment(unsigned index)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(index < object_->data.vorbis_comment.num_comments);			return (bool)::FLAC__metadata_object_vorbiscomment_delete_comment(object_, index);		}		//		// CueSheet::Track		//		CueSheet::Track::Track():		object_(::FLAC__metadata_object_cuesheet_track_new())		{ }		CueSheet::Track::Track(const ::FLAC__StreamMetadata_CueSheet_Track *track):		object_(::FLAC__metadata_object_cuesheet_track_clone(track))		{ }		CueSheet::Track::Track(const Track &track):		object_(::FLAC__metadata_object_cuesheet_track_clone(track.object_))		{ }		CueSheet::Track &CueSheet::Track::operator=(const Track &track)		{			if(0 != object_)				::FLAC__metadata_object_cuesheet_track_delete(object_);			object_ = ::FLAC__metadata_object_cuesheet_track_clone(track.object_);			return *this;		}		CueSheet::Track::~Track()		{			if(0 != object_)				::FLAC__metadata_object_cuesheet_track_delete(object_);		}		bool CueSheet::Track::is_valid() const		{			return(0 != object_);		}		::FLAC__StreamMetadata_CueSheet_Index CueSheet::Track::get_index(unsigned i) const		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(i < object_->num_indices);			return object_->indices[i];		}		void CueSheet::Track::set_isrc(const char value[12])		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(0 != value);			memcpy(object_->isrc, value, 12);			object_->isrc[12] = '\0';		}		void CueSheet::Track::set_type(unsigned value)		{			FLAC__ASSERT(is_valid());			FLAC__ASSERT(value <= 1);			object_->type = value;		} 		void CueSheet::Track::set_index(unsigned i, const ::FLAC__StreamMetadata_CueSheet_Index &index) 		{ 			FLAC__ASSERT(is_valid()); 			FLAC__ASSERT(i < object_->num_indices); 			object_->indices[i] = index; 		}		//		// CueSheet		//		CueSheet::CueSheet():		Prototype(FLAC__metadata_object_new(FLAC__METADATA_TYPE_CUESHEET), /*copy=*/false)		{ }		CueSheet::~CueSheet()		{ }		const char *CueSheet::get_media_catalog_number() const		{			FLAC__ASSERT(is_valid());			return object_->data.cue_sheet.media_catalog_number;		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -