OSX+Radeon crash VideoDataBuffer.convert YCbCr_422 -> BGRA_PRE

Chris Newland cnewland at chrisnewland.com
Wed May 25 08:10:46 UTC 2016


This is really just an FYI as I'm doing funky stuff with multiple
MediaPlayers and using the deprecated impl_getLatestFrame() method to grab

I can grab frames fine with a single MediaPlayer instance but when I use
multiple MediaPlayer objects each with an AnimationTimer calling this

	public void snapshotVideo()
		VideoDataBuffer buf = player.impl_getLatestFrame();

		if (buf != null)
			VideoFormat newFormat = VideoFormat.BGRA_PRE;
			buf = buf.convertToFormat(newFormat);

			ByteBuffer bb =

			int pixel = 0;

			int max = bb.remaining() / 4;

			for (int i = 0; i < max; i++)
				rawFrameData[pixel++] = bb.getInt();


then it crashes hard on OSX El Capitan with AMD Radeon HD 6970M with this

I'm guessing the native frame conversion from YCbCr_422 to BGRA_PRE is not
thread-safe but some naive attempts to lock around this haven't solved the

This same code + videos works fine on a MacBook Pro with Intel Iris
graphics so it's a tiny hardware+OS corner case but thought it might be
worth a mention.

The only thing I'd add is that I'd love to have an official API for
grabbing single frames from video. I've been doing some cool real-time
video effects in JavaFX and it's a shame to have to use a deprecated
method which will probably go away.



More information about the openjfx-dev mailing list