1+ diff --git a/mediapipe/framework/deps/BUILD b/mediapipe/framework/deps/BUILD
2+ index 2dc600ada..953e12127 100644
3+ --- a/mediapipe/framework/deps/BUILD
4+ +++ b/mediapipe/framework/deps/BUILD
5+ @@ -114,6 +114,10 @@ cc_library(
6+ name = "platform_strings",
7+ srcs = ["platform_strings.cc"],
8+ hdrs = ["platform_strings.h"],
9+ + local_defines = select({
10+ + "@platforms//os:windows": ["UNICODE"],
11+ + "//conditions:default": [],
12+ + }),
13+ visibility = ["//visibility:public"],
14+ )
15+
16+ diff --git a/mediapipe/framework/deps/platform_strings.cc b/mediapipe/framework/deps/platform_strings.cc
17+ index fa8f3c791..e053d549f 100644
18+ --- a/mediapipe/framework/deps/platform_strings.cc
19+ +++ b/mediapipe/framework/deps/platform_strings.cc
20+ @@ -26,21 +26,21 @@ std::string FormatLastError() {
21+ return std::string("(no error reported)");
22+ }
23+
24+ - LPSTR message_buffer = nullptr;
25+ - DWORD size = FormatMessage(
26+ + LPWSTR message_buffer = nullptr;
27+ + DWORD size = FormatMessageW(
28+ /*dwFlags=*/(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
29+ FORMAT_MESSAGE_IGNORE_INSERTS),
30+ /*lpSource=*/NULL,
31+ /*dwMessageId=*/message_id,
32+ /*dwLanguageId=*/MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
33+ - /*lpBuffer=*/(LPSTR)&message_buffer,
34+ + /*lpBuffer=*/reinterpret_cast<LPWSTR>(&message_buffer),
35+ /*nSize=*/0,
36+ /*Arguments=*/NULL);
37+ if (size == 0) {
38+ return "(error while trying to format the error message)";
39+ }
40+
41+ - std::string message(message_buffer, size);
42+ + std::wstring message(message_buffer, size);
43+ LocalFree(message_buffer);
44+ return NativeToUtf8(message);
45+ }
146diff --git a/mediapipe/framework/output_stream_handler.cc b/mediapipe/framework/output_stream_handler.cc
2- index e27d1c68..55f2f3bd 100644
47+ index e27d1c688..55f2f3bd3 100644
348--- a/mediapipe/framework/output_stream_handler.cc
449+++ b/mediapipe/framework/output_stream_handler.cc
550@@ -143,9 +143,7 @@ OutputStreamHandler::GetMonitoringInfo() {
@@ -14,7 +59,7 @@ index e27d1c68..55f2f3bd 100644
1459 return monitoring_info_vector;
1560 }
1661diff --git a/mediapipe/framework/port/opencv_core_inc.h b/mediapipe/framework/port/opencv_core_inc.h
17- index 12862472..1a409417 100644
62+ index 128624725..1a4094173 100644
1863--- a/mediapipe/framework/port/opencv_core_inc.h
1964+++ b/mediapipe/framework/port/opencv_core_inc.h
2065@@ -20,7 +20,7 @@
@@ -26,8 +71,49 @@ index 12862472..1a409417 100644
2671 #include <opencv2/cvconfig.h>
2772 #endif
2873
74+ diff --git a/mediapipe/tasks/cc/core/BUILD b/mediapipe/tasks/cc/core/BUILD
75+ index 9c53dcca7..bd283bf08 100644
76+ --- a/mediapipe/tasks/cc/core/BUILD
77+ +++ b/mediapipe/tasks/cc/core/BUILD
78+ @@ -57,7 +57,12 @@ cc_library(
79+ name = "external_file_handler",
80+ srcs = ["external_file_handler.cc"],
81+ hdrs = ["external_file_handler.h"],
82+ + local_defines = select({
83+ + "@platforms//os:windows": ["UNICODE"],
84+ + "//conditions:default": [],
85+ + }),
86+ deps = [
87+ + "//mediapipe/framework/deps:platform_strings",
88+ "//mediapipe/framework/port:integral_types",
89+ "//mediapipe/framework/port:status",
90+ "//mediapipe/tasks/cc:common",
91+ diff --git a/mediapipe/tasks/cc/core/external_file_handler.cc b/mediapipe/tasks/cc/core/external_file_handler.cc
92+ index 069b904e9..d8b5e0364 100644
93+ --- a/mediapipe/tasks/cc/core/external_file_handler.cc
94+ +++ b/mediapipe/tasks/cc/core/external_file_handler.cc
95+ @@ -40,6 +40,7 @@ limitations under the License.
96+ #include "absl/strings/match.h"
97+ #include "absl/strings/str_format.h"
98+ #include "absl/strings/string_view.h"
99+ + #include "mediapipe/framework/deps/platform_strings.h"
100+ #include "mediapipe/framework/port/status_macros.h"
101+ #include "mediapipe/tasks/cc/common.h"
102+ #include "mediapipe/tasks/cc/core/proto/external_file.pb.h"
103+ @@ -124,7 +125,11 @@ absl::Status ExternalFileHandler::MapExternalFile() {
104+ if (!external_file_.file_name().empty()) {
105+ MP_ASSIGN_OR_RETURN(std::string file_name,
106+ PathToResourceAsFile(external_file_.file_name()));
107+ + #ifdef _WIN32
108+ + owned_fd_ = _wopen(Utf8ToNative(file_name).c_str(), O_RDONLY | O_BINARY);
109+ + #else
110+ owned_fd_ = open(file_name.c_str(), O_RDONLY | O_BINARY);
111+ + #endif
112+ if (owned_fd_ < 0) {
113+ const std::string error_message = absl::StrFormat(
114+ "Unable to open file at %s", external_file_.file_name());
29115diff --git a/mediapipe/tasks/cc/core/task_api_factory.h b/mediapipe/tasks/cc/core/task_api_factory.h
30- index a11a23fc..dbb5fe6c 100644
116+ index a11a23fcf..dbb5fe6ca 100644
31117--- a/mediapipe/tasks/cc/core/task_api_factory.h
32118+++ b/mediapipe/tasks/cc/core/task_api_factory.h
33119@@ -76,15 +76,17 @@ class TaskApiFactory {
@@ -50,7 +136,7 @@ index a11a23fc..dbb5fe6c 100644
50136 std::move(graph_config), std::move(resolver),
51137 std::move(packets_callback), std::move(default_executor),
52138diff --git a/mediapipe/tasks/cc/vision/holistic_landmarker/holistic_landmarker_graph.cc b/mediapipe/tasks/cc/vision/holistic_landmarker/holistic_landmarker_graph.cc
53- index 2ff140c0..128a4326 100644
139+ index 2ff140c07..128a43263 100644
54140--- a/mediapipe/tasks/cc/vision/holistic_landmarker/holistic_landmarker_graph.cc
55141+++ b/mediapipe/tasks/cc/vision/holistic_landmarker/holistic_landmarker_graph.cc
56142@@ -387,6 +387,13 @@ class HolisticLandmarkerGraph : public core::ModelTaskGraph {
0 commit comments