2011/08/29

How to get device vender ID

To get the vendor ID of a USB device on Linux "lsusb" will tell you what's what:

steve@media:~/android-sdk-linux/tools$ lsusb
Bus 002 Device 003: ID 045e:0040 Microsoft Corp. Wheel Mouse Optical
Bus 002 Device 002: ID 046d:c315 Logitech, Inc. Classic New Touch Keyboard
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 011: ID 18d1:4e12
Bus 001 Device 006: ID 04b8:011f Seiko Epson Corp. Perfection 1670
Bus 001 Device 003: ID 1058:1003 Western Digital Technologies, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2011/08/24

How to say n^m

N的2次方: N Squared
N的3次方: N Cubed
N的M次方: N the M power

N开M次方: the M root of N

2011/08/15

CheckJNI of NewStringUTF

In file Check dalvik/vm/checkjni.c

This is the function which check the input string of NewStringUTF is a valid UTF8 or not.
If not valid, the check function will abort the VM.
That caused our application got crashed when there are some mal-formated UTF8 string.

/* * Verify that "bytes" points to valid "modified UTF-8" data. */ static void checkUtfString(JNIEnv* env, const char* bytes, bool nullOk, const char* func) { const char* origBytes = bytes; if (bytes == NULL) { if (!nullOk) { LOGW("JNI WARNING: unexpectedly null UTF string\n"); goto fail; } return; } while (*bytes != '\0') { u1 utf8 = *(bytes++); // Switch on the high four bits. switch (utf8 >> 4) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: { // Bit pattern 0xxx. No need for any extra bytes. break; } case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0f: { /* * Bit pattern 10xx or 1111, which are illegal start bytes. * Note: 1111 is valid for normal UTF-8, but not the * modified UTF-8 used here. */ LOGW("JNI WARNING: illegal start byte 0x%x\n", utf8); goto fail; } case 0x0e: { // Bit pattern 1110, so there are two additional bytes. utf8 = *(bytes++); if ((utf8 & 0xc0) != 0x80) { LOGW("JNI WARNING: illegal continuation byte 0x%x\n", utf8); goto fail; } // Fall through to take care of the final byte. } case 0x0c: case 0x0d: { // Bit pattern 110x, so there is one additional byte. utf8 = *(bytes++); if ((utf8 & 0xc0) != 0x80) { LOGW("JNI WARNING: illegal continuation byte 0x%x\n", utf8); goto fail; } break; } } } return; fail: LOGW(" string: '%s'\n", origBytes); showLocation(dvmGetCurrentJNIMethod(), func); abortMaybe(); }

Android CheckJNI

CheckJNI can catch a number of common errors.

A simple way to enable or disable JNI:
adb remount
adb pull /system/build.prop .

delete or add line ro.kernel.android.checkjni=1

adb push build.prop /system/.
adb shell reboot



Reference:
http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html

2011/07/27

FFmpeg build and run

How to build and run ffmpeg 0.8

1. download 0.8 ffmepg

2. Install libsdl libsdl-mix, using synaptic package manager

3 ./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-shared --disable-yasm --enable-debug=3 --disable-stripping --prefix=/home/xgu/ffmpeg

4. make; make install;

5. cd /home/xgu/ffmpeg/bin

6. LD_LIBRARY_PATH=../lib ./ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -f mpegts -vcodec mpeg2video out1.mpeg

7. LD_LIBRARY_PATH=../lib ./ffplay  Some_Video_File

2011/07/21

Video Audio Capture in Linux

Video
Webcam support in Linux is mainly provided by the Linux UVC Project's UVC driver.

The UVC driver implements the Video4Linux 2 (V4L2) API

The specification of V4L2 API can be found at http://v4l2spec.bytesex.org/

Example:
In ffmpeg, file libavdevice/v4l2.c
http://v4l2spec.bytesex.org/v4l2spec/capture.c

Command:
#To capture video
ffmpeg -f video4linux2 -i /dev/video0 out.mpeg


Audio
Ubuntu is using ALSA for audio input output

Command:
#To capture audio
ffmpeg -f alsa -ac 2 -i hw:0 alsaout.wav

#To get hardware info
arecord -l



Reference:
http://ffmpeg.org/ffmpeg-doc.html
http://www.ideasonboard.org/uvc/
https://help.ubuntu.com/community/Webcam
https://help.ubuntu.com/community/UVC
http://v4l2spec.bytesex.org/
http://www.alsa-project.org/

2011/07/15

Encode PCM to M4A

ffmpeg -i audiobo.aiff -strict experimental  -acodec aac  -ab 64k -ar 22050 a.m4a

Post Code on Blogger

Simplest way to post code to blogger for me: <pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black;overflow-x:...