<div dir="ltr">Dwight,<div><br></div><div>I still do not understand, why do you need to encode raw frames to h264 in the first pipeline (vpuenc_h264), and decode its back to the raw frames in the second pipeline (avdec_h264). It will consume a lot of CPU power and in your case (if you're running this on the same PC) it is useless, as you already have raw (decoded) frames right after v4l2src.</div><div>So, as my first suggestion, it is more reasonable to appsink raw frames right after src, and then, using appsrc, encode these frames to h264 and put them into splitmuxsink, and at another pipeline encode it to the jpegenc and do whatever you want. </div><div><br></div><div>Best regards,</div><div>Anton.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 14, 2021 at 6:43 PM Dwight Kulkarni <<a href="mailto:dwight@realtime-7.com">dwight@realtime-7.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Hi Anton,<br><div><br></div><div>1) Is there a way I can copy frames out of splitmuxsink ?   Which callback would I use for that if it's possible ?  Right now I am only using callback of "format-location" on splitmuxsink.</div><div><br></div><div>2) Suppose I split up the pipeline as follows:</div><div><br></div><div>(this is already working)</div><div><b>pipeline#1</b> = "v4l2src device=/dev/video1 ! video/x-raw, width=1920, height=1080, framerate=15/1 ! vpuenc_h264 ! tee name=v ! queue ! h264parse ! appsink name=h264vid max-buffers=1 drop=true v. ! queue ! h264parse ! splitmuxsink name=filesink location=./videos/video%02d.mkv max-size-time=10000000000 muxer-properties=\"properties,streamable=true\" ";</div><div><br></div><div><br></div><div><b>pipeline#2</b> = "appsrc name=jpegvideosrc  ! queue ! avdec_h264 ! jpegenc ! appsink name=jpegsink max-buffers=1 drop=true"</div><div><br></div><div>For "pipeline#2" do I still need to terminate in an appsink or can I tap into the end result of jpegenc with a callback (eg. new-sample or need-data) and giving it a name. Something like:</div><div><br></div><div>string other_pipeline = "appsrc name=jpegvideosrc  ! queue ! avdec_h264 ! jpegenc name=jpegsink"<br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 14, 2021 at 10:57 AM Anton Pryima via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello Dwight.<br><div><br></div><div>Why do you need to construct a so complicated pipeline and do both encoding and decoding?</div><div>Why not make a couple of pipelines:</div><div>1. v4l2src device=/dev/video1 ! video/x-raw, width=1920, height=1080, framerate=15/1 ! appsink</div><div>2. appsrc -> vpuenc_h264 ! splitmuxsink</div><div>3. appsrc -> jpegenc ! whatever you need next....  or just copy frames where every you need instead of second appsink.</div><div><br></div><div>Beste regards,</div><div>Anton.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 14, 2021 at 5:43 PM Dwight Kulkarni via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi all,<br clear="all"></div><div><br></div><div>I am trying to setup a pipeline with tee that has three forks. One of the forks is a jpegsink that I want to then access the image. Whereas the first two forks are working the last one for jpegsink is not.</div><div><br></div><div>Here is what I do:</div><div><br></div><div>gst_init (0, NULL);<br>string pipeline = "v4l2src device=/dev/video1 ! video/x-raw, width=1920, height=1080, framerate=15/1 ! vpuenc_h264 ! tee name=v ! queue ! h264parse ! appsink name=h264vid max-buffers=1 drop=true v. ! queue ! h264parse ! splitmuxsink name=filesink location=./videos/video%02d.mkv max-size-time=10000000000 muxer-properties=\"properties,streamable=true\" v. ! queue ! avdec_h264 ! jpegenc ! appsink name=jpegsink max-buffers=1 drop=true";<br>gstreamer_main_video_pipeline = gst_parse_launch(pipeline.c_str(),NULL);<br><br>GstElement * jpegsink = gst_bin_get_by_name_recurse_up(GST_BIN(gstreamer_main_video_pipeline), "jpegsink");<br><br>JpegContext* ctx = g_new0 (JpegContext, 1);<br>g_signal_connect (G_OBJECT(jpegsink), "new-sample", G_CALLBACK(new_sample), ctx);</div><div><br></div><div><br></div><div>I never get the callback to new_sample, but the pipeline is running and other two tee forks work properly.</div><div><br></div><div>Any help would be appreciated!<br></div><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><span style="font-size:12.8px">Sincerely,</span><div><br></div><div>Dwight Kulkarni <br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><span style="font-size:12.8px">Sincerely,</span><div><br></div><div>Dwight Kulkarni </div></div></div></div></div></div></div></div>
</blockquote></div>