Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
JassonRM opened this issue Jul 13, 2022 · 0 comments
Open
Labels

Comments

@JassonRM
Copy link
Contributor

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 JassonRM added the bug label Jul 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant