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,
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) {
// 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);
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_; }