gpt4 book ai didi

java - 我的 android 代码可以在 Android 2.2 上成功运行,但是不能在 Android 4.2.2 上运行

转载 作者:太空狗 更新时间:2023-10-29 13:27:00 24 4
gpt4 key购买 nike

我的Android项目是一个YUV播放器起初项目在Android 2.2版本下可以正常运行但是当我想要它也可以在 Android 4.2.2 上工作发生了一些问题

仍然可以顺利运行,没有报错信息然而 YUV 图像的内容并没有显示在屏幕上屏幕内容只是 block 这是我的 Java 代码,它接收来自 JNI 的 YUV 数据,并显示内容:

public class SkiaView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder holder=null;//******Version2******//
private static final String TAG = "skiademo";

private int mSampleId = 0;
final Rect rect = new Rect(0, 0, 352, 288);

int FrameNum=0;

static
{
System.loadLibrary("SkiaDemo");
}

public native void renderHello(Canvas canvas, int FrameNum,Rect rect);
public native void renderText(Canvas canvas);

public SkiaView(Context context,AttributeSet attr)//******Version2******//
{
super(context,attr);
// TODO Auto-generated constructor stub
holder=getHolder();
holder.addCallback(this);
}

public void surfaceCreated(SurfaceHolder holder)//******Version2******//
{
// TODO Auto-generated method stub
new Thread(new MyLoop()).start();
}

class MyLoop implements Runnable//******Version2******//
{
public void run() {
// TODO Auto-generated method stub
while(true){
try{
Canvas c=holder.lockCanvas();
if(FrameNum == 15)
{
FrameNum = 0;
renderHello(c, FrameNum,rect);
//c.drawColor(Color.BLUE);
}
else
{
FrameNum = FrameNum + 1;
renderHello(c, FrameNum,rect);
//c.drawColor(Color.BLUE);
}
holder.unlockCanvasAndPost(c);
Thread.sleep(1);
}catch(Exception e)
{

}
}
}
}

public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

下面是我读取YUV内容的代码并将其返回给 JAVA

#include "SkiaDemoJni.h"
#include "mylog.h"

#include "GraphicsJNI.h"
#include "SkPaint.h"
#include "SkCanvas.h"

#include"opj_includes.h"
#include <wchar.h>
#include <android\log.h>
#include <android\bitmap.h>

#define two_pi (6.283)

unsigned char cur_image_y[101376];
unsigned char cur_image_u[101376];
unsigned char cur_image_v[101376];

inline int32_t color(int32_t pColorY,int32_t pColorU,int32_t pColorV) {
int32_t pColorR;
int32_t pColorG;
int32_t pColorB;
pColorR = pColorY+1.4075*(pColorV-128);
pColorG = pColorY-0.3455*(pColorU-128)-0.7169*(pColorV-128);
pColorB = pColorY+1.7790*(pColorU-128);
if(pColorR>255)
pColorR=255;
if(pColorG>255)
pColorG=255;
if(pColorB>255)
pColorB=255;

if(pColorR<0)
pColorR=0;
if(pColorG<0)
pColorG=0;
if(pColorB<0)
pColorB=0;

return 0xFF000000 | ((pColorB << 16) & 0x00FF0000) | ((pColorG << 8) & 0x0000FF00) |
((pColorR) & 0x000000FF);
}
void Java_com_whtr_example_skiademo_SkiaView_renderHello(JNIEnv *env, jobject thizz,
jobject canvas, jint FrameNum,jobject rect)
{
jclass bitmapConfig = env->FindClass("android/graphics/Bitmap$Config");
jfieldID rgb565FieldID = env->GetStaticFieldID(bitmapConfig, "ARGB_8888",
"Landroid/graphics/Bitmap$Config;");
jobject rgb565Obj = env->GetStaticObjectField(bitmapConfig, rgb565FieldID);
LOGD("jclass bitmapClass ");
jclass bitmapClass = env->FindClass("android/graphics/Bitmap");
jmethodID createBitmapMethodID = env->GetStaticMethodID(bitmapClass,"createBitmap",
"(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
jobject bitmapObj = env->CallStaticObjectMethod(bitmapClass, createBitmapMethodID,
352, 288, rgb565Obj);//width,height
int a[101376]={0};
AndroidBitmapInfo info;
int* pixels;
int ret;
ret = AndroidBitmap_getInfo(env, bitmapObj, &info);
ret = AndroidBitmap_lockPixels(env, bitmapObj, (void**)&pixels);
int width=(int)info.width;
int height=(int)info.height;
SkBitmap bmp = SkBitmap();
bmp.setConfig(SkBitmap::kARGB_8888_Config,width,height);
bmp.setPixels((void*)pixels);
SkCanvas background(bmp);
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas);
if (!canv)
{
LOGE("!canv");
return;
}
systemPara sys;

sys.width = 352;

sys.height = 288;
sys.frameNO = 1;
sys.startFrm = 0;
sys.inFileName = new char[strlen("/mnt/sdcard/out_352x288_P420_final.yuv")+1];
strcpy(sys.inFileName, "/mnt/sdcard/out_352x288_P420_final.yuv");
for(int i=0;i<sys.frameNO;i++){
//sys.startFrm = i;
YUV_play_read(cur_image_y, cur_image_u, cur_image_v, sys.inFileName, sys.width, sys.height, FrameNum);
for(int x=0;x<sys.width;x++){
for(int y=0;y<sys.height;y++){
a[x + y * 352] = color(cur_image_y[x + y * 352], cur_image_u[x + y * 352], cur_image_v[x + y * 352]);
}
}
}
pixels = a;
AndroidBitmap_unlockPixels(env, bitmapObj);
bmp.setPixels((void*)pixels);
canv->drawBitmap(bmp, 0, 0, NULL);

}

以下是我的AndroidManifest.xml文件:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.whtr.example.skiademo"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="17"></uses-sdk>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>


</manifest>

下面是我的Application.mk
APP_PLATFORM := android-8

最佳答案

进入 AndroidManifest.xml 并用以下标记替换您的 uses-sdk 标记

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

如需更多帮助,请访问 http://developer.android.com/about/versions/android-4.2.html

关于java - 我的 android 代码可以在 Android 2.2 上成功运行,但是不能在 Android 4.2.2 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com