Created
February 24, 2022 12:46
-
-
Save ozcanzaferayan/01d794df10f71be78285c4b88d1412c9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "FrameHostObject.h" | |
#import <Foundation/Foundation.h> | |
#import <jsi/jsi.h> | |
// This method returns all of keys | |
std::vector<jsi::PropNameID> FrameHostObject::getPropertyNames(jsi::Runtime& rt) { | |
std::vector<jsi::PropNameID> result; | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("toString"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("isValid"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("width"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("height"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("bytesPerRow"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("planesCount"))); | |
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("close"))); | |
return result; | |
} | |
// Returns a value based on propName'e | |
jsi::Value FrameHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& propName) { | |
auto name = propName.utf8(runtime); | |
// ... | |
// Returns frame height | |
if (name == "height") { | |
this->assertIsFrameStrong(runtime, name); | |
auto imageBuffer = CMSampleBufferGetImageBuffer(frame.buffer); | |
auto height = CVPixelBufferGetHeight(imageBuffer); | |
return jsi::Value((double) height); | |
} | |
// For returning a function, we need to create host function as follows: | |
if (name == "close") { | |
auto close = [this] (jsi::Runtime& runtime, const jsi::Value&, const jsi::Value*, size_t) -> jsi::Value { | |
if (this->frame == nil) { | |
throw jsi::JSError(runtime, "Trying to close an already closed frame! Did you call frame.close() twice?"); | |
} | |
this->close(); | |
return jsi::Value::undefined(); | |
}; | |
return jsi::Function::createFromHostFunction(runtime, jsi::PropNameID::forUtf8(runtime, "close"), 0, close); | |
} | |
//... | |
return jsi::Value::undefined(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment