Anda di halaman 1dari 28

Android SDK/NDK e vídeo captura

de imagens ao vivo
Alessandro de Oliveira Faria (A.K.A.CABELO)
cabelo@opensuse.org
Perfil Técnico:
Alessandro de Oliveira Faria (A.K.A. CABELO)
Diretor de pesquisas
NETi TECNOLOGIA


 Atuando no mercado de software desde 1986 

 openSUSE Member; 

 Membro da comunidade Viva O Linux; 

 Conselheiro Administrativo Linux do projeto Tecnociência; 

Mantenedor e Desenvolvedor

 droidFrete: Cálculo de frete na plataforma Android.

 droidRastreamento: Rastreabilidade de objeto postados.

 stampDate: Serviço de menu KDE para estampar data em imagens.

 libHAIRCAPTURE: Biblioteca de video captura em Linux.

 IPCMSG: Biblioteca de comunicação inter­processos.

 easyPCSC: Biblioteca para utilização de cartões sma

Publicações:

 Linux Magazine 8 Artigos

 Internet 94 artigos técnicos (VOL/Tecnociência/Linha de Código).
Arquitetura
O Dalvik é uma máquina virtual performática
Processamento de imagem
Onde utilizar o NDK?
Instalação e configuração do SDK
Download e descompactação do SDK

Pagina principal:
http://developer.android.com/sdk/index.html

$ tar ­zxvf android­sdk_r04­linux_86.tgz 
$ cd android­sdk­linux_86/tools
$ ./android
$ export PATH=${PATH}:<pasta de instalação do 
android>/tools 
Instalação e configuração do SDK
Configuração da maquina virtual
Instalação e configuração do SDK
Instalação do eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Criando o primeiro Ola Mundo
Imprimir ola mundo

package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       TextView tv = new TextView(this);
       tv.setText("Ola Mundo, Viva Pitágoras!");
       setContentView(tv);
   }

Criando o primeiro Ola Mundo
Executando o programa
Instalação e configuração do NDK
Download e descompactação do NDK

Pagina principal:
http://developer.android.com/sdk/ndk/index.html

$ unzip android­ndk­r4b­linux­x86.zip

Pronto o NDK esta instalado com sucesso!


Criando o primeiro Ola Mundo com NDK
Abrindo projeto
Instalação e configuração do NDK
Arquivo layout
Instalação e configuração do NDK
Criação protótipo da função nativa e makefile.

$ cd ~/workspace/HelloNDK
$ javah ­o  hellondk.h ­classpath bin com.cabelo.hellondk.HelloNDK
$ mkdir jni
$ cp hellondk.h  jni/
$ cd jni

$ vi Android.mk

LOCAL_PATH := $(call my­dir)
include $(CLEAR_VARS)
LOCAL_DEFAULT_CPP_EXTENSION := cpp
LOCAL_MODULE    := hellondk
LOCAL_SRC_FILES := hellondk.cpp
include $(BUILD_SHARED_LIBRARY)
Instalação e configuração do NDK
Criação da função nativa

$ vi hellondk.cpp

#include <hellondk.h>

JNIEXPORT jstring JNICALL 
Java_net_bruary_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj){
     return env­>NewStringUTF("Hello, NDK!");
 }
Instalação e configuração do NDK
Criação protótipo da função nativa e makefile.

$ /usr/local/share/android­ndk­r4b/ndk­build 
 Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
 SharedLibrary  : libhellondk.so
 Install        : libhellondk.so => ~/HelloNDK/libs/armeabi

$ vi Application.mk

APP_ABI := armeabi armeabi­v7a

 $ /usr/local/share/android­ndk­r4b/ndk­build 
 
 Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
 SharedLibrary  : libhellondk.so
 Install        : libhellondk.so => ~/HelloNDK/libs/armeabi
 Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
 SharedLibrary  : libhellondk.so
 Install        : libhellondk.so => ~/HelloNDK/libs/armeabi­v7a
Instalação e configuração do NDK
Execução do programa
Aplicações de video captura
Permissão de uso da CAMERA.
Aplicações de video captura
Inicialização e propriedades.

    <SurfaceView android:id="@+id/surface"
        android:layout_width="fill_parent" android:layout_height="10dip"
        android:layout_weight="1">
    </SurfaceView>

import android.hardware.Camera;

Camera camera = Camera.open();
camera.release();

        Camera.Parameters p = mCamera.getParameters();
        p.setPictureFormat(PixelFormat.JPEG); 
        p.setPreviewSize(w, h);
        mCamera.setParameters(p);
Aplicações de video captura
Preview e captura

camera.startPreview();
[ … ]
camera.stopPreview();

private void takePicture() {
camera.takePicture(shutterCallback, rawCallback, jpegCallback); }

ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
[ … ] } };

PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] _data, Camera _camera) {
[ … ] } };
Aplicações de video captura
Gravação em disco

PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
nomeImagem = String.format("/sdcard/DCIM/Camera/img­%d.jpg", 
System.currentTimeMillis());
outStream = new FileOutputStream(nomeImagem);
outStream.write(data);
outStream.close();
}
};
Processando imagem
http://code.google.com/p/android-playground-erdao/wiki/SnapFace
Processamento em tempo real
Preview e captura

void
Java_com_erdao_SnapFace_PreviewView_grayToRgb( JNIEnv*  env,
                                      jobject  this,
                                      jbyteArray src,
                                      jintArray  dst )
{
jboolean b;
jint len;
jbyte* srcPtr=(*env)­>GetByteArrayElements(env,src,&b);
jint* dstPtr=(*env)­>GetIntArrayElements(env,dst,&b);
len = (*env)­>GetArrayLength(env,src);
gray8toRGB32(srcPtr, dstPtr, len);
(*env)­>ReleaseByteArrayElements(env, src, srcPtr, 0);
(*env)­>ReleaseIntArrayElements(env, dst, dstPtr, 0);
}
;
Críticas e sugestões
cabelo@opensuse.org

Obrigado!

http://cabelovivaolinux.wordpress.com

“Colaborar atrai amigos, competir atrai 
inimigos...”

Anda mungkin juga menyukai