Administrator
|
I have a nicely working gstparsed pipeline that is mostly this:
gstoarse( "souphttpsrc timestamp=true ! multipartdemux ! image/jpeg,width=640,height=480 ! matroskamux ! filesink" ) Works great. Does just what I want. Now, I thought I'd like to record information about my data so I redid y pipeline to be: gstoarse( "souphttpsrc timestamp=trye ! multipartdemux ! image/jpeg,width=640,height=480 ! matroskamux ! tee name=fred. ! queue ! filesink fred. ! queue ! appsink" ). With some stuf to catch the frames and eos-es In both cases these are in C/C++ code and I inject an eos to halt the pipeline. The second pipe does not seem to "hear" the eos. It just keeps going. It also seems to loose the timestamp nfo that souphttpsrc put into the data.. Thanks for any help. Wes |
On Thu, 2010-04-29 at 05:01 -0700, Wes Miller wrote:
> image/jpeg,width=640,height=480 ! matroskamux ! tee name=fred. ! queue ! ^ Remove that dot. Dots are used by the parser to differentiate between elements (before the dot) and pads (after the dot). So putting dots in names will likely confuse gst-launch and make it not work. Benjamin ------------------------------------------------------------------------------ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Administrator
|
This post was updated on .
Nope, doesn't look like that's the answer.
Here is the exact pipeline I tried. /*--- build the pipeline ---*/ this->pipeline = gst_parse_launch( " souphttpsrc name=my_src " "! multipartdemux name=my_demux " "! image/jpeg,width=640,height=480 " "! matroskamux name=my_mux " "! tee name=my_tee" "! queue name=my_queue1" "! appsink name=my_appsink my_tee." "! queue name=my_queue2" "! filesink name=my_sink", &error ); I attach to the bus to check for EOS and call a callback that should shutdown the pipeline. Also, i poll the output of appsink looking for EOS. Neither detector finds and EOS. And the filesink writes no data. Neither do the writes to file I do inside the while not eos loop. Feels like everything is backing up at the tee or the queues. ADDED ADDITIONAL INFO: The pipeline above will not change to playing state.the change state returns 2. I thought the purpose of gstparse was to handle all that underlying pad connecting stuff and I'd never see a 2. YET ANOTHER UPDATE: I modified the pipeline to put the tee before the matroskamux and I am now getting data down both legs of the tee. However, my EOS is still lost. Here are the useful parts: /*--- build the pipeline ---*/ this->pipeline = gst_parse_launch( "souphttpsrc name=my_src " "! multipartdemux name=my_demux " "! image/jpeg,width=640,height=480 " "! tee name=t t. " "! queue name=my_queue1 " "! matroskamux name=my_mux " "! filesink name=my_sink t. " "! queue name=my_queue2 " "! appsink name=my_appsink ", &error ); /* ... */ appsink = gst_bin_get_by_name (GST_BIN( this->pipeline), "my_appsink" ); /*--- setup bus and message handling ---*/ bus = gst_pipeline_get_bus( GST_PIPELINE( this->pipeline )); gst_bus_add_signal_watch_full( bus, G_PRIORITY_HIGH ); g_signal_connect( bus, "message::eos", (GCallback)eos_message_received, this ); gst_object_unref( GST_OBJECT(bus) ); /* start playback */ gst_element_set_state( this->pipeline, GST_STATE_PLAYING ); while ( !gst_app_sink_is_eos( GST_APP_SINK( appsink ))) { GstBuffer *buf (0); buf = gst_app_sink_pull_buffer( GST_APP_SINK( appsink )); /* write various data to file(s) */ gst_buffer_unref( buf ); // g_main_context_iteration( g_main_context_default(), false ); } g_main_loop_run( this->loop ); /* ... */ An EOS is injected by an external (thread) timer that uses: gst_element_send_event( this->pipeline, gst_event_new_eos() ); Thanks for any help. Wes |
Free forum by Nabble | Edit this page |