Public bug reported:

In my app I have segfault due to conflict of libx264-148 vs libx264-152.
I use gstreamer and libopencv_videoio in my project.
System is Ubuntu 18.04.5

The problem is that versions of libx264 get mixed due to implicit
linking.

Libraries are linked like this:
gstreamer -> x264enc -> libx264-152
libopencv_videoio -> libavcodec-ffmpeg.so.56 -> libx264-148

Both opencv-based code and gstreamer-based code works well if used
separately.

At the top of backtrace I see:
Thread 13 (Thread 0x7f28e2066700 (LWP 26012)):
#0  0x00007f290181c853 in x264_add8x8_idct_avx2.skip_prologue () at 
/usr/lib/x86_64-linux-gnu/libx264.so.152                 //!!!! 152
#1  0x00007f2927a93f55 in x264_nal_encode () at 
/usr/lib/x86_64-linux-gnu/libx264.so.148 //!!!! 148
#2  0x00007f2927af866c in  () at /usr/lib/x86_64-linux-gnu/libx264.so.148
#3  0x00007f2927b0143b in x264_encoder_headers () at 
/usr/lib/x86_64-linux-gnu/libx264.so.148

If I use objdump I can find x264_add8x8_idct_avx2.skip_prologue in both
libx264-148 and libx264-152


Here is example code which fails (C++ needed):

int main (int argc, char *argv[])
{
  App *app = &s_app;
  GError *error = NULL;
  GstBus *bus;
  GstCaps *caps;

  gst_init (&argc, &argv);
  
  auto cap = cv::VideoCapture("videoplayback.mp4");
  cv::Mat f;
  cap.read(f);
  cv::imshow("f", f);

  GST_DEBUG_CATEGORY_INIT (appsrc_pipeline_debug, "appsrc-pipeline", 0,
      "appsrc pipeline example");

  app->loop = g_main_loop_new (NULL, TRUE);
  app->timer = g_timer_new();

  app->pipeline = gst_parse_launch(R"(filesrc location=videoplayback.mp4
! decodebin ! videoconvert ! x264enc                 byte-stream=true
threads=1                 tune=zerolatency
bitrate=4000000                 key-int-max=50                 option-
string="force-cfr=1"         ! video/x-h264,profile=baseline,stream-
format="byte-stream"         ! h264parse         ! mpegtsmux         !
hlssink                 location="/tmp/data%06d.ts"                 max-
files=100                 playlist-length=10                 playlist-
location="/tmp/kek"                 target-duration=10
playlist-root=".")", NULL);

  g_assert (app->pipeline);

  bus = gst_pipeline_get_bus (GST_PIPELINE (app->pipeline));
  g_assert(bus);

  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);

  caps = gst_caps_new_simple ("video/x-raw-rgb",
    "bpp",G_TYPE_INT,8,
    "depth",G_TYPE_INT,8,
     "width", G_TYPE_INT, 640,
     "height", G_TYPE_INT, 480,
     NULL);
  gst_element_set_state (app->pipeline, GST_STATE_PLAYING);
  
  g_main_loop_run (app->loop);

  GST_DEBUG ("stopping");

  gst_element_set_state (app->pipeline, GST_STATE_NULL);
  
  gst_object_unref (bus);
  g_main_loop_unref (app->loop);

  return 0;
}


How can I solve this? PLease help!

** Affects: x264 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: gst gstreamer h264 libx264 opencv

** Summary changed:

- libx264-148 libx264-152 conflict segmentation failt SIGSEGV
+ libx264-148 libx264-152 conflict segmentation fault SIGSEGV

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1906091

Title:
  libx264-148 libx264-152 conflict segmentation fault SIGSEGV

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/x264/+bug/1906091/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to