27
27
# include " platform/android/jni/JniHelper.h"
28
28
29
29
extern " C" {
30
- JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeHandleEvent (JNIEnv* env, jclass, jlong pME, int arg1)
30
+ JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeFireEvent (JNIEnv* env, jclass, jlong pME, int arg1)
31
31
{
32
32
auto mediaEngine = (ax::AndroidMediaEngine*)((uintptr_t )pME);
33
33
if (!mediaEngine)
34
34
return ;
35
35
36
- mediaEngine->fireMediaEvent ((ax::MEMediaEventType)arg1);
36
+ mediaEngine->_fireMediaEvent ((ax::MEMediaEventType)arg1);
37
37
}
38
- JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeHandleVideoSample (JNIEnv* env,
39
- jclass,
40
- jlong pME,
41
- jobject sampleBuffer,
42
- int sampleLen,
43
- int outputX,
44
- int outputY,
45
- int videoX,
46
- int videoY,
47
- int rotation,
48
- int videoPF)
38
+
39
+ JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeStoreVideoMeta (JNIEnv* env,
40
+ jclass,
41
+ jlong pME,
42
+ int outputX,
43
+ int outputY,
44
+ int videoX,
45
+ int videoY,
46
+ int cbcrOffset,
47
+ int rotation,
48
+ int videoPF)
49
+ {
50
+ auto mediaEngine = (ax::AndroidMediaEngine*)((uintptr_t )pME);
51
+ if (!mediaEngine)
52
+ return ;
53
+
54
+ mediaEngine->_storeVideoMeta (outputX, outputY, videoX, videoY, cbcrOffset, rotation, videoPF);
55
+ }
56
+
57
+ JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeStoreLastVideoSample (JNIEnv* env,
58
+ jclass,
59
+ jlong pME,
60
+ jobject sampleBuffer,
61
+ int sampleLen)
49
62
{
50
63
auto mediaEngine = (ax::AndroidMediaEngine*)((uintptr_t )pME);
51
64
if (!mediaEngine)
52
65
return ;
53
66
54
67
auto sampleData = static_cast <uint8_t *>(env->GetDirectBufferAddress (sampleBuffer));
55
68
56
- mediaEngine->handleVideoSample (sampleData, sampleLen, outputX, outputY, videoX, videoY, rotation, videoPF );
69
+ mediaEngine->_storeLastVideoSample (sampleData, sampleLen);
57
70
}
58
71
59
- JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeSetDuration (JNIEnv* env,
60
- jclass,
61
- jlong pME,
62
- double duration)
72
+ JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeStoreDuration (JNIEnv* env,
73
+ jclass,
74
+ jlong pME,
75
+ double duration)
63
76
{
64
77
auto mediaEngine = (ax::AndroidMediaEngine*)((uintptr_t )pME);
65
78
if (!mediaEngine)
66
79
return ;
67
80
68
- mediaEngine->updateDuration (duration);
81
+ mediaEngine->_storeDuration (duration);
69
82
}
70
83
71
- JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeSetCurrentTime (JNIEnv* env,
72
- jclass,
73
- jlong pME,
74
- double currentTime)
84
+ JNIEXPORT void JNICALL Java_org_axmol_lib_AxmolMediaEngine_nativeStoreCurrentTime (JNIEnv* env,
85
+ jclass,
86
+ jlong pME,
87
+ double currentTime)
75
88
{
76
89
auto mediaEngine = (ax::AndroidMediaEngine*)((uintptr_t )pME);
77
90
if (!mediaEngine)
78
91
return ;
79
92
80
- mediaEngine->updateCurrentTime (currentTime);
93
+ mediaEngine->_storeCurrentTime (currentTime);
81
94
}
82
95
}
83
96
84
97
NS_AX_BEGIN
85
98
86
- static const char * className = " org.axmol.lib.AxmolMediaEngine" ;
99
+ static const char * className = " org.axmol.lib.AxmolMediaEngine" ;
87
100
88
101
AndroidMediaEngine::AndroidMediaEngine ()
89
102
{
@@ -161,8 +174,9 @@ bool AndroidMediaEngine::transferVideoFrame()
161
174
162
175
auto & buffer = _frameBuffer2;
163
176
164
- ax::MEVideoFrame frame{buffer.data (), buffer.data () + _outputDim.x * _outputDim.y , buffer.size (),
165
- ax::MEVideoPixelDesc{static_cast <ax::MEVideoPixelFormat>(_videoPF), _outputDim}, _videoDim};
177
+ ax::MEVideoFrame frame{buffer.data (), buffer.data () + _cbcrOffset, buffer.size (),
178
+ ax::MEVideoPixelDesc{static_cast <ax::MEVideoPixelFormat>(_videoPF), _outputDim},
179
+ _videoDim};
166
180
frame._vpd ._rotation = _videoRotation;
167
181
assert (static_cast <int >(frame._dataLen ) >= frame._vpd ._dim .x * frame._vpd ._dim .y * 3 / 2 );
168
182
_onVideoFrame (frame);
@@ -173,23 +187,29 @@ bool AndroidMediaEngine::transferVideoFrame()
173
187
return false ;
174
188
}
175
189
176
- void AndroidMediaEngine::handleVideoSample (const uint8_t * buf,
177
- size_t len,
178
- int outputX,
179
- int outputY,
180
- int videoX,
181
- int videoY,
182
- int rotation,
183
- int videoPF)
190
+ void AndroidMediaEngine::_storeVideoMeta (int outputX,
191
+ int outputY,
192
+ int videoX,
193
+ int videoY,
194
+ int cbcrOffset,
195
+ int rotation,
196
+ int videoPF)
184
197
{
185
- std::unique_lock<std::mutex> lck (_frameBuffer1Mtx);
186
- _frameBuffer1.assign (buf, buf + len);
187
198
_outputDim.set (outputX, outputY);
188
199
_videoDim.set (videoX, videoY);
200
+ _cbcrOffset = cbcrOffset;
189
201
_videoRotation = rotation;
190
202
_videoPF = videoPF;
191
203
}
192
204
205
+
206
+ void AndroidMediaEngine::_storeLastVideoSample (const uint8_t * buf, size_t len)
207
+ {
208
+ std::unique_lock<std::mutex> lck (_frameBuffer1Mtx);
209
+ _frameBuffer1.assign (buf, buf + len);
210
+ }
211
+
212
+ // } // namespace ax
193
213
NS_AX_END
194
214
195
215
#endif
0 commit comments