1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef JavaCallbacksSupport_h_ 6 #define JavaCallbacksSupport_h_ 7 8 #include "MediaResult.h" 9 #include "MediaCodec.h" 10 #include "mozilla/java/CodecProxyNatives.h" 11 #include "mozilla/java/SampleBufferWrappers.h" 12 #include "mozilla/java/SampleWrappers.h" 13 14 namespace mozilla { 15 16 class JavaCallbacksSupport 17 : public java::CodecProxy::NativeCallbacks::Natives<JavaCallbacksSupport> { 18 public: 19 typedef java::CodecProxy::NativeCallbacks::Natives<JavaCallbacksSupport> Base; 20 using Base::AttachNative; 21 using Base::DisposeNative; 22 using Base::GetNative; 23 JavaCallbacksSupport()24 JavaCallbacksSupport() : mCanceled(false) {} 25 ~JavaCallbacksSupport()26 virtual ~JavaCallbacksSupport() {} 27 28 virtual void HandleInput(int64_t aTimestamp, bool aProcessed) = 0; 29 OnInputStatus(jlong aTimestamp,bool aProcessed)30 void OnInputStatus(jlong aTimestamp, bool aProcessed) { 31 if (!mCanceled) { 32 HandleInput(aTimestamp, aProcessed); 33 } 34 } 35 36 virtual void HandleOutput(java::Sample::Param aSample, 37 java::SampleBuffer::Param aBuffer) = 0; 38 OnOutput(jni::Object::Param aSample,jni::Object::Param aBuffer)39 void OnOutput(jni::Object::Param aSample, jni::Object::Param aBuffer) { 40 if (!mCanceled) { 41 HandleOutput(java::Sample::Ref::From(aSample), 42 java::SampleBuffer::Ref::From(aBuffer)); 43 } 44 } 45 HandleOutputFormatChanged(java::sdk::MediaFormat::Param aFormat)46 virtual void HandleOutputFormatChanged( 47 java::sdk::MediaFormat::Param aFormat){}; 48 OnOutputFormatChanged(jni::Object::Param aFormat)49 void OnOutputFormatChanged(jni::Object::Param aFormat) { 50 if (!mCanceled) { 51 HandleOutputFormatChanged(java::sdk::MediaFormat::Ref::From(aFormat)); 52 } 53 } 54 55 virtual void HandleError(const MediaResult& aError) = 0; 56 OnError(bool aIsFatal)57 void OnError(bool aIsFatal) { 58 if (!mCanceled) { 59 HandleError(aIsFatal 60 ? MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR, __func__) 61 : MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, __func__)); 62 } 63 } 64 Cancel()65 void Cancel() { mCanceled = true; } 66 67 private: 68 Atomic<bool> mCanceled; 69 }; 70 71 } // namespace mozilla 72 73 #endif 74