gst-interpipe icon indicating copy to clipboard operation
gst-interpipe copied to clipboard

Invalid DTS when using compensate-ts and the buffer doesn't have DTS

Open JassonRM opened this issue 3 years ago • 0 comments

This issue only presents itself when running different pipelines, either in gstd or within an application. If using the same pipeline as when using a gst-launch-1.0 command or just one pipeline inside the application it doesn't happen due to both elements having the same time and no compensation being applied.

This issue can be reproduced with the following code:

#include <gst/gst.h>

int
main (int argc, char *argv[])
{
  GstElement *pipeline1;
  GstElement *pipeline2;
  GstBus *bus;
  GstMessage *msg;

  /* Initialize GStreamer */
  gst_init (&argc, &argv);

  /* Build the pipeline */
  pipeline1 =
      gst_parse_launch
      ("videotestsrc ! identity silent=false ! interpipesink name=fullres sync=false async=false",
      NULL);

  pipeline2 =
      gst_parse_launch
      ("interpipesrc listen-to=fullres stream-sync=compensate-ts ! queue ! fakesink sync=true async=false",
      NULL);

  /* Start playing */
  gst_element_set_state (pipeline1, GST_STATE_PLAYING);
  gst_element_set_state (pipeline2, GST_STATE_PLAYING);

  /* Wait until error or EOS */
  bus = gst_element_get_bus (pipeline2);
  msg =
      gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
      GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

  /* See next tutorial for proper error message handling/parsing */
  if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
    g_error ("An error occurred! Re-run with the GST_DEBUG=*:WARN environment "
        "variable set for more details.");
  }

  /* Free resources */
  gst_message_unref (msg);
  gst_object_unref (bus);
  gst_element_set_state (pipeline1, GST_STATE_NULL);
  gst_element_set_state (pipeline2, GST_STATE_NULL);
  gst_object_unref (pipeline1);
  gst_object_unref (pipeline2);
  return 0;
}

The interpipesrc logs show the following:

0:00:00.786194804 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:650:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Incoming Buffer timestamp (pts): 0:00:33.533333333
0:00:00.786198823 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:652:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Incoming Buffer timestamp (dts): 99:99:99.999999999
0:00:00.786202774 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:654:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m My Base Time: 4:06:32.151336843
0:00:00.786206631 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:656:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Node Base Time: 4:06:32.146923878
0:00:00.786210733 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:662:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Diff time: 0:00:00.004412965
0:00:00.786214570 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:684:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Calculated Buffer Timestamp (PTS): 0:00:33.528920368
0:00:00.786218408 [336m22475[00m 0x559a9220eca0 [33;01mLOG    [00m [00m        interpipesrc gstinterpipesrc.c:687:gst_inter_pipe_src_push_buffer:<interpipesrc0>[00m Calculated Buffer Timestamp (DTS): 5124095:34:33.705138650

JassonRM avatar Jul 13 '22 15:07 JassonRM