Skip to content

Commit

Permalink
fix: constructor should throw if it fails to initialize (#533)
Browse files Browse the repository at this point in the history
  • Loading branch information
homuler committed Apr 17, 2022
1 parent 1c2b34a commit e58408e
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,16 @@ public CalculatorGraph() : base()
this.ptr = ptr;
}

public CalculatorGraph(string textFormatConfig) : base()
{
UnsafeNativeMethods.mp_CalculatorGraph__PKc(textFormatConfig, out var ptr).Assert();
this.ptr = ptr;
}

public CalculatorGraph(byte[] serializedConfig) : base()
private CalculatorGraph(byte[] serializedConfig) : base()
{
UnsafeNativeMethods.mp_CalculatorGraph__PKc_i(serializedConfig, serializedConfig.Length, out var ptr).Assert();
this.ptr = ptr;
}

public CalculatorGraph(CalculatorGraphConfig config) : this(config.ToByteArray()) { }

public CalculatorGraph(string textFormatConfig) : this(CalculatorGraphConfig.Parser.ParseFromTextFormat(textFormatConfig)) { }

protected override void DeleteMpPtr()
{
UnsafeNativeMethods.mp_CalculatorGraph__delete(ptr);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (c) 2021 homuler
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.

using pb = Google.Protobuf;

namespace Mediapipe
{
public static class CalculatorGraphConfigExtension
{
public static CalculatorGraphConfig ParseFromTextFormat(this pb::MessageParser<CalculatorGraphConfig> _, string configText)
{
if (UnsafeNativeMethods.mp_api__ConvertFromCalculatorGraphConfigTextFormat(configText, out var serializedProto))
{
var config = serializedProto.Deserialize(CalculatorGraphConfig.Parser);
serializedProto.Dispose();
return config;
}
throw new MediaPipeException("Failed to parse config text. See error logs for more details");
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ internal static partial class UnsafeNativeMethods
[DllImport(MediaPipeLibrary, ExactSpelling = true)]
public static extern MpReturnCode mp_CalculatorGraph__(out IntPtr graph);

[DllImport(MediaPipeLibrary, ExactSpelling = true)]
public static extern MpReturnCode mp_CalculatorGraph__PKc(string textFormatConfig, out IntPtr graph);

[DllImport(MediaPipeLibrary, ExactSpelling = true)]
public static extern MpReturnCode mp_CalculatorGraph__PKc_i(byte[] serializedConfig, int size, out IntPtr graph);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,6 @@ namespace Mediapipe.Unity
{
public static class CalculatorGraphConfigExtension
{
public static CalculatorGraphConfig ParseFromTextFormat(this pb::MessageParser<CalculatorGraphConfig> _, string configText)
{
if (UnsafeNativeMethods.mp_api__ConvertFromCalculatorGraphConfigTextFormat(configText, out var serializedProto))
{
var config = serializedProto.Deserialize(CalculatorGraphConfig.Parser);
serializedProto.Dispose();
return config;
}
throw new MediaPipeException("Failed to parse config text. See error logs for more details");
}

public static string AddPacketPresenceCalculator(this CalculatorGraphConfig config, string outputStreamName)
{
var presenceStreamName = Tool.GetUnusedStreamName(config, $"{outputStreamName}_presence");
Expand Down
9 changes: 0 additions & 9 deletions mediapipe_api/framework/calculator_graph.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,6 @@ MpReturnCode mp_CalculatorGraph__(mediapipe::CalculatorGraph** graph_out) {

void mp_CalculatorGraph__delete(mediapipe::CalculatorGraph* graph) { delete graph; }

MpReturnCode mp_CalculatorGraph__PKc(const char* text_format_config, mediapipe::CalculatorGraph** graph_out) {
TRY_ALL
mediapipe::CalculatorGraphConfig config;
auto result = google::protobuf::TextFormat::ParseFromString(text_format_config, &config);
*graph_out = result ? new mediapipe::CalculatorGraph(config) : nullptr;
RETURN_CODE(MpReturnCode::Success);
CATCH_ALL
}

MpReturnCode mp_CalculatorGraph__PKc_i(const char* serialized_config, int size, mediapipe::CalculatorGraph** graph_out) {
TRY_ALL
auto config = ParseFromStringAsCalculatorGraphConfig(serialized_config, size);
Expand Down
1 change: 0 additions & 1 deletion mediapipe_api/framework/calculator_graph.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ typedef std::map<std::string, mediapipe::Packet> SidePackets;
typedef absl::Status* NativePacketCallback(mediapipe::CalculatorGraph* graph, int stream_id, const mediapipe::Packet&);

MP_CAPI(MpReturnCode) mp_CalculatorGraph__(mediapipe::CalculatorGraph** graph_out);
MP_CAPI(MpReturnCode) mp_CalculatorGraph__PKc(const char* text_format_config, mediapipe::CalculatorGraph** graph_out);
MP_CAPI(MpReturnCode) mp_CalculatorGraph__PKc_i(const char* serialized_config, int size, mediapipe::CalculatorGraph** graph_out);
MP_CAPI(void) mp_CalculatorGraph__delete(mediapipe::CalculatorGraph* graph);

Expand Down

0 comments on commit e58408e

Please sign in to comment.