Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

flip and thread play Video error

Hi,

I have a function(assume the function is A) that capture image from my webcam, and another function play a video (assume the function is B). Both of them can run independently well. but when I mix them by using thread mThead(B) in function A. The B function will fail. 
I have found that in function A if I execute the flip(...), the program can run into function B but it cannot play the video. If without flip(), the function B will correctly run.

Is there anyone know what happen to this? And how can I fix it?

Thank you very much.

flip and thread play Video error

Hi,

I have a function(assume the function is A) that capture image from my webcam, and another function play a video (assume the function is B). Both of them can run independently well. but when I mix them by using thread mThead(B) in function A. The B function will fail. 
I have found that in function A if I execute the flip(...), the program can run into function B but it cannot play the video. If without flip(), the function B will correctly run.

Is there anyone know what happen to this? And how can I fix it?

Thank you very much.

This is some of my code:

using namespace cv; using namespace std;

// Global variables Mat frame; //current frame int keyboard; //input from keyboard

void processVideo(); void playVideo();

int main() {

//create GUI windows
namedWindow("Frame");
processVideo();

//destroy GUI windows
destroyAllWindows();
return EXIT_SUCCESS;

}

void playVideo(){ VideoCapture cap("A.avi"); Mat myframe;

if (!cap.isOpened()) {
    cout << "Cannot open the video file on C++ API" << std::endl;
    exit(EXIT_FAILURE);
}

for (;;) {
    cap >> myframe;
    if (myframe.empty())
        break;
    imshow("Video Frame", myframe);
    int c = waitKey(10);
    if ((char)c == 27) { break; }
}
cap.release();

}

void processVideo() { Mat dst;

//create the capture object
VideoCapture cap(0);
//open capture
if (!cap.isOpened()){
    cout << "Open camera failed";
    exit(EXIT_FAILURE);
}

//read input data. ESC or 'q' for quitting
while ((char)keyboard != 'q' && (char)keyboard != 27){
    //read the current frame
    if (!cap.read(dst)) {
        cerr << "Unable to read next frame." << endl;
        cerr << "Exiting..." << endl;
        exit(EXIT_FAILURE);
    }

    flip(dst, frame, 1);   //something image processing

    if (condition is true){
        thread mThread(playVideo);
        // wait the thread stop
        mThread.join();
    }

    //show the current frame and the fg masks
    imshow("Frame", frame);

    //get the input from the keyboard
    keyboard = waitKey(30);
}

//delete capture object
cap.release();

}

click to hide/show revision 3
No.3 Revision

updated 2016-11-05 08:46:59 -0600

berak gravatar image

flip and thread play Video error

Hi,

I have a function(assume the function is A) that capture image from my webcam, and another function play a video (assume the function is B). Both of them can run independently well. but when I mix them by using thread mThead(B) in function A. The B function will fail. 
I have found that in function A if I execute the flip(...), the program can run into function B but it cannot play the video. If without flip(), the function B will correctly run.

Is there anyone know what happen to this? And how can I fix it?

Thank you very much.

This is some of my code:

using namespace cv;
using namespace std;

std; // Global variables Mat frame; //current frame int keyboard; //input from keyboard

keyboard void processVideo(); void playVideo();

playVideo(); int main() {

{

    //create GUI windows
 namedWindow("Frame");
 processVideo();

 //destroy GUI windows
 destroyAllWindows();
 return EXIT_SUCCESS;

}

} void playVideo(){ VideoCapture cap("A.avi"); Mat myframe;

myframe;

    if (!cap.isOpened()) {
     cout << "Cannot open the video file on C++ API" << std::endl;
     exit(EXIT_FAILURE);
}

    }

    for (;;) {
     cap >> myframe;
     if (myframe.empty())
         break;
     imshow("Video Frame", myframe);
     int c = waitKey(10);
     if ((char)c == 27) { break; }
}
    }
    cap.release();

}

} void processVideo() { Mat dst;

dst;

    //create the capture object
 VideoCapture cap(0);
 //open capture
 if (!cap.isOpened()){
     cout << "Open camera failed";
     exit(EXIT_FAILURE);
}

    }

    //read input data. ESC or 'q' for quitting
 while ((char)keyboard != 'q' && (char)keyboard != 27){
     //read the current frame
     if (!cap.read(dst)) {
         cerr << "Unable to read next frame." << endl;
         cerr << "Exiting..." << endl;
         exit(EXIT_FAILURE);
    }

    }

        flip(dst, frame, 1);   //something image processing

     if (condition is true){
         thread mThread(playVideo);
         // wait the thread stop
         mThread.join();
    }

    }

        //show the current frame and the fg masks
     imshow("Frame", frame);

     //get the input from the keyboard
     keyboard = waitKey(30);
}

    }

    //delete capture object
 cap.release();
}

}