两个线程同一把锁,防止读取得数据不完整 取得时候加锁 确保数据取完,读的时候使用通一把锁确保数据读完
private Lock lock = new ReentrantLock();
// 软解 本地回调方法
// @{link startThreads()}
public void onProcessYuvData(final byte[] data, final int width,
final int height) {
lock.lock();
mFrame.height = height;
mFrame.width = width;
mFrame.pix = data;
lock.unlock();
}
/**
* OpenGL渲染画面
*
*/
private void startThreads() {
Thread thread = new Thread() {
public void run() {
glRenderer.update(mFrame.width, mFrame.height);
FrameBean frameBean = new FrameBean();
while (isplay) {
lock.lock();
frameBean.width = mFrame.width;
frameBean.height = mFrame.height;
frameBean.pix = mFrame.pix;
lock.unlock();
if (frameBean.width != 0 || frameBean.height != 0) {
if (frameBean.pix != null && frameBean.width != 0
&& frameBean.height != 0) {
glRenderer.update(frameBean.pix, frameBean.width,
frameBean.height);
}
}
}
}
};
// LoadingDialog.showLoadingDlg(SDLActivity.this, false, "");
thread.start();
}