// 更新当前播放的视频路径
currentVideoPath_ = targetPath;
-
- // 释放最后一帧截图的内存
- if (hasLastFrame && lastFrameImage.data != nullptr)
- {
- ImageCacheFree(lastFrameImage);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Released last frame image memory");
- }
-
// 清除切换视频标志
g_isSwitchingVideo = false;
// 隐藏最后一帧视图(放到最后,确保新播放器已经完全接管显示)
if (firstFrameReady && lastFrameView_ != nullptr && lastFrameView_->IsVisible())
{
- usleep(200000); // 200ms
- lastFrameView_->SetVisible(false);
- lastFrameView_->Invalidate();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Hidden last frame view, new player first frame rendered");
+
+ //异步隐藏最后一帧视图
+ GraphicService::GetInstance()->PostGraphicEvent([this]() {
+ usleep(200000); // 100ms
+ lastFrameView_->SetVisible(false);
+ lastFrameView_->Invalidate();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Hidden last frame view, new player first frame rendered");
+ });
}
+ // 释放最后一帧截图的内存
+ if (hasLastFrame && lastFrameImage.data != nullptr)
+ {
+ ImageCacheFree(lastFrameImage);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Released last frame image memory");
+ }
+
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Successfully switched to video: %s", uri);
return true;
}
// WebSocket 未连接,不执行操作,避免状态混乱
return;
}
-
- GraphicService::GetInstance()->PostGraphicEvent([]() {
AI_ForceInterrupt();
ln_ws_end_audio_chat();
ln_ws_send_voice_chat_interrupt("新对话开始");
- });
ThunderBirdDialogueView::GetInstance()->IsReconnect = true;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音,跳转到聆听状态");
// 开始录音
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
- ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
+ // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "语音键处理完成");
}
// 停止实际的音频播放
// ai_media_play_stop();
ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: Stopped AI audio playback");
+ // 退出对话模式时恢复表情
+ AI_ForceInterrupt();
+ ln_ws_send_voice_chat_interrupt("退出对话");
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+
+ // 退出对话模式,执行清理
+ ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: Stopped AI audio playback");
// 等待视频切换完成,避免在视频切换过程中退出导致资源冲突
if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::IsSwitchingVideo()) {
ln_ws_end_audio_chat();//结束对话
- // 退出对话模式时恢复表情
- AI_ForceInterrupt();
- ln_ws_send_voice_chat_interrupt("退出对话");
+
// 检查绑定状态,如果未绑定则跳转到 THUNDERBIRD_GUIDEVIEW_5
if (!ThunderBirdModel::GetInstance()->getbind_status()) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备未绑定,跳转到 THUNDERBIRD_GUIDEVIEW_5");
- // 退出对话模式,执行清理
- ThunderBirdModel::GetInstance()->OnExitDialogueMode();
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
} else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备已绑定,跳转到 THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW");
// 退出对话模式,执行清理(无论从哪个子状态退出都需要清理)
- ThunderBirdModel::GetInstance()->OnExitDialogueMode();
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
}
LN_WS_DEBUG("Sending VoiceChatInterrupt: %s\n", json_string);
// 发送消息
- int ret = uapi_ws_send_text(json_string);
// 清理资源
- cJSON_free(json_string);
- cJSON_Delete(json);
-
- if (ret == 0) {
- LN_WS_DEBUG("VoiceChatInterrupt sent successfully\n");
-
- if (need_reconnect || (g_audio_chat_ctx.finish_state == LN_CHAT_SENT_END_NO_REPLY)) {
- // 如果检测到频繁数据接收,直接重连
- LN_WS_INFO("Triggering reconnection due to frequent binary data reception\n");
- if (ln_ws_reconnect() != 0) {
- LN_WS_ERROR("Failed to reconnect after frequent data reception\n");
+ int ret=0;
+ if (need_reconnect || (g_audio_chat_ctx.finish_state == LN_CHAT_SENT_END_NO_REPLY))
+ {
+ ret = uapi_ws_send_text(json_string);
+ if (ret == 0) {
+ LN_WS_DEBUG("VoiceChatInterrupt sent successfully\n");
+ {
+ // 如果检测到频繁数据接收,直接重连
+ LN_WS_INFO("Triggering reconnection due to frequent binary data reception\n");
+ if (ln_ws_reconnect() != 0) {
+ LN_WS_ERROR("Failed to reconnect after frequent data reception\n");
+ }
}
- }
- } else {
- LN_WS_ERROR("Failed to send VoiceChatInterrupt\n");
+ }
}
-
+ else {
+ LN_WS_INFO("no to send VoiceChatInterrupt\n");
+ }
+ cJSON_free(json_string);
+ cJSON_Delete(json);
+
return ret;
}