Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. The CDB process terminated. Using libvlc and opencv on QTCreator 3.10
Forum Updated to NodeBB v4.3 + New Features

The CDB process terminated. Using libvlc and opencv on QTCreator 3.10

Scheduled Pinned Locked Moved Unsolved General and Desktop
1 Posts 1 Posters 971 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    Excludos
    wrote on 20 Sept 2016, 14:08 last edited by Excludos
    #1

    There's an error in the title. Should say "QTcreator 4.1", but I don't seem able to change it.

    I'm having the weirdest bug in QTCreator and I can not find out why or how it's happening.

    Running QTCreator 4.1.0, Based on QT 5.7.0.
    Compiler: MSVC 2015 x64.
    External libraries: Opencv 3.10 and LibVLC 2.2.4 (both 64 bit. Using 32 bit compiler with 32 bit libraries creates the same error).

    The code I'm trying to make work is from an example I found on a forum. It fetches a picture from an IP camera with LibVLC and transfers it to a OpenCV Mat (I'm using QTCreator to do this because I'm later going to show the picture in a QT frontend).

    The program compiles fine, but crashes immediately on startup with the debug error "The CDB process terminated."

    Here's the code that creates the crash 100% of the time (Runs fine in Visual Studio):

    #include <Windows.h>
    #include <opencv\highgui.h>
    #include <opencv\cv.h>
    #include <opencv2\opencv.hpp>
    #include "vlc/vlc.h"
    
    using namespace cv;
    
    struct ctx
    {
    Mat* image;
    HANDLE mutex;
    uchar* pixels;
    };
    // define output video resolution
    #define VIDEO_WIDTH     1920
    #define VIDEO_HEIGHT    1080
    
    void *lock(void *data, void**p_pixels)
    {
    struct ctx *ctx = (struct ctx*)data;
    
    WaitForSingleObject(ctx->mutex, INFINITE);
    
    // pixel will be stored on image pixel space
    *p_pixels = ctx->pixels;
    
    return NULL;
    
    }
    
    void display(void *data, void *id) {
    (void)data;
    assert(id == NULL);
    }
    
    void unlock(void *data, void *id, void *const *p_pixels) {
    
    // get back data structure 
    struct ctx *ctx = (struct ctx*)data;
    
    /* VLC just rendered the video, but we can also render stuff */
    // show rendered image
    imshow("test", *ctx->image);
    
    ReleaseMutex(ctx->mutex);
    }
    
    int main()
    {
    // VLC pointers
    libvlc_instance_t *vlcInstance;
    libvlc_media_player_t *mp;
    libvlc_media_t *media;
    
    const char * const vlc_args[] = {
    	"-I", "dummy", // Don't use any interface
    	"--ignore-config", // Don't use VLC's config
    	"--extraintf=logger", // Log anything
    	"--verbose=2", // Be much more verbose then normal for debugging purpose
    };
    
    vlcInstance = libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);
    
    // Read a distant video stream
    media = libvlc_media_new_location(vlcInstance, "rtsp://root:root@10.11.12.13:1234/videoinput_1/h264_1/media.stm");
    
    mp = libvlc_media_player_new_from_media(media);
    
    libvlc_media_release(media);
    
    struct ctx* context = (struct ctx*)malloc(sizeof(*context));
    context->mutex = CreateMutex(NULL, FALSE, NULL);
    
    context->image = new Mat(VIDEO_HEIGHT, VIDEO_WIDTH, CV_8UC3);
    context->pixels = (unsigned char *)context->image->data;
    // show blank image
    imshow("test", *context->image);
    
    libvlc_video_set_callbacks(mp, lock, unlock, display, context);
    libvlc_video_set_format(mp, "RV24", VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH * 24 / 8); // pitch = width * BitsPerPixel / 8
    
    
    int ii = 0;
    int key = 0;
    while (key != 27)
    {
    	ii++;
    	if (ii > 5)
    	{
    		libvlc_media_player_play(mp);
    	}
    	float fps = libvlc_media_player_get_fps(mp);
    	printf("fps:%f\r\n", fps);
    	key = waitKey(30); // wait 100ms for Esc key
        }
    
        libvlc_media_player_stop(mp);
    
    
        return 0;
    }
    

    Bear in mind, program doesn't actually have to run the code to crash. Even if it just sits in a unused method, it still crashes immediately on startup.

    Here's the bizarre part: If I comment out the "broken code" from the program, the error is still there. I remove the code completely (with ctrl+z to a point before I added it), and the error is still there. I remove the includes, still error. The only way I can find to run the program after getting this error is to remove all broken code and associated libraries, create a different type of build error, and that somehow resets the debugger enough to run the program again. Even restarting the program or rebooting the computer doesn't work

    From a different forum, I found a tip to add cdb.exe manually in tools-options-Debugger-CDB:
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe

    Having done that, the debugger (without an error this time) locks itself on startup (refuses to be closed), while running the application without it one produces a regular crash.

    With that, I am out of ideas. Anyone else?

    1 Reply Last reply
    0

    1/1

    20 Sept 2016, 14:08

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved