1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #pragma once 4 5 #include <jni.h> 6 #include <fbjni/fbjni.h> 7 8 #include <memory> 9 10 namespace expo { 11 namespace av { 12 13 namespace jni = facebook::jni; 14 15 using SampleBufferCallback = std::function<void(jni::local_ref<jni::JArrayByte>, double)>; 16 17 class JPlayerData : public jni::HybridClass<JPlayerData> { 18 public: 19 static auto constexpr kJavaDescriptor = "Lexpo/modules/av/player/PlayerData;"; 20 static auto constexpr TAG = "JPlayerData"; 21 22 static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis); 23 24 static void registerNatives(); 25 26 void setSampleBufferCallback(const SampleBufferCallback &&sampleBufferCallback); 27 28 void unsetSampleBufferCallback(); 29 30 private: 31 friend HybridBase; 32 jni::global_ref<JPlayerData::javaobject> javaPart_; 33 SampleBufferCallback sampleBufferCallback_; 34 35 void 36 sampleBufferCallback(jni::alias_ref<jni::JArrayByte> sampleBuffer, jdouble positionSeconds); 37 38 void setEnableSampleBufferCallback(bool enable); 39 JPlayerData(jni::alias_ref<jhybridobject> jThis)40 explicit JPlayerData(jni::alias_ref<jhybridobject> jThis) : 41 javaPart_(jni::make_global(jThis)), 42 sampleBufferCallback_(nullptr) {} 43 }; 44 45 } // namespace av 46 } // namespace expo 47