[WebAI] Handle video process failed case 95/317395/3
authorpeng.yin <peng8.yin@samsung.com>
Mon, 9 Sep 2024 07:30:24 +0000 (15:30 +0800)
committerBot Blink <blinkbot@samsung.com>
Tue, 10 Sep 2024 01:39:12 +0000 (01:39 +0000)
xrfw may skip some frames as blur image performance limitation, it
will casuse the xr_adapter_error_type_e result in the callback be
|XR_ADAPTER_ERROR_PROCESS_FAIL|, web side need to handle this case
as well.

Change-Id: I16e5a8702bb9b1873c8d5337c25ea3602cdc4cef
Signed-off-by: peng.yin <peng8.yin@samsung.com>
tizen_src/chromium_impl/webai/content/ai_processor_video_impl.cc
tizen_src/chromium_impl/webai/content/ai_processor_video_impl.h

index dc532f282c701a5359e814698d762aca161d2063..e253496c814f556ea1a52ddcac8ef5e786e49d70 100644 (file)
@@ -15,7 +15,7 @@ static void XrFrameReadyCb(media_packet_h output_buffer,
   auto* impl = static_cast<content::AiProcessorVideoImpl*>(user_data);
   impl->get_runner()->PostTask(
       FROM_HERE, base::BindOnce(&content::AiProcessorVideoImpl::OnProcessOutput,
-                                base::Unretained(impl), output_buffer));
+                                base::Unretained(impl), output_buffer, error));
 }
 
 std::string AiVideoModelToJsonString(const blink::AiVideoModel& model,
@@ -159,8 +159,8 @@ std::shared_ptr<AiVideoFrameBuffer> AiProcessorVideoImpl::FindReusableBuffer(
   return buffer_pool_->FindReusableBuffer(packet);
 }
 
-void AiProcessorVideoImpl::OnProcessOutput(media_packet_h output_packet) {
-  AI_LOG(INFO) << __func__ << " packet:" << output_packet;
+void AiProcessorVideoImpl::OnProcessOutput(media_packet_h output_packet,
+                                           xr_adapter_error_type_e error) {
   TRACE_EVENT0("webai", "AiProcessorVideoImpl::OnProcessOutput");
   auto output_buffer = FindReusableBuffer(output_packet);
   if (!output_buffer) {
@@ -171,6 +171,12 @@ void AiProcessorVideoImpl::OnProcessOutput(media_packet_h output_packet) {
   // Release input buffer
   output_buffer->RunInputBufferReleaseCb();
 
+  if (error != XR_ADAPTER_ERROR_NONE) {
+    AI_LOG(ERROR) << "Process video frame failed.";
+    buffer_pool_->ReturnBuffer(std::move(output_buffer));
+    return;
+  }
+
   // Generate Tbm handle from output buffer
   auto tbm_buffer_handle = output_buffer->GenerateTbmHandleFromBuffer();
   tbm_buffer_handle.media_packet = reinterpret_cast<size_t>(output_packet);
index 68c277098db68b3c97b7a5c5e7f9ad66877ad72b..bb65e9016a315768f57efff2864bacde006e040c 100644 (file)
@@ -46,7 +46,8 @@ class CONTENT_EXPORT AiProcessorVideoImpl final
   void Stop() override;
 
   std::shared_ptr<AiVideoFrameBuffer> FindReusableBuffer(media_packet_h packet);
-  void OnProcessOutput(media_packet_h output_packet);
+  void OnProcessOutput(media_packet_h output_packet,
+                       xr_adapter_error_type_e error);
   auto get_runner() const { return task_runner_; }
   auto const& get_client() const { return client_; }