<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    when you download gst-plugins-base source you can find in
    tests/examples/app example app which use both appsink and appsrc.<br>
    <div class="moz-cite-prefix">Dňa 01.08.2014 o 17:04 Lasse Laursen
      napísal(a):<br>
    </div>
    <blockquote cite="mid:53DBAC90.5030606@lasselaursen.com" type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      Not quite sure what you mean by -<br>
      <br>
      'check in which state return gst_element_get_state()'?<br>
    </blockquote>
    what is in "state" variable after gst_element_get_state()
    <blockquote cite="mid:53DBAC90.5030606@lasselaursen.com" type="cite">
      <br>
      But to clarify, no - none of the callback functions are ever
      called. The pipeline just doesn't seem to start.<br>
      <br>
      Regards,<br>
      Lasse<br>
      <br>
      <div class="moz-cite-prefix">On 01-08-2014 23:48, Dušan Poizl
        wrote:<br>
      </div>
      <blockquote cite="mid:53DBA8D2.60203@maindata.sk" type="cite">
        <meta content="text/html; charset=utf-8"
          http-equiv="Content-Type">
        GST_STATE_CHANGE_ASYNC is ok. it means that pipeline doesn't
        finished changing state before gst_element_set_state() return.
        whole pipeline run in separate thread. when you get state you
        practically wait until pipeline finish transition to desired
        state. so check in which state return gst_element_get_state()
        and does your callbacks end up called?<br>
        <br>
        <div class="moz-cite-prefix">Dňa 01.08.2014 o 14:37 Lasse
          Laursen napísal(a):<br>
        </div>
        <blockquote cite="mid:53DB89F3.3080901@lasselaursen.com"
          type="cite">
          <meta http-equiv="content-type" content="text/html;
            charset=utf-8">
          Hey Dev's,<br>
          <br>
          I've been throwing myself at this problem for a few days
          without any significant progress. Hopefully someone can tell
          me what painfully obvious part I've overlooked.<br>
          <br>
          Essentially what I'm trying to do is just grab some frames of
          video during playback from an appsink, but it seems my simple
          pipeline is missing something vital, because when I get to
          changing the state to 'paused' or 'playing' the
          GstStateChangeReturn I recieve is 'GST_STATE_CHANGE_ASYNC
          (2)'. The debug log doesn't yield any error output, so I'm a
          bit unsure of what to look closer at?<br>
          <br>
          Have I perhaps not hooked something up correctly? What am I
          missing here?<br>
          <br>
          Below is my simple code for trying to hook up this simple
          pipeline and grab some frames.<br>
          <br>
          ---------<br>
          <br>
              std::string launchString = "uridecodebin uri=" +
          mVideoFileName + " ! appsink name=sink";<br>
          <br>
              mGstPipeline = gst_parse_launch( launchString.c_str(),
          &pstGErr1 );<br>
              printErrorToConsole( pstGErr1 != nullptr, "GStreamer
          Error: Could not construct pipeline", pstGErr1 );<br>
          <br>
          <br>
              GstElement *mPipeline_AppSink;<br>
              mPipeline_AppSink = gst_bin_get_by_name( GST_BIN(
          mGstPipeline ), "sink" );<br>
          <br>
             
          //////////////////////////////////////////////////////////////////////////



          VIDEO SINK<br>
              // Config Video Sink<br>
              gst_base_sink_set_sync( GST_BASE_SINK( mPipeline_AppSink
          ), true );<br>
              gst_app_sink_set_max_buffers( GST_APP_SINK(
          mPipeline_AppSink ), 8 );<br>
              gst_app_sink_set_drop( GST_APP_SINK( mPipeline_AppSink ),
          true );<br>
              gst_base_sink_set_max_lateness( GST_BASE_SINK(
          mPipeline_AppSink ), -1 );<br>
          <br>
              // Set some fix caps for the video sink<br>
              // It would seem that GStreamer then tries to transform
          any incoming video stream according to these caps<br>
              GstCaps* caps = gst_caps_new_simple( "video/x-raw-rgb",<br>
                  "bpp", G_TYPE_INT, 24,<br>
                  "depth", G_TYPE_INT, 24,<br>
                  "endianness", G_TYPE_INT, 4321,<br>
                  "red_mask", G_TYPE_INT, 0xff0000,<br>
                  "green_mask", G_TYPE_INT, 0x00ff00,<br>
                  "blue_mask", G_TYPE_INT, 0x0000ff,<br>
                  "alpha_mask", G_TYPE_INT, 0x000000ff,<br>
                  NULL );<br>
          <br>
              gst_app_sink_set_caps( GST_APP_SINK( mPipeline_AppSink ),
          caps );<br>
              gst_caps_unref( caps );<br>
          <br>
              // Set the configured video appsink to the main pipeline<br>
              //g_object_set( m_GstPipeline, "video-sink",
          m_GstVideoSink, (void*) NULL );<br>
          <br>
              // Tell the video appsink that it should not emit signals
          as the buffer retrieving is handled via callback methods<br>
              g_object_set( mPipeline_AppSink, "emit-signals", false,
          "sync", true, (void*) NULL );<br>
          <br>
              GstAppSinkCallbacks cbs; // Does this need to be kept
          alive?<br>
          <br>
              // Set Video Sink callback methods<br>
              cbs.eos = &GSCinderApp::onEosFromVideoSource;<br>
              cbs.new_preroll =
          &GSCinderApp::onNewPrerollFromVideoSource;<br>
              cbs.new_sample =
          &GSCinderApp::onNewBufferFromVideoSource;<br>
              gst_app_sink_set_callbacks( GST_APP_SINK(
          mPipeline_AppSink ), &cbs, this, NULL );<br>
          <br>
          <br>
             
          //////////////////////////////////////////////////////////////////////////



          BUS<br>
              // Set GstBus<br>
              //m_GstBus = gst_pipeline_get_bus( GST_PIPELINE(
          m_GstPipeline ) );<br>
          <br>
              if ( mGstPipeline != NULL )<br>
              {<br>
                  // We need to stream the file a little bit in order to
          be able to retrieve information from it<br>
                  GstStateChangeReturn nStateChgRet;<br>
          <br>
                  nStateChgRet = gst_element_set_state( mGstPipeline,
          GST_STATE_READY );<br>
                  printErrorToConsole( nStateChgRet ==
          GST_STATE_CHANGE_FAILURE, "GStreamer Error: State Change
          Failure 1" );<br>
          <br>
                  nStateChgRet = gst_element_set_state( mGstPipeline,
          GST_STATE_PAUSED );<br>
                  printErrorToConsole( nStateChgRet ==
          GST_STATE_CHANGE_FAILURE, "GStreamer Error: State Change
          Failure 1" );<br>
          <br>
                  // For some reason this is needed in order to gather
          video information such as size, framerate etc ...<br>
                  GstState state;<br>
                  gst_element_get_state( mGstPipeline, &state, NULL,
          2 * GST_SECOND );        // Erm... Why get state?<br>
          <br>
              }<br>
              else {<br>
                  printErrorToConsole( true, "GStreamer Error: Pipeline
          Empty?!" );<br>
              }<br>
          <br>
              // Retrieve and store all relevant Media Information<br>
              //retrieveVideoInfo();<br>
          <br>
              // Check if we actually end up playing?<br>
              if ( mGstPipeline != NULL )<br>
              {<br>
                  GstStateChangeReturn nStateChgRet;<br>
                  nStateChgRet = gst_element_set_state( mGstPipeline,
          GST_STATE_PAUSED );<br>
                  printErrorToConsole( nStateChgRet ==
          GST_STATE_CHANGE_FAILURE, "GStreamer Error: State Change
          Failure 3" );<br>
          <br>
              }<br>
              else {<br>
                  printErrorToConsole( true, "GStreamer Error: Pipeline
          Empty?!" );<br>
              }<br>
          <br>
          ----------------<br>
          <br>
          Regards,<br>
          Lasse<br>
          <br>
          <div class="moz-signature">-- <br>
            Lasse Farnung Laursen<br>
            Post.doc at the University of Tokyo<br>
            <a moz-do-not-send="true" href="http://www.lasselaursen.com">www.lasselaursen.com</a><br>
            FB: <a moz-do-not-send="true"
              href="https://www.facebook.com/lasse.laursen">lasse.laursen

            </a><br>
            Twitter: <a moz-do-not-send="true"
              href="https://twitter.com/PMP_J">@PMP_J</a></div>
          <br>
          <fieldset class="mimeAttachmentHeader"></fieldset>
          <br>
          <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
        </blockquote>
        <br>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
      </blockquote>
      <br>
      <div class="moz-signature">-- <br>
        Lasse Farnung Laursen<br>
        Post.doc at the University of Tokyo<br>
        <a moz-do-not-send="true" href="http://www.lasselaursen.com">www.lasselaursen.com</a><br>
        FB: <a moz-do-not-send="true"
          href="https://www.facebook.com/lasse.laursen">lasse.laursen </a><br>
        Twitter: <a moz-do-not-send="true"
          href="https://twitter.com/PMP_J">@PMP_J</a></div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>