У меня есть приложение, которое я написал в android studio, которое захватывает изображения с помощью функции обратного вызова onPreviewFrame (), в котором я отправляю изображение в мой класс Communicator, который является потоком, который связывается с моим python сервером, который на моем компьютере. Моя проблема в том, что серверу требуется время для обработки каждого изображения, поэтому я хочу отправить только самое обновленное изображение, затем дождаться ответа и затем отправить самое обновленное изображение и т. Д. c. Проблема в том, что функция put () очереди Blocking ожидает, пока в очереди блокировки не будет свободного места, но я хочу выбросить изображение, если места нет (емкость очереди = 1).
Я сделал это:
Функция onPreviewFrame для получения изображений:
public void onPreviewFrame(byte[] data, Camera camera) {
try{
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
size.width, size.height, null);
if(queue.isEmpty())
queue.put(image);
}catch (InterruptedException e){
Log.e("mydebug", e.getMessage());
}
}
Функция коммуникатора run ():
while(true){
try{
if (!queue.isEmpty())
this.sendmsg(queue.peek());
ans = receive_message();
if (ans.get("data").equals("True"))
beeper.startTone(ToneGenerator.TONE_CDMA_HIGH_PBX_L, 250);
this.queue.clear();
}catch (Exception e){
Log.e("mydebug", e.getMessage());
}
}
Моя проблема в том, что по какой-то причине сервер не получает никаких изображений, когда я запускаю этот код. Но когда я запускаю его с точкой останова, она работает!