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