GStreamermm: Gst::Taglist can not get Gst::TAG_DURATION?



Hi guys,

I am developing a small project called Dingo. It uses GStreamermm that lets the users select a media file through Gtk::FileChooserDialog, get the Gst::TagList using Gst::Discoverer, and then print out the metadata of the media file. The project was compiled and I tried it with some of my music files. All of the metadata could be read except for the Gst::TAG_DURATION... It always returned the following error:

(main:3956): GLib-GObject-CRITICAL **: g_value_unset: assertion `G_IS_VALUE (value)' failed

I went through the Gst::TagList reference and it is said that Gst::TagList::get_value(Gst::TAG_DURATION, Glib::ValueBase& value) required the variable "value" to be unsigned 64 bit integer (http://developer.gnome.org/gstreamermm/0.10/namespaceGst.html#ad14290dfbf163092d7a5c64b1cd76aee). So this is part of what I tried:

#include <gstreamermm.h>

namespace Dingo {
  class TagReader {
    public:
      TagReader();
      virtual ~TagReader();

      void read(Glib::ustring fileuri);
      unsigned long long getDuration();
    
      void print();

    private:
      Gst::TagList d_taglist;
  };
}

Dingo::TagReader::read(Glib::ustring fileuri) {
  //get the Gst::TagList of fileuri & store into d_taglist using Gst::Discoverer
}

unsigned long long Dingo::TagReader::getDuration() {
  Glib::Value<unsigned long long> temp_duration;
 
  if (d_taglist.get_value(Gst::TAG_DURATION, temp_duration)) {
    return temp_duration.get();
  }

  else {
    return 0;
  }
}

void Dingo::TagReader::print() {
  std::cout << "Duration: " << getDuration() << std::endl;  
  //Error: print out 0 & the above error message!
}

However, the getDuration() function ALWAYS returns 0 with the above error message and I dont understand if the problem lays on the way I use "unsigned long long" as unsigned 64-bit integer value. I tried to change it to "guint64" but the problem stays the same.

Therefore, I wonder if anybody here can spot the problem in my code. I cant get the reason why Gst::TagList would not read Gst::TAG_DURATION of my media file.

Here is the complete source code of the program if anybody wants: http://www.mediafire.com/?aq3yiq3n291g7rw. Just download, unzip and run "make" to compile.

Thank you for reading my message! Have a good day guys!

--
Phong V. Cao
phngcv gmail com




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]