1*e712b0bcSBartłomiej Klocek // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2*e712b0bcSBartłomiej Klocek 3*e712b0bcSBartłomiej Klocek #include "JPlayerData.h" 4*e712b0bcSBartłomiej Klocek 5*e712b0bcSBartłomiej Klocek #include <jni.h> 6*e712b0bcSBartłomiej Klocek #include <fbjni/fbjni.h> 7*e712b0bcSBartłomiej Klocek 8*e712b0bcSBartłomiej Klocek #include <memory> 9*e712b0bcSBartłomiej Klocek #include <string> 10*e712b0bcSBartłomiej Klocek 11*e712b0bcSBartłomiej Klocek namespace expo { 12*e712b0bcSBartłomiej Klocek namespace av { 13*e712b0bcSBartłomiej Klocek 14*e712b0bcSBartłomiej Klocek namespace jni = facebook::jni; 15*e712b0bcSBartłomiej Klocek 16*e712b0bcSBartłomiej Klocek jni::local_ref<JPlayerData::jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis)17*e712b0bcSBartłomiej Klocek JPlayerData::initHybrid(jni::alias_ref<jhybridobject> jThis) { 18*e712b0bcSBartłomiej Klocek return makeCxxInstance(jThis); 19*e712b0bcSBartłomiej Klocek } 20*e712b0bcSBartłomiej Klocek registerNatives()21*e712b0bcSBartłomiej Klocek void JPlayerData::registerNatives() { 22*e712b0bcSBartłomiej Klocek registerHybrid({ 23*e712b0bcSBartłomiej Klocek makeNativeMethod("initHybrid", JPlayerData::initHybrid), 24*e712b0bcSBartłomiej Klocek makeNativeMethod("sampleBufferCallback", JPlayerData::sampleBufferCallback), 25*e712b0bcSBartłomiej Klocek }); 26*e712b0bcSBartłomiej Klocek } 27*e712b0bcSBartłomiej Klocek sampleBufferCallback(jni::alias_ref<jni::JArrayByte> sampleBuffer,jdouble positionSeconds)28*e712b0bcSBartłomiej Klocek void JPlayerData::sampleBufferCallback(jni::alias_ref<jni::JArrayByte> sampleBuffer, 29*e712b0bcSBartłomiej Klocek jdouble positionSeconds) { 30*e712b0bcSBartłomiej Klocek if (sampleBufferCallback_ == nullptr) { 31*e712b0bcSBartłomiej Klocek __android_log_write(ANDROID_LOG_WARN, TAG, "Sample Buffer Callback is null!"); 32*e712b0bcSBartłomiej Klocek setEnableSampleBufferCallback(false); 33*e712b0bcSBartłomiej Klocek return; 34*e712b0bcSBartłomiej Klocek } 35*e712b0bcSBartłomiej Klocek 36*e712b0bcSBartłomiej Klocek auto sampleBufferStrong = make_local(sampleBuffer); 37*e712b0bcSBartłomiej Klocek try { 38*e712b0bcSBartłomiej Klocek sampleBufferCallback_(sampleBufferStrong, positionSeconds); 39*e712b0bcSBartłomiej Klocek } catch (const std::exception &exception) { 40*e712b0bcSBartłomiej Klocek auto message = "Sample Buffer Callback threw an error! " + std::string(exception.what()); 41*e712b0bcSBartłomiej Klocek __android_log_write(ANDROID_LOG_ERROR, TAG, message.c_str()); 42*e712b0bcSBartłomiej Klocek } 43*e712b0bcSBartłomiej Klocek } 44*e712b0bcSBartłomiej Klocek setEnableSampleBufferCallback(bool enable)45*e712b0bcSBartłomiej Klocek void JPlayerData::setEnableSampleBufferCallback(bool enable) { 46*e712b0bcSBartłomiej Klocek if (enable) { 47*e712b0bcSBartłomiej Klocek __android_log_write(ANDROID_LOG_INFO, TAG, "Enabling Sample Buffer Callback..."); 48*e712b0bcSBartłomiej Klocek } else { 49*e712b0bcSBartłomiej Klocek __android_log_write(ANDROID_LOG_INFO, TAG, "Disabling Sample Buffer Callback..."); 50*e712b0bcSBartłomiej Klocek } 51*e712b0bcSBartłomiej Klocek static const auto javaMethod = javaPart_->getClass()->getMethod<void(bool)>( 52*e712b0bcSBartłomiej Klocek "setEnableSampleBufferCallback"); 53*e712b0bcSBartłomiej Klocek javaMethod(javaPart_.get(), enable); 54*e712b0bcSBartłomiej Klocek } 55*e712b0bcSBartłomiej Klocek setSampleBufferCallback(const SampleBufferCallback && sampleBufferCallback)56*e712b0bcSBartłomiej Klocek void JPlayerData::setSampleBufferCallback(const SampleBufferCallback &&sampleBufferCallback) { 57*e712b0bcSBartłomiej Klocek sampleBufferCallback_ = sampleBufferCallback; 58*e712b0bcSBartłomiej Klocek setEnableSampleBufferCallback(true); 59*e712b0bcSBartłomiej Klocek } 60*e712b0bcSBartłomiej Klocek unsetSampleBufferCallback()61*e712b0bcSBartłomiej Klocek void JPlayerData::unsetSampleBufferCallback() { 62*e712b0bcSBartłomiej Klocek sampleBufferCallback_ = nullptr; 63*e712b0bcSBartłomiej Klocek setEnableSampleBufferCallback(false); 64*e712b0bcSBartłomiej Klocek } 65*e712b0bcSBartłomiej Klocek 66*e712b0bcSBartłomiej Klocek } // namespace av 67*e712b0bcSBartłomiej Klocek } // namespace expo 68