Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
0de6bc86
authored
May 20, 2021
by
olly
Committed by
Oliver Woodman
May 20, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Format *_jni.cc files
PiperOrigin-RevId: 374830877
parent
9e4315f4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
88 additions
and
91 deletions
extensions/ffmpeg/src/main/jni/ffmpeg_jni.cc
extensions/flac/src/main/jni/flac_jni.cc
extensions/opus/src/main/jni/opus_jni.cc
extensions/vp9/src/main/jni/vpx_jni.cc
extensions/ffmpeg/src/main/jni/ffmpeg_jni.cc
View file @
0de6bc86
...
@@ -13,9 +13,9 @@
...
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
#include <android/log.h>
#include <jni.h>
#include <jni.h>
#include <stdlib.h>
#include <stdlib.h>
#include <android/log.h>
extern
"C"
{
extern
"C"
{
#ifdef __cplusplus
#ifdef __cplusplus
...
@@ -33,8 +33,8 @@ extern "C" {
...
@@ -33,8 +33,8 @@ extern "C" {
}
}
#define LOG_TAG "ffmpeg_jni"
#define LOG_TAG "ffmpeg_jni"
#define LOGE(...)
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
\
#define LOGE(...) \
__VA_ARGS__))
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
__VA_ARGS__))
#define LIBRARY_FUNC(RETURN_TYPE, NAME, ...) \
#define LIBRARY_FUNC(RETURN_TYPE, NAME, ...) \
extern "C" { \
extern "C" { \
...
@@ -69,7 +69,7 @@ static const int AUDIO_DECODER_ERROR_OTHER = -2;
...
@@ -69,7 +69,7 @@ static const int AUDIO_DECODER_ERROR_OTHER = -2;
/**
/**
* Returns the AVCodec with the specified name, or NULL if it is not available.
* Returns the AVCodec with the specified name, or NULL if it is not available.
*/
*/
AVCodec
*
getCodecByName
(
JNIEnv
*
env
,
jstring
codecName
);
AVCodec
*
getCodecByName
(
JNIEnv
*
env
,
jstring
codecName
);
/**
/**
* Allocates and opens a new AVCodecContext for the specified codec, passing the
* Allocates and opens a new AVCodecContext for the specified codec, passing the
...
@@ -100,7 +100,7 @@ void releaseContext(AVCodecContext *context);
...
@@ -100,7 +100,7 @@ void releaseContext(AVCodecContext *context);
jint
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
{
jint
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
{
JNIEnv
*
env
;
JNIEnv
*
env
;
if
(
vm
->
GetEnv
(
reinterpret_cast
<
void
**>
(
&
env
),
JNI_VERSION_1_6
)
!=
JNI_OK
)
{
if
(
vm
->
GetEnv
(
reinterpret_cast
<
void
**>
(
&
env
),
JNI_VERSION_1_6
)
!=
JNI_OK
)
{
return
-
1
;
return
-
1
;
}
}
avcodec_register_all
();
avcodec_register_all
();
...
@@ -149,13 +149,13 @@ AUDIO_DECODER_FUNC(jint, ffmpegDecode, jlong context, jobject inputData,
...
@@ -149,13 +149,13 @@ AUDIO_DECODER_FUNC(jint, ffmpegDecode, jlong context, jobject inputData,
LOGE
(
"Invalid output buffer length: %d"
,
outputSize
);
LOGE
(
"Invalid output buffer length: %d"
,
outputSize
);
return
-
1
;
return
-
1
;
}
}
uint8_t
*
inputBuffer
=
(
uint8_t
*
)
env
->
GetDirectBufferAddress
(
inputData
);
uint8_t
*
inputBuffer
=
(
uint8_t
*
)
env
->
GetDirectBufferAddress
(
inputData
);
uint8_t
*
outputBuffer
=
(
uint8_t
*
)
env
->
GetDirectBufferAddress
(
outputData
);
uint8_t
*
outputBuffer
=
(
uint8_t
*
)
env
->
GetDirectBufferAddress
(
outputData
);
AVPacket
packet
;
AVPacket
packet
;
av_init_packet
(
&
packet
);
av_init_packet
(
&
packet
);
packet
.
data
=
inputBuffer
;
packet
.
data
=
inputBuffer
;
packet
.
size
=
inputSize
;
packet
.
size
=
inputSize
;
return
decodePacket
((
AVCodecContext
*
)
context
,
&
packet
,
outputBuffer
,
return
decodePacket
((
AVCodecContext
*
)
context
,
&
packet
,
outputBuffer
,
outputSize
);
outputSize
);
}
}
...
@@ -164,7 +164,7 @@ AUDIO_DECODER_FUNC(jint, ffmpegGetChannelCount, jlong context) {
...
@@ -164,7 +164,7 @@ AUDIO_DECODER_FUNC(jint, ffmpegGetChannelCount, jlong context) {
LOGE
(
"Context must be non-NULL."
);
LOGE
(
"Context must be non-NULL."
);
return
-
1
;
return
-
1
;
}
}
return
((
AVCodecContext
*
)
context
)
->
channels
;
return
((
AVCodecContext
*
)
context
)
->
channels
;
}
}
AUDIO_DECODER_FUNC
(
jint
,
ffmpegGetSampleRate
,
jlong
context
)
{
AUDIO_DECODER_FUNC
(
jint
,
ffmpegGetSampleRate
,
jlong
context
)
{
...
@@ -172,11 +172,11 @@ AUDIO_DECODER_FUNC(jint, ffmpegGetSampleRate, jlong context) {
...
@@ -172,11 +172,11 @@ AUDIO_DECODER_FUNC(jint, ffmpegGetSampleRate, jlong context) {
LOGE
(
"Context must be non-NULL."
);
LOGE
(
"Context must be non-NULL."
);
return
-
1
;
return
-
1
;
}
}
return
((
AVCodecContext
*
)
context
)
->
sample_rate
;
return
((
AVCodecContext
*
)
context
)
->
sample_rate
;
}
}
AUDIO_DECODER_FUNC
(
jlong
,
ffmpegReset
,
jlong
jContext
,
jbyteArray
extraData
)
{
AUDIO_DECODER_FUNC
(
jlong
,
ffmpegReset
,
jlong
jContext
,
jbyteArray
extraData
)
{
AVCodecContext
*
context
=
(
AVCodecContext
*
)
jContext
;
AVCodecContext
*
context
=
(
AVCodecContext
*
)
jContext
;
if
(
!
context
)
{
if
(
!
context
)
{
LOGE
(
"Tried to reset without a context."
);
LOGE
(
"Tried to reset without a context."
);
return
0L
;
return
0L
;
...
@@ -200,16 +200,16 @@ AUDIO_DECODER_FUNC(jlong, ffmpegReset, jlong jContext, jbyteArray extraData) {
...
@@ -200,16 +200,16 @@ AUDIO_DECODER_FUNC(jlong, ffmpegReset, jlong jContext, jbyteArray extraData) {
}
}
avcodec_flush_buffers
(
context
);
avcodec_flush_buffers
(
context
);
return
(
jlong
)
context
;
return
(
jlong
)
context
;
}
}
AUDIO_DECODER_FUNC
(
void
,
ffmpegRelease
,
jlong
context
)
{
AUDIO_DECODER_FUNC
(
void
,
ffmpegRelease
,
jlong
context
)
{
if
(
context
)
{
if
(
context
)
{
releaseContext
((
AVCodecContext
*
)
context
);
releaseContext
((
AVCodecContext
*
)
context
);
}
}
}
}
AVCodec
*
getCodecByName
(
JNIEnv
*
env
,
jstring
codecName
)
{
AVCodec
*
getCodecByName
(
JNIEnv
*
env
,
jstring
codecName
)
{
if
(
!
codecName
)
{
if
(
!
codecName
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -233,13 +233,13 @@ AVCodecContext *createContext(JNIEnv *env, AVCodec *codec, jbyteArray extraData,
...
@@ -233,13 +233,13 @@ AVCodecContext *createContext(JNIEnv *env, AVCodec *codec, jbyteArray extraData,
jsize
size
=
env
->
GetArrayLength
(
extraData
);
jsize
size
=
env
->
GetArrayLength
(
extraData
);
context
->
extradata_size
=
size
;
context
->
extradata_size
=
size
;
context
->
extradata
=
context
->
extradata
=
(
uint8_t
*
)
av_malloc
(
size
+
AV_INPUT_BUFFER_PADDING_SIZE
);
(
uint8_t
*
)
av_malloc
(
size
+
AV_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
context
->
extradata
)
{
if
(
!
context
->
extradata
)
{
LOGE
(
"Failed to allocate extradata."
);
LOGE
(
"Failed to allocate extradata."
);
releaseContext
(
context
);
releaseContext
(
context
);
return
NULL
;
return
NULL
;
}
}
env
->
GetByteArrayRegion
(
extraData
,
0
,
size
,
(
jbyte
*
)
context
->
extradata
);
env
->
GetByteArrayRegion
(
extraData
,
0
,
size
,
(
jbyte
*
)
context
->
extradata
);
}
}
if
(
context
->
codec_id
==
AV_CODEC_ID_PCM_MULAW
||
if
(
context
->
codec_id
==
AV_CODEC_ID_PCM_MULAW
||
context
->
codec_id
==
AV_CODEC_ID_PCM_ALAW
)
{
context
->
codec_id
==
AV_CODEC_ID_PCM_ALAW
)
{
...
@@ -299,14 +299,14 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
...
@@ -299,14 +299,14 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
resampleContext
=
(
SwrContext
*
)
context
->
opaque
;
resampleContext
=
(
SwrContext
*
)
context
->
opaque
;
}
else
{
}
else
{
resampleContext
=
swr_alloc
();
resampleContext
=
swr_alloc
();
av_opt_set_int
(
resampleContext
,
"in_channel_layout"
,
channelLayout
,
0
);
av_opt_set_int
(
resampleContext
,
"in_channel_layout"
,
channelLayout
,
0
);
av_opt_set_int
(
resampleContext
,
"out_channel_layout"
,
channelLayout
,
0
);
av_opt_set_int
(
resampleContext
,
"out_channel_layout"
,
channelLayout
,
0
);
av_opt_set_int
(
resampleContext
,
"in_sample_rate"
,
sampleRate
,
0
);
av_opt_set_int
(
resampleContext
,
"in_sample_rate"
,
sampleRate
,
0
);
av_opt_set_int
(
resampleContext
,
"out_sample_rate"
,
sampleRate
,
0
);
av_opt_set_int
(
resampleContext
,
"out_sample_rate"
,
sampleRate
,
0
);
av_opt_set_int
(
resampleContext
,
"in_sample_fmt"
,
sampleFormat
,
0
);
av_opt_set_int
(
resampleContext
,
"in_sample_fmt"
,
sampleFormat
,
0
);
// The output format is always the requested format.
// The output format is always the requested format.
av_opt_set_int
(
resampleContext
,
"out_sample_fmt"
,
av_opt_set_int
(
resampleContext
,
"out_sample_fmt"
,
context
->
request_sample_fmt
,
0
);
context
->
request_sample_fmt
,
0
);
result
=
swr_init
(
resampleContext
);
result
=
swr_init
(
resampleContext
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
logError
(
"swr_init"
,
result
);
logError
(
"swr_init"
,
result
);
...
@@ -345,7 +345,7 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
...
@@ -345,7 +345,7 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
}
}
void
logError
(
const
char
*
functionName
,
int
errorNumber
)
{
void
logError
(
const
char
*
functionName
,
int
errorNumber
)
{
char
*
buffer
=
(
char
*
)
malloc
(
ERROR_STRING_BUFFER_LENGTH
*
sizeof
(
char
));
char
*
buffer
=
(
char
*
)
malloc
(
ERROR_STRING_BUFFER_LENGTH
*
sizeof
(
char
));
av_strerror
(
errorNumber
,
buffer
,
ERROR_STRING_BUFFER_LENGTH
);
av_strerror
(
errorNumber
,
buffer
,
ERROR_STRING_BUFFER_LENGTH
);
LOGE
(
"Error in %s: %s"
,
functionName
,
buffer
);
LOGE
(
"Error in %s: %s"
,
functionName
,
buffer
);
free
(
buffer
);
free
(
buffer
);
...
@@ -362,4 +362,3 @@ void releaseContext(AVCodecContext *context) {
...
@@ -362,4 +362,3 @@ void releaseContext(AVCodecContext *context) {
}
}
avcodec_free_context
(
&
context
);
avcodec_free_context
(
&
context
);
}
}
extensions/flac/src/main/jni/flac_jni.cc
View file @
0de6bc86
...
@@ -29,14 +29,15 @@
...
@@ -29,14 +29,15 @@
#define ALOGV(...) \
#define ALOGV(...) \
((void)__android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
((void)__android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#define DECODER_FUNC(RETURN_TYPE, NAME, ...) \
#define DECODER_FUNC(RETURN_TYPE, NAME, ...) \
extern "C" { \
extern "C" { \
JNIEXPORT RETURN_TYPE \
JNIEXPORT RETURN_TYPE \
Java_com_google_android_exoplayer2_ext_flac_FlacDecoderJni_##NAME( \
Java_com_google_android_exoplayer2_ext_flac_FlacDecoderJni_##NAME(JNIEnv *env, \
JNIEnv *env, jobject thiz, ##__VA_ARGS__); \
jobject thiz, \
} \
##__VA_ARGS__); \
JNIEXPORT RETURN_TYPE \
} \
Java_com_google_android_exoplayer2_ext_flac_FlacDecoderJni_##NAME( \
JNIEXPORT RETURN_TYPE \
Java_com_google_android_exoplayer2_ext_flac_FlacDecoderJni_##NAME( \
JNIEnv *env, jobject thiz, ##__VA_ARGS__)
JNIEnv *env, jobject thiz, ##__VA_ARGS__)
class
JavaDataSource
:
public
DataSource
{
class
JavaDataSource
:
public
DataSource
{
...
...
extensions/opus/src/main/jni/opus_jni.cc
View file @
0de6bc86
...
@@ -14,38 +14,37 @@
...
@@ -14,38 +14,37 @@
* limitations under the License.
* limitations under the License.
*/
*/
#include <jni.h>
#include <android/log.h>
#include <android/log.h>
#include <jni.h>
#include <cstdlib>
#include <cstdlib>
#include "opus.h" // NOLINT
#include "opus.h"
// NOLINT
#include "opus_multistream.h" // NOLINT
#include "opus_multistream.h" // NOLINT
#define LOG_TAG "opus_jni"
#define LOG_TAG "opus_jni"
#define LOGE(...)
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
\
#define LOGE(...) \
__VA_ARGS__))
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
__VA_ARGS__))
#define DECODER_FUNC(RETURN_TYPE, NAME, ...) \
#define DECODER_FUNC(RETURN_TYPE, NAME, ...)
\
extern "C" { \
extern "C" {
\
JNIEXPORT RETURN_TYPE \
JNIEXPORT RETURN_TYPE
\
Java_com_google_android_exoplayer2_ext_opus_OpusDecoder_ ## NAME
\
Java_com_google_android_exoplayer2_ext_opus_OpusDecoder_##NAME(
\
(JNIEnv* env, jobject thiz, ##__VA_ARGS__);
\
JNIEnv* env, jobject thiz, ##__VA_ARGS__);
\
} \
}
\
JNIEXPORT RETURN_TYPE \
JNIEXPORT RETURN_TYPE
\
Java_com_google_android_exoplayer2_ext_opus_OpusDecoder_ ## NAME
\
Java_com_google_android_exoplayer2_ext_opus_OpusDecoder_##NAME(
\
(JNIEnv* env, jobject thiz, ##__VA_ARGS__)\
JNIEnv* env, jobject thiz, ##__VA_ARGS__)
#define LIBRARY_FUNC(RETURN_TYPE, NAME, ...) \
#define LIBRARY_FUNC(RETURN_TYPE, NAME, ...)
\
extern "C" { \
extern "C" {
\
JNIEXPORT RETURN_TYPE \
JNIEXPORT RETURN_TYPE
\
Java_com_google_android_exoplayer2_ext_opus_OpusLibrary_ ## NAME
\
Java_com_google_android_exoplayer2_ext_opus_OpusLibrary_##NAME(
\
(JNIEnv* env, jobject thiz, ##__VA_ARGS__);
\
JNIEnv* env, jobject thiz, ##__VA_ARGS__);
\
} \
}
\
JNIEXPORT RETURN_TYPE \
JNIEXPORT RETURN_TYPE
\
Java_com_google_android_exoplayer2_ext_opus_OpusLibrary_ ## NAME
\
Java_com_google_android_exoplayer2_ext_opus_OpusLibrary_##NAME(
\
(JNIEnv* env, jobject thiz, ##__VA_ARGS__)\
JNIEnv* env, jobject thiz, ##__VA_ARGS__)
// JNI references for SimpleOutputBuffer class.
// JNI references for SimpleOutputBuffer class.
static
jmethodID
outputBufferInit
;
static
jmethodID
outputBufferInit
;
...
@@ -66,7 +65,8 @@ static int errorCode;
...
@@ -66,7 +65,8 @@ static int errorCode;
static
bool
outputFloat
=
false
;
static
bool
outputFloat
=
false
;
DECODER_FUNC
(
jlong
,
opusInit
,
jint
sampleRate
,
jint
channelCount
,
DECODER_FUNC
(
jlong
,
opusInit
,
jint
sampleRate
,
jint
channelCount
,
jint
numStreams
,
jint
numCoupled
,
jint
gain
,
jbyteArray
jStreamMap
)
{
jint
numStreams
,
jint
numCoupled
,
jint
gain
,
jbyteArray
jStreamMap
)
{
int
status
=
OPUS_INVALID_STATE
;
int
status
=
OPUS_INVALID_STATE
;
::
channelCount
=
channelCount
;
::
channelCount
=
channelCount
;
errorCode
=
0
;
errorCode
=
0
;
...
@@ -88,21 +88,20 @@ DECODER_FUNC(jlong, opusInit, jint sampleRate, jint channelCount,
...
@@ -88,21 +88,20 @@ DECODER_FUNC(jlong, opusInit, jint sampleRate, jint channelCount,
// Populate JNI References.
// Populate JNI References.
const
jclass
outputBufferClass
=
env
->
FindClass
(
const
jclass
outputBufferClass
=
env
->
FindClass
(
"com/google/android/exoplayer2/decoder/SimpleOutputBuffer"
);
"com/google/android/exoplayer2/decoder/SimpleOutputBuffer"
);
outputBufferInit
=
env
->
GetMethodID
(
outputBufferClass
,
"init"
,
outputBufferInit
=
"(JI)Ljava/nio/ByteBuffer;"
);
env
->
GetMethodID
(
outputBufferClass
,
"init"
,
"(JI)Ljava/nio/ByteBuffer;"
);
return
reinterpret_cast
<
intptr_t
>
(
decoder
);
return
reinterpret_cast
<
intptr_t
>
(
decoder
);
}
}
DECODER_FUNC
(
jint
,
opusDecode
,
jlong
jDecoder
,
jlong
jTimeUs
,
DECODER_FUNC
(
jint
,
opusDecode
,
jlong
jDecoder
,
jlong
jTimeUs
,
jobject
jInputBuffer
,
jint
inputSize
,
jobject
jOutputBuffer
)
{
jobject
jInputBuffer
,
jint
inputSize
,
jobject
jOutputBuffer
)
{
OpusMSDecoder
*
decoder
=
reinterpret_cast
<
OpusMSDecoder
*>
(
jDecoder
);
OpusMSDecoder
*
decoder
=
reinterpret_cast
<
OpusMSDecoder
*>
(
jDecoder
);
const
uint8_t
*
inputBuffer
=
const
uint8_t
*
inputBuffer
=
reinterpret_cast
<
const
uint8_t
*>
(
reinterpret_cast
<
const
uint8_t
*>
(
env
->
GetDirectBufferAddress
(
jInputBuffer
));
env
->
GetDirectBufferAddress
(
jInputBuffer
));
const
int
byteSizePerSample
=
outputFloat
?
const
int
byteSizePerSample
=
kBytesPerFloatSample
:
kBytesPerIntPcmSample
;
outputFloat
?
kBytesPerFloatSample
:
kBytesPerIntPcmSample
;
const
jint
outputSize
=
const
jint
outputSize
=
kMaxOpusOutputPacketSizeSamples
*
byteSizePerSample
*
channelCount
;
kMaxOpusOutputPacketSizeSamples
*
byteSizePerSample
*
channelCount
;
...
@@ -111,8 +110,8 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs,
...
@@ -111,8 +110,8 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs,
// Exception is thrown in Java when returning from the native call.
// Exception is thrown in Java when returning from the native call.
return
-
1
;
return
-
1
;
}
}
const
jobject
jOutputBufferData
=
env
->
CallObjectMethod
(
jOutputBuffer
,
const
jobject
jOutputBufferData
=
env
->
CallObjectMethod
(
outputBufferInit
,
jTimeUs
,
outputSize
);
jOutputBuffer
,
outputBufferInit
,
jTimeUs
,
outputSize
);
if
(
env
->
ExceptionCheck
())
{
if
(
env
->
ExceptionCheck
())
{
// Exception is thrown in Java when returning from the native call.
// Exception is thrown in Java when returning from the native call.
return
-
1
;
return
-
1
;
...
@@ -122,26 +121,28 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs,
...
@@ -122,26 +121,28 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs,
if
(
outputFloat
)
{
if
(
outputFloat
)
{
float
*
outputBufferData
=
reinterpret_cast
<
float
*>
(
float
*
outputBufferData
=
reinterpret_cast
<
float
*>
(
env
->
GetDirectBufferAddress
(
jOutputBufferData
));
env
->
GetDirectBufferAddress
(
jOutputBufferData
));
sampleCount
=
opus_multistream_decode_float
(
decoder
,
inputBuffer
,
inputSize
,
sampleCount
=
opus_multistream_decode_float
(
outputBufferData
,
kMaxOpusOutputPacketSizeSamples
,
0
);
decoder
,
inputBuffer
,
inputSize
,
outputBufferData
,
kMaxOpusOutputPacketSizeSamples
,
0
);
}
else
{
}
else
{
int16_t
*
outputBufferData
=
reinterpret_cast
<
int16_t
*>
(
int16_t
*
outputBufferData
=
reinterpret_cast
<
int16_t
*>
(
env
->
GetDirectBufferAddress
(
jOutputBufferData
));
env
->
GetDirectBufferAddress
(
jOutputBufferData
));
sampleCount
=
opus_multistream_decode
(
decoder
,
inputBuffer
,
inputSize
,
sampleCount
=
opus_multistream_decode
(
decoder
,
inputBuffer
,
inputSize
,
outputBufferData
,
kMaxOpusOutputPacketSizeSamples
,
0
);
outputBufferData
,
kMaxOpusOutputPacketSizeSamples
,
0
);
}
}
// record error code
// record error code
errorCode
=
(
sampleCount
<
0
)
?
sampleCount
:
0
;
errorCode
=
(
sampleCount
<
0
)
?
sampleCount
:
0
;
return
(
sampleCount
<
0
)
?
sampleCount
return
(
sampleCount
<
0
)
?
sampleCount
:
sampleCount
*
byteSizePerSample
*
channelCount
;
:
sampleCount
*
byteSizePerSample
*
channelCount
;
}
}
DECODER_FUNC
(
jint
,
opusSecureDecode
,
jlong
jDecoder
,
jlong
jTimeUs
,
DECODER_FUNC
(
jint
,
opusSecureDecode
,
jlong
jDecoder
,
jlong
jTimeUs
,
jobject
jInputBuffer
,
jint
inputSize
,
jobject
jOutputBuffer
,
jobject
jInputBuffer
,
jint
inputSize
,
jobject
jOutputBuffer
,
jint
sampleRate
,
jobject
mediaCrypto
,
jint
inputMode
,
jbyteArray
key
,
jint
sampleRate
,
jobject
mediaCrypto
,
jint
inputMode
,
jbyteArray
javaIv
,
jint
inputNumSubSamples
,
jintArray
numBytesOfClearData
,
jbyteArray
key
,
jbyteArray
javaIv
,
jint
inputNumSubSamples
,
jintArray
numBytesOfEncryptedData
)
{
jintArray
numBytesOfClearData
,
jintArray
numBytesOfEncryptedData
)
{
// Doesn't support
// Doesn't support
// Java client should have checked vpxSupportSecureDecode
// Java client should have checked vpxSupportSecureDecode
// and avoid calling this
// and avoid calling this
...
@@ -163,13 +164,9 @@ DECODER_FUNC(jstring, opusGetErrorMessage, jlong jContext) {
...
@@ -163,13 +164,9 @@ DECODER_FUNC(jstring, opusGetErrorMessage, jlong jContext) {
return
env
->
NewStringUTF
(
opus_strerror
(
errorCode
));
return
env
->
NewStringUTF
(
opus_strerror
(
errorCode
));
}
}
DECODER_FUNC
(
jint
,
opusGetErrorCode
,
jlong
jContext
)
{
DECODER_FUNC
(
jint
,
opusGetErrorCode
,
jlong
jContext
)
{
return
errorCode
;
}
return
errorCode
;
}
DECODER_FUNC
(
void
,
opusSetFloatOutput
)
{
DECODER_FUNC
(
void
,
opusSetFloatOutput
)
{
outputFloat
=
true
;
}
outputFloat
=
true
;
}
LIBRARY_FUNC
(
jstring
,
opusIsSecureDecodeSupported
)
{
LIBRARY_FUNC
(
jstring
,
opusIsSecureDecodeSupported
)
{
// Doesn't support
// Doesn't support
...
...
extensions/vp9/src/main/jni/vpx_jni.cc
View file @
0de6bc86
...
@@ -18,12 +18,12 @@
...
@@ -18,12 +18,12 @@
#ifdef __ARM_NEON__
#ifdef __ARM_NEON__
#include <arm_neon.h>
#include <arm_neon.h>
#endif
#endif
#include <jni.h>
#include <android/log.h>
#include <android/log.h>
#include <android/native_window.h>
#include <android/native_window.h>
#include <android/native_window_jni.h>
#include <android/native_window_jni.h>
#include <jni.h>
#include <pthread.h>
#include <pthread.h>
#include <algorithm>
#include <algorithm>
#include <cstdio>
#include <cstdio>
#include <cstdlib>
#include <cstdlib>
...
@@ -31,12 +31,12 @@
...
@@ -31,12 +31,12 @@
#include <new>
#include <new>
#define VPX_CODEC_DISABLE_COMPAT 1
#define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_decoder.h"
#include "vpx/vp8dx.h"
#include "vpx/vp8dx.h"
#include "vpx/vpx_decoder.h"
#define LOG_TAG "vpx_jni"
#define LOG_TAG "vpx_jni"
#define LOGE(...)
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
\
#define LOGE(...) \
__VA_ARGS__))
((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
__VA_ARGS__))
#define DECODER_FUNC(RETURN_TYPE, NAME, ...) \
#define DECODER_FUNC(RETURN_TYPE, NAME, ...) \
extern "C" { \
extern "C" { \
...
@@ -480,12 +480,12 @@ DECODER_FUNC(jlong, vpxInit, jboolean disableLoopFilter,
...
@@ -480,12 +480,12 @@ DECODER_FUNC(jlong, vpxInit, jboolean disableLoopFilter,
// Populate JNI References.
// Populate JNI References.
const
jclass
outputBufferClass
=
env
->
FindClass
(
const
jclass
outputBufferClass
=
env
->
FindClass
(
"com/google/android/exoplayer2/video/VideoDecoderOutputBuffer"
);
"com/google/android/exoplayer2/video/VideoDecoderOutputBuffer"
);
initForYuvFrame
=
env
->
GetMethodID
(
outputBufferClass
,
"initForYuvFrame"
,
initForYuvFrame
=
"(IIIII)Z"
);
env
->
GetMethodID
(
outputBufferClass
,
"initForYuvFrame"
,
"(IIIII)Z"
);
initForPrivateFrame
=
initForPrivateFrame
=
env
->
GetMethodID
(
outputBufferClass
,
"initForPrivateFrame"
,
"(II)V"
);
env
->
GetMethodID
(
outputBufferClass
,
"initForPrivateFrame"
,
"(II)V"
);
dataField
=
env
->
GetFieldID
(
outputBufferClass
,
"data"
,
dataField
=
"Ljava/nio/ByteBuffer;"
);
env
->
GetFieldID
(
outputBufferClass
,
"data"
,
"Ljava/nio/ByteBuffer;"
);
outputModeField
=
env
->
GetFieldID
(
outputBufferClass
,
"mode"
,
"I"
);
outputModeField
=
env
->
GetFieldID
(
outputBufferClass
,
"mode"
,
"I"
);
decoderPrivateField
=
decoderPrivateField
=
env
->
GetFieldID
(
outputBufferClass
,
"decoderPrivate"
,
"I"
);
env
->
GetFieldID
(
outputBufferClass
,
"decoderPrivate"
,
"I"
);
...
@@ -508,9 +508,9 @@ DECODER_FUNC(jlong, vpxDecode, jlong jContext, jobject encoded, jint len) {
...
@@ -508,9 +508,9 @@ DECODER_FUNC(jlong, vpxDecode, jlong jContext, jobject encoded, jint len) {
}
}
DECODER_FUNC
(
jlong
,
vpxSecureDecode
,
jlong
jContext
,
jobject
encoded
,
jint
len
,
DECODER_FUNC
(
jlong
,
vpxSecureDecode
,
jlong
jContext
,
jobject
encoded
,
jint
len
,
jobject
mediaCrypto
,
jint
inputMode
,
jbyteArray
&
,
jbyteArray
&
,
jobject
mediaCrypto
,
jint
inputMode
,
jbyteArray
&
,
jbyteArray
&
,
jint
inputNumSubSamples
,
jintArray
numBytesOfClearData
,
jint
inputNumSubSamples
,
jintArray
numBytesOfClearData
,
jintArray
numBytesOfEncryptedData
)
{
jintArray
numBytesOfEncryptedData
)
{
// Doesn't support
// Doesn't support
// Java client should have checked vpxSupportSecureDecode
// Java client should have checked vpxSupportSecureDecode
// and avoid calling this
// and avoid calling this
...
@@ -552,7 +552,7 @@ DECODER_FUNC(jint, vpxGetFrame, jlong jContext, jobject jOutputBuffer) {
...
@@ -552,7 +552,7 @@ DECODER_FUNC(jint, vpxGetFrame, jlong jContext, jobject jOutputBuffer) {
case
VPX_CS_BT_709
:
case
VPX_CS_BT_709
:
colorspace
=
kColorspaceBT709
;
colorspace
=
kColorspaceBT709
;
break
;
break
;
case
VPX_CS_BT_2020
:
case
VPX_CS_BT_2020
:
colorspace
=
kColorspaceBT2020
;
colorspace
=
kColorspaceBT2020
;
break
;
break
;
default
:
default
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment