Add YV12 color format for the encoder.
Change-Id: Ia054088ff5fb7227144ede92187d337143c0bcea
diff --git a/JNI/Application.java b/JNI/Application.java
index 7f8920b..c29d064 100644
--- a/JNI/Application.java
+++ b/JNI/Application.java
@@ -71,7 +71,7 @@
long nextFrameStart = timeMultiplier.multiply(framesIn).toLong();
ArrayList<VpxCodecCxPkt> encPkt = encoder.encodeFrame(
- uncompressedFrame, frameStart, nextFrameStart - frameStart);
+ uncompressedFrame, LibVpxEnc.VPX_IMG_FMT_I420, frameStart, nextFrameStart - frameStart);
for (int i = 0; i < encPkt.size(); i++) {
VpxCodecCxPkt pkt = encPkt.get(i);
@@ -159,4 +159,4 @@
System.err.println(outStr);
}
}
-}
\ No newline at end of file
+}
diff --git a/JNI/BindingsSamples.java b/JNI/BindingsSamples.java
index 2de2ce2..b09a2ce 100755
--- a/JNI/BindingsSamples.java
+++ b/JNI/BindingsSamples.java
@@ -336,7 +336,7 @@
long nextFrameStart = timeMultiplier.multiply(framesIn).toLong();
ArrayList<VpxCodecCxPkt> encPkt =
- encoder.encodeFrame(uncompressedFrame, frameStart, nextFrameStart - frameStart);
+ encoder.encodeFrame(uncompressedFrame, LibVpxEnc.VPX_IMG_FMT_I420, frameStart, nextFrameStart - frameStart);
for (int i = 0; i < encPkt.size(); i++) {
VpxCodecCxPkt pkt = encPkt.get(i);
@@ -704,7 +704,7 @@
long frameStart = timeMultiplier.multiply(framesIn - 1).toLong();
long nextFrameStart = timeMultiplier.multiply(framesIn++).toLong();
- encPkt = vpxEncoder.encodeFrame(rawVideoArray, frameStart, nextFrameStart - frameStart);
+ encPkt = vpxEncoder.encodeFrame(rawVideoArray, LibVpxEnc.VPX_IMG_FMT_I420, frameStart, nextFrameStart - frameStart);
// Get the first vpx encoded frame.
pktIndex = 0;
diff --git a/JNI/com/google/libvpx/LibVpxEnc.java b/JNI/com/google/libvpx/LibVpxEnc.java
index c24f1c8..03e4b7e 100644
--- a/JNI/com/google/libvpx/LibVpxEnc.java
+++ b/JNI/com/google/libvpx/LibVpxEnc.java
@@ -26,6 +26,10 @@
public static final long FOURCC_YV12 = 0x32315659;
public static final long FOURCC_YV16 = 0x36315659;
+ // Enums from libvpx.
+ public static final int VPX_IMG_FMT_YV12 = 0x301;
+ public static final int VPX_IMG_FMT_I420 = 0x102;
+
private native void vpxCodecEncInit(long encoder, long cfg);
private native int vpxCodecEncCtlSetCpuUsed(long ctx, int value);
@@ -42,7 +46,7 @@
private native int vpxCodecEncCtlSetMaxIntraBitratePct(long ctx, int value);
private native boolean vpxCodecEncode(long ctx, byte[] frame,
- long pts, long duration,
+ int fmt, long pts, long duration,
long flags, long deadline);
private native boolean vpxCodecConvertByteEncode(long ctx, byte[] frame,
long pts, long duration,
@@ -79,9 +83,10 @@
throw new LibVpxException(vpxCodecErrorDetail(vpxCodecIface));
}
}
- public ArrayList<VpxCodecCxPkt> encodeFrame(byte[] frame, long frameStart, long frameDuration)
+
+ public ArrayList<VpxCodecCxPkt> encodeFrame(byte[] frame, int fmt, long frameStart, long frameDuration)
throws LibVpxException {
- if (!vpxCodecEncode(vpxCodecIface, frame, frameStart, frameDuration, 0L, 0L)) {
+ if (!vpxCodecEncode(vpxCodecIface, frame, fmt, frameStart, frameDuration, 0L, 0L)) {
throw new LibVpxException("Unable to encode frame");
}
throwOnError();
diff --git a/JNI/vpx/libvpx_enc_impl.cc b/JNI/vpx/libvpx_enc_impl.cc
index d9a8a3c..9167c9c 100644
--- a/JNI/vpx/libvpx_enc_impl.cc
+++ b/JNI/vpx/libvpx_enc_impl.cc
@@ -92,14 +92,15 @@
}
FUNC(jboolean, vpxCodecEncode, jlong jctx, jbyteArray jframe,
- jlong pts, jlong duration,
+ jint fmt, jlong pts, jlong duration,
jlong flags, jlong deadline) {
printf("vpxCodecEncode");
jboolean success = true;
jbyte *frame = env->GetByteArrayElements(jframe, 0);
vpx_codec_ctx_t *ctx = reinterpret_cast<vpx_codec_ctx_t *>(jctx);
+
vpx_image_t *img = vpx_img_wrap(NULL,
- IMG_FMT_I420,
+ (vpx_img_fmt)fmt,
ctx->config.enc->g_w,
ctx->config.enc->g_h,
0,
@@ -151,7 +152,7 @@
if (success) {
vpx_image_t *img = vpx_img_wrap(NULL,
- IMG_FMT_I420,
+ VPX_IMG_FMT_I420,
ctx->config.enc->g_w,
ctx->config.enc->g_h,
0,