Hi! I think this patch adds the last of the libFLAC metadata functions to the 
correct classes in libFLAC++. This is 4 CueSheet member function and 1 Picture 
function. If I haven't looked properly and more functions are still missing, 
let me know.

Next I would like to maybe add a few convenience functions. For instance, a 
padding block can really only be created and given a size, but this still takes 
2 statements. I think it would make sense to just have a constructor which 
takes a size argument. But let me know if this sort of thing is not wanted. 
Also, I think eventually the cpp example should be rewritten to make use of the 
C++ library (atm only the encoder class is used, all the metadata is done as in 
the C example). But again, just let me know if this is not deemed necessary or 
if some other things have higher priority (but realize I have no skills in the 
actual encoding/decoding parts of FLAC).

Bas Timmer
diff --git a/include/FLAC++/metadata.h b/include/FLAC++/metadata.h
index adf18b5..90bf198 100644
--- a/include/FLAC++/metadata.h
+++ b/include/FLAC++/metadata.h
@@ -808,18 +808,30 @@ namespace FLAC {
 
 			void set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
 
+			//! See FLAC__metadata_object_cuesheet_track_resize_indices()
+			bool resize_indices(unsigned track_num, unsigned new_num_indices);
+
 			//! See FLAC__metadata_object_cuesheet_track_insert_index()
 			bool insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
 
+			//! See FLAC__metadata_object_cuesheet_track_insert_blank_index()
+			bool insert_blank_index(unsigned track_num, unsigned index_num);
+
 			//! See FLAC__metadata_object_cuesheet_track_delete_index()
 			bool delete_index(unsigned track_num, unsigned index_num);
 
+			//! See FLAC__metadata_object_cuesheet_resize_tracks()
+			bool resize_tracks(unsigned new_num_tracks);
+
 			//! See FLAC__metadata_object_cuesheet_set_track()
 			bool set_track(unsigned i, const Track &track);
 
 			//! See FLAC__metadata_object_cuesheet_insert_track()
 			bool insert_track(unsigned i, const Track &track);
 
+			//! See FLAC__metadata_object_cuesheet_insert_blank_track()
+			bool insert_blank_track(unsigned i);
+
 			//! See FLAC__metadata_object_cuesheet_delete_track()
 			bool delete_track(unsigned i);
 
@@ -905,6 +917,9 @@ namespace FLAC {
 
 			//! See FLAC__metadata_object_picture_set_data()
 			bool set_data(const FLAC__byte *data, FLAC__uint32 data_length);
+
+			//! See FLAC__metadata_object_picture_is_legal()
+			bool is_legal(const char **violation);
 		};
 
 		/** Opaque metadata block for storing unknown types.
diff --git a/src/libFLAC++/metadata.cpp b/src/libFLAC++/metadata.cpp
index 427529b..ee671a0 100644
--- a/src/libFLAC++/metadata.cpp
+++ b/src/libFLAC++/metadata.cpp
@@ -1042,6 +1042,13 @@ namespace FLAC {
 			object_->data.cue_sheet.tracks[track_num].indices[index_num] = index;
 		}
 
+		bool CueSheet::resize_indices(unsigned track_num, unsigned new_num_indices)
+		{
+			FLAC__ASSERT(is_valid());
+			FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks);
+			return (bool)::FLAC__metadata_object_cuesheet_track_resize_indices(object_, track_num, new_num_indices);
+		}
+
 		bool CueSheet::insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index)
 		{
 			FLAC__ASSERT(is_valid());
@@ -1050,6 +1057,14 @@ namespace FLAC {
 			return (bool)::FLAC__metadata_object_cuesheet_track_insert_index(object_, track_num, index_num, index);
 		}
 
+		bool CueSheet::insert_blank_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_insert_blank_index(object_, track_num, index_num);
+		}
+
 		bool CueSheet::delete_index(unsigned track_num, unsigned index_num)
 		{
 			FLAC__ASSERT(is_valid());
@@ -1058,6 +1073,12 @@ namespace FLAC {
 			return (bool)::FLAC__metadata_object_cuesheet_track_delete_index(object_, track_num, index_num);
 		}
 
+		bool CueSheet::resize_tracks(unsigned new_num_tracks)
+		{
+			FLAC__ASSERT(is_valid());
+			return (bool)::FLAC__metadata_object_cuesheet_resize_tracks(object_, new_num_tracks);
+		}
+
 		bool CueSheet::set_track(unsigned i, const CueSheet::Track &track)
 		{
 			FLAC__ASSERT(is_valid());
@@ -1074,6 +1095,13 @@ namespace FLAC {
 			return (bool)::FLAC__metadata_object_cuesheet_insert_track(object_, i, const_cast< ::FLAC__StreamMetadata_CueSheet_Track*>(track.get_track()), /*copy=*/true);
 		}
 
+		bool CueSheet::insert_blank_track(unsigned i)
+		{
+			FLAC__ASSERT(is_valid());
+			FLAC__ASSERT(i <= object_->data.cue_sheet.num_tracks);
+			return (bool)::FLAC__metadata_object_cuesheet_insert_blank_track(object_, i);
+		}
+
 		bool CueSheet::delete_track(unsigned i)
 		{
 			FLAC__ASSERT(is_valid());
@@ -1210,6 +1238,12 @@ namespace FLAC {
 			return (bool)::FLAC__metadata_object_picture_set_data(object_, const_cast<FLAC__byte*>(data), data_length, /*copy=*/true);
 		}
 
+		bool Picture::is_legal(const char **violation)
+		{
+  			FLAC__ASSERT(is_valid());
+  			return (bool)::FLAC__metadata_object_picture_is_legal(object_, violation);
+		}
+
 
 		//
 		// Unknown
_______________________________________________
flac-dev mailing list
[email protected]
http://lists.xiph.org/mailman/listinfo/flac-dev

Reply via email to