Tôi đang sử dụng OpenCV để cố gắng thực hiện một số xử lý video trực tiếp. Vì quá trình xử lý khá nặng nên nó làm chậm đáng kể khung hình đầu ra, làm cho luồng trực tiếp bị biến dạng.Android Asynctask để xử lý các khung hình video trực tiếp
Tôi muốn giảm bớt một số quá trình xử lý thành AsyncTask. Tôi đã thử nó và nó thực sự làm cho video mượt mà hơn nhiều. Tuy nhiên, nó kết thúc việc bắt đầu một lượng lớn Công việc cùng một lúc, và sau đó họ sẽ dần dần bắt đầu trở lại với một số kết quả.
Có cách nào để làm chậm điều này xuống và chờ kết quả, bằng cách sử dụng các câu lệnh Đồng bộ hóa hoặc một số phương pháp khác không?
Trên mỗi khung máy ảnh, tôi bắt đầu một trong các tác vụ này. DoImgProcessing thực hiện xử lý dài và trả về một kết quả chuỗi.
private class LongOperation extends AsyncTask<Mat, Void, String> {
@Override
protected String doInBackground(Mat... params) {
Mat inputFrame = params[0];
cropToCenter(inputFrame);
return doImgProcessing(inputFrame);
}
@Override
protected void onPostExecute(String result) {
Log.d(TAG, "on post execute: "+result);
}
@Override
protected void onPreExecute() {
Log.d(TAG, "on pre execute");
}
}
public Mat onCameraFrame(Mat inputFrame) {
inputFrame.copyTo(mRgba);//this will be used for the live stream
LongOperation op = new LongOperation();
op.execute(inputFrame);
return mRgba;
}
Tôi muốn sử dụng một sợi đơn có ngăn chặn để đặt khung vào. – njzk2
Tôi chưa bao giờ viết một trong số này, Id vui lòng chấp nhận câu trả lời của bạn nếu bạn có thể cung cấp mã mẫu dễ vỡ – Jameo