@superdude wrote:
Hi there.
I'm having incredibly painful problems loading frames of a video into a vector called eventFrames.
I have pasted the whole function below, and I get a bad access error at this line:
currentPixelsWithAlpha[pixel * 4 ] = 255 - currentPixelsNoAlpha[pixel * 3 ];
It would seem that when I assign the 'currentPixelsNoAlpha' array with the below function the array == null
mainFrames->getPixels();
This line:
cout << mainFrames->isLoaded() << ", init: " << mainFrames->isInitialized() << endl;
Outputs this:
"0, init: 0"However the load() method for mainFrames gives me this output in the output so I'm inclined to think the video was loaded correctly:
"2016-02-01 23:57:09.672 timelineDebug[2036:87179] video loaded at 320 x 240 @ 30.099001 fps"I think I might be experiencing similar problems to this thread, but I am really unsure on how to proceed. The advice at the end of the thread is to switch to 0.8.4, but I'd like to avoid that if I can. Any thoughts from you wiser folk would be massively appreciated - thanks for taking the time to read this too.
Superdude / Leon
EDIT: just note as well this is called during ofApp::setup()
// this function generates the frames to be manipulated taken from main video track bool Event::generateFrames(ofxTLVideoTrack* _mainVideo, unsigned long _framesBegin, unsigned long _framesEnd) { // get pointer to main video track //std::shared_ptr<ofVideoPlayer> mainFrames = _mainVideo->getPlayer(); std::shared_ptr<ofVideoPlayer> mainFrames = make_shared<ofVideoPlayer>(); mainFrames->load(ofToDataPath("fingers.mov")); // check it is not null and not out of bounds if (mainFrames != NULL && _framesEnd < mainFrames->getTotalNumFrames()) { // set size of event frames eventFrames.resize(_framesEnd - _framesBegin); unsigned long eventFramesIndex = 0; unsigned int main_width = floor(mainFrames->getWidth()); unsigned int main_height = floor(mainFrames->getHeight()); // current frame's pixels with room for an alpha value unsigned char * currentPixelsWithAlpha = new unsigned char[main_width * main_height * 4]; unsigned int totalPixels = main_width * main_height; // we will fill this with pixels later in the for loop ofPixels temp; // set the beginning frame mainFrames->setFrame(_framesBegin); cout << mainFrames->isLoaded() << ", init: " << mainFrames->isInitialized() << endl; // grab frames from main video, from the bounds specified for (unsigned long mainFrameIndex = _framesBegin; mainFrameIndex < _framesEnd; ++mainFrameIndex) { // allocate space temp.allocate(main_width, main_height, OF_IMAGE_COLOR_ALPHA); // get current frame from main main video using for loop's index mainFrames->nextFrame(); // get the current frames pixels unsigned char * currentPixelsNoAlpha = mainFrames->getPixels(); // loop through the pixels and convert to alpha pixels at pixel level for (int pixel = 0; pixel < totalPixels; ++pixel) { currentPixelsWithAlpha[pixel * 4 ] = 255 - currentPixelsNoAlpha[pixel * 3 ]; currentPixelsWithAlpha[pixel * 4 + 1] = 255 - currentPixelsNoAlpha[pixel * 3 + 1]; currentPixelsWithAlpha[pixel * 4 + 2] = 255 - currentPixelsNoAlpha[pixel * 3 + 2]; currentPixelsWithAlpha[pixel * 4 + 3] = 255; } // fill 'temp' with pixels array temp.setFromPixels(currentPixelsWithAlpha, mainFrames->getWidth(), mainFrames->getHeight(), OF_IMAGE_COLOR_ALPHA); // push to the back of the deque eventFrames[eventFramesIndex] = temp; // increment event frames eventFramesIndex++; // ensure clearance of pixels temp.clear(); } return true; } else { return false; } }
`
Posts: 1
Participants: 1