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
Touch seeded packages, which is subscribed to x264 in Ubuntu.
https://bugs.launchpad.net/bugs/1906091

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

Status in x264 package in Ubuntu:
  New

Bug description:
  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!

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

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to