Movie fails with error after a number of loops.

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Movie fails with error after a number of loops.

Zapfyr
I have just began working with the GStreamer SDK, in Windows, using the playbin2 set up as follows:

pipeline = gst_element_factory_make("playbin2", NULL);

g_object_get (pipeline, "flags", &flags, NULL);
flags |= GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_AUDIO;
flags &= ~GST_PLAY_FLAG_TEXT;
g_object_set (pipeline, "flags", flags, NULL);

this->sink = gst_element_factory_make("appsink", NULL);

g_object_set(G_OBJECT(sink), "emit-signals", true, NULL);
g_object_set(G_OBJECT(sink), "max-buffers", 1, NULL);
g_object_set(G_OBJECT(sink), "drop", true, NULL);

g_signal_connect(G_OBJECT(sink), "new-buffer", G_CALLBACK(newVideoBuffer), this);

GstCaps    *caps      = gst_caps_new_simple("video/x-raw-rgb", 0);
GstElement *rgbFilter = gst_element_factory_make("capsfilter", NULL);
g_object_set(G_OBJECT(rgbFilter), "caps", caps, NULL);
gst_caps_unref(caps);

GstElement* appBin = gst_bin_new(NULL);

gst_bin_add_many(GST_BIN(appBin), rgbFilter, NULL);
   
GstPad* sinkPad  = gst_element_get_static_pad(rgbFilter, "sink");
GstPad* ghostPad = gst_ghost_pad_new(NULL, sinkPad);
gst_object_unref(sinkPad);
gst_element_add_pad(appBin, ghostPad);
   
gst_bin_add_many(GST_BIN(appBin), sink, NULL);
gst_element_link_many(rgbFilter, sink, NULL);

g_object_set(G_OBJECT(pipeline), "video-sink", appBin, NULL);
g_object_set(G_OBJECT(pipeline), "uri", uri.c_str(), NULL);

I am trying to play a movie which looks like this (when running gst-discoverer):
Topology:
  container: Quicktime
    audio: MPEG-4 AAC
    video: H.264

Properties:
  Duration: 0:00:24.709000000
  Seekable: yes
  Tags:
      video codec: H.264 / AVC
      language code: en
      audio codec: MPEG-4 AAC audio
      maximum bitrate: 256000
      bitrate: 223265
      datetime: "2011-08-15T08:42:26.
      encoder: Lavf54.7.100
      container format: ISO MP4/M4A

The movie is looped, by seeking to 0 when I get a EOS message. After about 1 hour (the movie is a couple of seconds long) I get the following error:

Error recevied with message: Internal GStreamer error: code not implemented.  Please file a bug at http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer. Debugging information: gstffmpegcolorspace.c(495): gst_ffmpegcsp_transform (): /GstPlayBin2:playbin2208/GstPlaySink:playsink/GstBin:vbin/GstPlaySinkVideoConvert:vconv/GstFFMpegCsp:conv2:
cannot convert between formats Code: 3
Error recevied with message: GStreamer encountered a general stream error. Debugging information: qtdemux.c(3891): gst_qtdemux_loop (): /GstPlayBin2:playbin2208/GstURIDecodeBin:uridecodebin208/GstDecodeBin2:decodebin2208/GstQTDemux:qtdemux199:

Now I would not be confused if I didn't get the error after a while as I do. I am running an other movie at the same time with the same setup, which also dies after a while. But only after the first movie and with the following error:

Error recevied with message: Internal data stream error. Debugging information: gstavidemux.c(5214): gst_avi_demux_loop (): /GstPlayBin2:playbin2214/GstURIDecodeBin:uridecodebin214/GstDecodeBin2:decodebin2214/GstAviDemux:avidemux14:
streaming stopped, reason error Code: 1

Why is that? The seconds movie (big_buck_bunny_720p_surround.avi) has worked fine for hours on it own.

I'm not sure if I should file a bug on bugzilla (or how it is done) as I am fairly new to this ...

// Tobias