You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
MediaCodec: add VP8 and VP9 codecs
This commit is contained in:
@@ -205,20 +205,26 @@ JNIEXPORT void JNICALL Java_android_media_MediaCodec_native_1configure_1video(JN
|
|||||||
AVCodecContext *codec_ctx = ctx->codec;
|
AVCodecContext *codec_ctx = ctx->codec;
|
||||||
jarray array_ref;
|
jarray array_ref;
|
||||||
jbyte *array;
|
jbyte *array;
|
||||||
int sps_size;
|
int sps_size = 0;
|
||||||
int pps_size;
|
int pps_size = 0;
|
||||||
|
|
||||||
printf("Java_android_media_MediaCodec_native_1configure_video(%s)\n", codec_ctx->codec->name);
|
printf("Java_android_media_MediaCodec_native_1configure_video(%s)\n", codec_ctx->codec->name);
|
||||||
|
|
||||||
sps_size = get_nio_buffer_size(env, csd0);
|
if (csd0)
|
||||||
pps_size = get_nio_buffer_size(env, csd1);
|
sps_size = get_nio_buffer_size(env, csd0);
|
||||||
|
if (csd1)
|
||||||
|
pps_size = get_nio_buffer_size(env, csd1);
|
||||||
|
|
||||||
size_t extradata_size = sps_size + pps_size;
|
size_t extradata_size = sps_size + pps_size;
|
||||||
uint8_t *extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
|
uint8_t *extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||||
memcpy(extradata, get_nio_buffer(env, csd0, &array_ref, &array), extradata_size);
|
if (csd0) {
|
||||||
release_nio_buffer(env, array_ref, array);
|
memcpy(extradata, get_nio_buffer(env, csd0, &array_ref, &array), extradata_size);
|
||||||
memcpy(extradata + sps_size, get_nio_buffer(env, csd1, &array_ref, &array), extradata_size);
|
release_nio_buffer(env, array_ref, array);
|
||||||
release_nio_buffer(env, array_ref, array);
|
}
|
||||||
|
if (csd1) {
|
||||||
|
memcpy(extradata + sps_size, get_nio_buffer(env, csd1, &array_ref, &array), extradata_size);
|
||||||
|
release_nio_buffer(env, array_ref, array);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < extradata_size; i++) {
|
for (int i = 0; i < extradata_size; i++) {
|
||||||
printf("extradata[%d] = %x\n", i, extradata[i]);
|
printf("extradata[%d] = %x\n", i, extradata[i]);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class MediaCodec {
|
|||||||
|
|
||||||
if ("aac".equals(codecName) || "mp3".equals(codecName) || "opus".equals(codecName)) {
|
if ("aac".equals(codecName) || "mp3".equals(codecName) || "opus".equals(codecName)) {
|
||||||
native_configure_audio(native_codec, format.getByteBuffer("csd-0"), format.getInteger("sample-rate"), format.getInteger("channel-count"));
|
native_configure_audio(native_codec, format.getByteBuffer("csd-0"), format.getInteger("sample-rate"), format.getInteger("channel-count"));
|
||||||
} else if ("h264".equals(codecName)) {
|
} else if ("h264".equals(codecName) || "vp8".equals(codecName) || "vp9".equals(codecName)) {
|
||||||
native_configure_video(native_codec, format.getByteBuffer("csd-0"), format.getByteBuffer("csd-1"), surface);
|
native_configure_video(native_codec, format.getByteBuffer("csd-0"), format.getByteBuffer("csd-1"), surface);
|
||||||
} else {
|
} else {
|
||||||
System.out.println("configure: format " + format + " not implemented");
|
System.out.println("configure: format " + format + " not implemented");
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package android.media;
|
|||||||
public class MediaCodecList {
|
public class MediaCodecList {
|
||||||
|
|
||||||
public static int getCodecCount() {
|
public static int getCodecCount() {
|
||||||
return 4;
|
return 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MediaCodecInfo getCodecInfoAt(int index) {
|
public static MediaCodecInfo getCodecInfoAt(int index) {
|
||||||
@@ -16,6 +16,10 @@ public class MediaCodecList {
|
|||||||
return new MediaCodecInfo("mp3", "audio/mpeg");
|
return new MediaCodecInfo("mp3", "audio/mpeg");
|
||||||
case 3:
|
case 3:
|
||||||
return new MediaCodecInfo("opus", "audio/opus");
|
return new MediaCodecInfo("opus", "audio/opus");
|
||||||
|
case 4:
|
||||||
|
return new MediaCodecInfo("vp8", "video/x-vnd.on2.vp8");
|
||||||
|
case 5:
|
||||||
|
return new MediaCodecInfo("vp9", "video/x-vnd.on2.vp9");
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user