Call AudioRecord.getTimestamp() by reflection
This commit is contained in:
@@ -14,6 +14,7 @@ import android.media.MediaRecorder;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
public final class AudioCapture {
|
public final class AudioCapture {
|
||||||
@@ -121,6 +122,20 @@ public final class AudioCapture {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Method getTimestampMethod;
|
||||||
|
|
||||||
|
private static int getRecorderTimestamp(AudioRecord recorder, AudioTimestamp timestamp) {
|
||||||
|
try {
|
||||||
|
if (getTimestampMethod == null) {
|
||||||
|
getTimestampMethod = AudioRecord.class.getMethod("getTimestamp", AudioTimestamp.class, int.class);
|
||||||
|
}
|
||||||
|
return (int) getTimestampMethod.invoke(recorder, timestamp, 0);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Ln.e("Could not call AudioRecord.getTimestamp() method");
|
||||||
|
return AudioRecord.ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TargetApi(24)
|
@TargetApi(24)
|
||||||
public int read(ByteBuffer directBuffer, int size, MediaCodec.BufferInfo outBufferInfo) {
|
public int read(ByteBuffer directBuffer, int size, MediaCodec.BufferInfo outBufferInfo) {
|
||||||
int r = recorder.read(directBuffer, size);
|
int r = recorder.read(directBuffer, size);
|
||||||
@@ -130,7 +145,7 @@ public final class AudioCapture {
|
|||||||
|
|
||||||
long pts;
|
long pts;
|
||||||
|
|
||||||
int ret = recorder.getTimestamp(timestamp, AudioTimestamp.TIMEBASE_MONOTONIC);
|
int ret = getRecorderTimestamp(recorder, timestamp);
|
||||||
if (ret == AudioRecord.SUCCESS) {
|
if (ret == AudioRecord.SUCCESS) {
|
||||||
pts = timestamp.nanoTime / 1000;
|
pts = timestamp.nanoTime / 1000;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user