Exploring and rooting the iPPea TV
By admin | November 24, 2012
Skip to the rooting process, if you wish.
The iPPea TV is a pretty neat gadget, to say the least. The USB-stick sized device features a full Android 4.0.3 OS, a 1Ghz Ingenic JZ4770 MIPS processor (complete with FPU!), 512 MB of RAM, 2 GB flash storage, and about 800 MB of internal memory. Overall, it is pretty impressive for only $65. Having received it about three weeks ago for use in the development of the MIPS port of VLC Android, I’ve been meaning to write about this device. Now that I’ve received this device and have time to write, let’s take a look at what’s in it.
The iPPea comes in its own packaging, in addition to the 3D gyroscopic remote offered by Option B.
The iPPea comes with some packaging.
So, after unpacking, we are ready to play with the iPPea. The iPPea simply “plugs in” to any HDMI-enabled TV, just like how a USB stick plugs into a computer. It doesn’t take too long to boot up, about 15-25 seconds-ish (I did not time this).
Just a curious note here, the iPPea claims to support full 1080p, but my television reports it to be 720p. I did not notice any lack of quality though, the picture was still very clear and not pixellated.
The iPPea boots into a full Android 4.0.3 installation, as mentioned before, with the twist that it runs a MIPS processor. It also features full wifi, which we will use in some diagnostics. Here are the /proc/cpuinfo and Android Sysinfo dumps for the iPPea TV:
system type : JZ4770 processor : MIPS-compatible processor JZ4770 cpu model : Ingenic XBurst BogoMIPS : 1001.88 wait instruction : yes microsecond timers : no tlb_entries : 32 extra interrupt vector : yes hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff] ASEs implemented : mxu shadow register sets : 1 core : 0 VCED exceptions : not available VCEI exceptions : not available Features : fpu mxu CPU implementer : Ingenic CPU architecture : MIPS Hardware : linden Revision : 0005 Serial : 0000000000000000 EFUSE0 : d075370b EFUSE1 : 02c00811 EFUSE2 : fc460000 EFUSE3 : 8a54c84f EFUSE4 : 00000000 EFUSE5 : 00000000 EFUSE6 : 00000000 EFUSE7 : 00000000
…and the Sysinfo dump:
ID=IML74K Product=linden Device=linden Board=unknown CPU ABI=mips CPU ABI 2=mips-r2 Manufacturer=ingenic Brand=Ingenic Model=iPPea Type=eng Tags=test-keys Finger Print=Ingenic/linden/linden:4.0.3/IML74K/eng.spark.20120901.003556:eng/test-keys Time=1346431472000 User=spark Host=spark Hardware=linden Radio=unknown Bootloader=unknown Incremental Version=eng.spark.20120901.003556 Release Version=4.0.3 SDK Version=15
Rooting the iPPea TV
Curiously, the iPPea comes with busybox built-in into the image. This will make working with the iPPea easier, as we don’t have to compile/download busybox and deploy it – full access to all the busybox tools is available by default.
But what makes rooting really easy is the fact that the makers of the iPPea handed the blessing of leaving ro.secure off. This means that a simple adb connection is enough to grant root access – all that we have to do is install a su binary.
Unfortunately, the busybox su requires too much baggage of the traditional Linux system – notably /etc/passwd, /etc/groups and friends to work. Since this is a MIPS system and Superuser.apk is contains an ARM binary, that approach cannot work either. In addition, compiling su-binary from Superuser.apk requires the entire AOSP tree, which is too much work and network bandwidth for us. So, we will use a portable C implementation of su instead.
This step does require you to plug in the iPPea into a computer with ADB, so be prepared to do so. You will also need this prebuilt portable MIPS Android su binary. Skip over these steps if you are using the prebuilt binary (these are instructions to compile it yourself with the Android NDK):
export ANDROID_NDK=/opt/android-ndk-r8c # set as you need $ANDROID_NDK/toolchains/mipsel-linux-android-4.6/prebuilt/linux-x86/bin/mipsel-linux-android-gcc --sysroot=$ANDROID_NDK/platforms/android-9/arch-mips -g su.c -o su
Now that you have the ‘su’ binary handy as well as your iPPea detected in adb (adb devices, you may need to chown it to make it visible), here we go:
adb push su /dev/ adb shell # now we are on the iPPea busybox mount -o remount,rw /system busybox mv /dev/su /system/bin/su busybox chmod 4755 /system/bin/su busybox mount -o remount,ro /system exit # now we are back to our computer adb reboot # to reboot
At this point we can put the iPPea back on the TV. If we open Term.apk and put in “su” and press Enter, we should have root:
And of course, once we have root access, the opportunities increase without bound – chrooted Debian/Linux, Android apps that require root, reformat and reflash with a custom ROM – the sky becomes the limit. We do, however, owe many thanks (and this is not meant to be sarcastic) to iPPea for leaving ro.secure at 0, allowing hobbyists to make better use of the hardware (which in itself is very neat).
Topics: Linux, Mobile | 21 Comments »
A simple su implementation in C
By admin | November 23, 2012
Sometimes, you might need to keep things simple. Here is a very simple su implementation written in portable C that can be used on almost any architecture – e.g. Embedded Linux, Android, Windows, etc as long as it supports C. It is licensed under the 3-clause BSD licence so any use is OK as long as credit is given:
/* * Simple su binary * Copyright (C) 2012 Compdigitec * http://www.compdigitec.com/labs/2012/11/23/a-simple-su-implementation-in-c/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Compdigitec nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include <unistd.h> #include <getopt.h> #include <stdio.h> #include <stdlib.h> #include <pwd.h> #define SHELL "/system/bin/sh" #define about() do { \ printf("Simple crude su binary\n"); \ printf("See http://www.compdigitec.com/labs/2012/11/23/a-simple-su-implementation-in-c/\n"); \ printf("su [-c <command>] [-h] [-v] [user id to su to, must be integer]\n"); \ } while(0) int main(int argc, char* argv[]) { char* command = NULL; int user = 0; // root int group = 0; struct option long_opts[] = { { "command", required_argument, NULL, 'c' }, { "help", no_argument, NULL, 'h' }, { "shell", required_argument, NULL, 's' }, { "version", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 }, }; int c; while((c = getopt_long(argc, argv, "+c:hsv", long_opts, NULL)) != -1) { switch(c) { case 'c': command = strdup(optarg); break; case 'h': about(); exit(EXIT_SUCCESS); break; case 'v': about(); exit(EXIT_SUCCESS); default: fprintf(stderr, "\n"); about(); exit(EXIT_SUCCESS); } } if(command == NULL) command = strdup(SHELL); if(optind < argc) { user = atoi( argv[optind++] ); } // Let's get the group ID as well. struct passwd* tempPwdPtr; #if 0 struct passwd theentry; char* buf = malloc(sysconf(_SC_GETGR_R_SIZE_MAX)); if(getpwuid_r(user, &theentry, buf, sysconf(_SC_GETGR_R_SIZE_MAX), &tempPwdPtr) == 0) { group = theentry.pw_gid; free(buf); } #else if((tempPwdPtr = getpwuid(user)) != NULL) { group = tempPwdPtr->pw_gid; } #endif //printf("Command: %s, User to run as: %i, GID = %i\n",command,user,group); setgid(group); setuid(user); system(command); free(command); return 0; }
Topics: Linux | 8 Comments »
Modifying Android settings from the filesystem / terminal
By admin | November 5, 2012
(Root access is required for this entire procedure; but root access is usually present on development builds anyway.) Normally, the built-in Settings app can be used on Android to change system settings. But if you’re on a development build where the settings app is broken and can’t be used, the Android settings database can be found at:
/data/data/com.android.providers.settings/databases/settings.db
Probably, you will need to cp the file to a place that any user can read from (e.g. /sdcard). Then, git pull the file and open it in SQLite Manager or something similar, and you can edit it. The most interesting table will probably be the “secure” table, where you can change the system settings.
Just use adb push to push the file back on the device, and use mv to move it to /data/data/com.android.providers.settings/databases/.
Topics: Mobile | 3 Comments »
Solving “libtool: Version mismatch error”
By admin | October 18, 2012
After ./configure and make, you get this interesting scenario:
libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1ubuntu1, but the libtool: definition of this LT_INIT comes from libtool 2.4. libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1ubuntu1 libtool: and run autoconf again. make[5]: *** [perl.lo] Error 63
The solution?
autoreconf -ivf
Topics: Linux | 4 Comments »
Quilt responding with “File series fully applied” and not working
By admin | October 15, 2012
The story so far…
quilt push -a
File series fully applied
git diff
(no output)
git status
# On branch master
nothing to commit (working directory clean)
What’s happening here? Well, it turns out that we need to reset and clean the .pc directory of quilt:
git reset --hard HEAD git clean -f -d rm -rf .pc
Now, let’s try applying the patches:
quilt push -a
Applying patch patch-number-one.patch
patching file configure.ac
Applying patch fix-build.patch
patching file src/diff.hpp
Now at patch fix-build.patch
Much better, no? And now it brings us to a point where we can now do dpkg-buildpackage -us -uc -b.
Topics: Linux | 3 Comments »
Libavcodec – native NEON compile vs hybrid mode
By admin | October 4, 2012
Background
Benchmarks using the latest VLC beta and benching whether a native build solely for NEON is faster or a hybrid build. The expectation is that the native build should be very slightly faster than the hybrid build. This is done on a TI OMAP 4460 (Galaxy Nexus). Method is same as previous benchmarks.
Results
Ironically, it appears that the hybrid build is slightly faster(?) than the native NEON build, although in practice there is no real difference for the user. So the proper result should be inconclusive.
Hybrid mean | 80.25% | Native NEON mean | 81.56% |
Hybrid median | 82.10% | Native NEON median | 82.80% |
Raw data
Hybrid build: 19453 126 10079 R 575m 82.6 1 72.0 org.videolan.vlc 19453 126 10079 S 593m 85.3 1 64.4 org.videolan.vlc 19453 126 10079 S 594m 85.4 1 85.0 org.videolan.vlc 19453 126 10079 S 594m 85.5 0 83.1 org.videolan.vlc 19453 126 10079 S 594m 85.5 0 81.8 org.videolan.vlc 19453 126 10079 S 597m 85.9 0 77.9 org.videolan.vlc 19453 126 10079 S 597m 85.9 0 85.6 org.videolan.vlc 19453 126 10079 S 597m 85.9 0 85.5 org.videolan.vlc 19453 126 10079 S 598m 85.9 0 81.6 org.videolan.vlc 19453 126 10079 S 598m 86.0 0 82.1 org.videolan.vlc 19453 126 10079 S 598m 86.0 1 83.8 org.videolan.vlc Native NEON build: 19703 126 10079 S 590m 84.8 0 68.4 org.videolan.vlc 19703 126 10079 S 589m 84.7 1 82.3 org.videolan.vlc 19703 126 10079 S 592m 85.1 1 81.1 org.videolan.vlc 19703 126 10079 S 592m 85.1 1 83.0 org.videolan.vlc 19703 126 10079 S 593m 85.2 1 81.0 org.videolan.vlc 19703 126 10079 S 593m 85.3 1 83.2 org.videolan.vlc 19703 126 10079 S 593m 85.3 1 82.8 org.videolan.vlc 19703 126 10079 S 594m 85.3 1 79.8 org.videolan.vlc 19703 126 10079 S 594m 85.4 1 83.8 org.videolan.vlc 19703 126 10079 S 594m 85.4 1 85.6 org.videolan.vlc 19703 126 10079 S 594m 85.4 1 86.2 org.videolan.vlc
Topics: Mobile | 6 Comments »
libmedia source code in Android 4.1 Jellybean
By admin | August 28, 2012
If you’ve been wondering where the libmedia.so sources (previously located at platform/frameworks/base/media/libmedia
) have gone in Android 4.1 “Jellybean”, it has been split to a new repository, platform/frameworks/av.
This was initially announced on Google Groups in April but it was not specified where the files were to be relocated to. Most Google searches for libmedia still show it to be under frameworks/base.
The specific commit that removed libmedia from frameworks/base was made by James Dong of Google. This note should help some of us who are searching for the new and updated libmedia source.
Topics: Mobile | 3 Comments »
Compiling GNU Nano for Android
By admin | July 13, 2012
If you just want a pre-built, ready to use version of Nano for Android, you can get the pre-built version.
The results of these steps include:
- GNU Nano 2.2.6 with statically-linked libncurses
- Compatibility with ≥ Android 2.1
- A working enter key, in adb shell and Term.apk
- A terminfo package
# Export toolchain for build export ANDROID_NDK=/opt/android-ndk-r8 export CC="$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/opt/android-ndk-r8/platforms/android-5/arch-arm" export CXX="ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ --sysroot=/opt/android-ndk-r8/platforms/android-5/arch-arm" # Build ncurses static lib wget ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz -O- | tar zxvf - cd ncurses-5.9/ # ../form/fty_num.c:226: error: 'struct lconv' has no member named 'decimal_point' # fty_num.c:(.text+0x280): undefined reference to `localeconv' patch -p0 << NcursesPatch --- form/fty_num.c 2012-07-13 23:04:53.914039027 -0400 +++ form/fty_num.c 2012-07-13 23:05:38.057484067 -0400 @@ -36,6 +36,12 @@ MODULE_ID("$Id: fty_num.c,v 1.28 2010/01/23 21:14:36 tom Exp $") +/* "MISSING FROM BIONIC - DEFINED TO MAKE libstdc++-v3 happy" */ +#ifdef HAVE_LOCALE_H +# undef HAVE_LOCALE_H +# define HAVE_LOCALE_H 0 +#endif + #if HAVE_LOCALE_H #include <locale.h> #endif NcursesPatch ./configure --with-normal --without-shared --without-cxx-binding --enable-root-environ --disable-widec --without-tests --host=arm-linux make -j3 # Nano 2.2.6 build cd .. wget http://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz -O- | tar zxvf - cd nano-2.2.6/ # Patch to get around bionic deficiencies patch -p0 << NanoAndroid --- src/chars.c 2012-07-13 22:02:21.741210225 -0400 +++ src/chars.c 2012-07-13 22:04:02.887938640 -0400 @@ -79,6 +79,7 @@ return ((unsigned int)c == (unsigned char)c); } +/* static void mbtowc_reset(void) { IGNORE_CALL_RESULT(mbtowc(NULL, NULL, 0)); @@ -88,6 +89,7 @@ { IGNORE_CALL_RESULT(wctomb(NULL, 0)); } +*/ /* This function is equivalent to isalnum() for multibyte characters. */ bool is_alnum_mbchar(const char *c) --- src/files.c 2012-07-13 22:13:35.516739719 -0400 +++ src/files.c 2012-07-13 22:13:38.796698486 -0400 @@ -2237,13 +2237,16 @@ tilde_dir = mallocstrncpy(NULL, buf, i + 1); tilde_dir[i] = '\0'; + /* do { userdata = getpwent(); } while (userdata != NULL && strcmp(userdata->pw_name, tilde_dir + 1) != 0); endpwent(); - if (userdata != NULL) - tilde_dir = mallocstrcpy(tilde_dir, userdata->pw_dir); + */ + char* home = getenv("HOME"); + if (home != NULL) + tilde_dir = mallocstrcpy(tilde_dir, home); } retval = charalloc(strlen(tilde_dir) + strlen(buf + i) + 1); @@ -2340,7 +2343,7 @@ assert(buf != NULL && num_matches != NULL && buf_len > 0); *num_matches = 0; - +#if 0 while ((userdata = getpwent()) != NULL) { if (strncmp(userdata->pw_name, buf + 1, buf_len - 1) == 0) { /* Cool, found a match. Add it to the list. This makes a @@ -2362,7 +2365,7 @@ } } endpwent(); - +#endif return matches; } --- src/nano.c 2012-07-13 22:49:46.001453034 -0400 +++ src/nano.c 2012-07-13 22:51:23.860222781 -0400 @@ -1534,6 +1534,12 @@ } #endif + /* Workaround for enter key */ + /* https://github.com/Evervolv/android_external_nano/commit/7b568f0b417c1fe3fe8597c600bdbcda4837013f */ + if (input == 10) { + input = NANO_CONTROL_M; + } + /* Check for a shortcut in the main list. */ s = get_shortcut(MMAIN, &input, meta_key, func_key); --- src/prompt.c.old 2012-07-13 22:51:47.839921315 -0400 +++ src/prompt.c 2012-07-13 22:51:49.615898989 -0400 @@ -87,6 +87,10 @@ } #endif + if (input == 10) { + input = NANO_CONTROL_M; + } + /* Check for a shortcut in the current list. */ s = get_shortcut(currmenu, &input, meta_key, func_key); NanoAndroid ./configure --disable-rpath --disable-nls --host=arm-linux --disable-color --disable-utf8 --disable-browser CFLAGS="-I$PWD/../ncurses-5.9/include" LIBS="$PWD/../ncurses-5.9/lib/libncurses.a" LDFLAGS="-L$PWD/../ncurses-5.9/lib" make -j3 # Create a terminfo package (skip if you already have one) tar cvf terminfo.tar -C /lib terminfo/ adb push terminfo.tar /data/local/tmp # deploy to phone adb push ./src/nano /data/local/tmp adb shell # On Android phone now: cd /data/local/tmp tar xf terminfo.tar # skip if you did not do "create a terminfo package" above export TERMINFO=./terminfo # or wherever your terminfo is # Run nano on Android phone ./nano # If you get an error like Error opening terminal: vt100. # It means that you did not do the TERMINFO thing properly.
Topics: Mobile | 7 Comments »
Android MPEG-2 benchmarks
By admin | July 12, 2012
VLC for Android beta benchmarks (July 12, 2012) for the MPEG-2 format. Specs and method are the same as in the audio benchmarks.
MPEG-2 sample
http://streams.videolan.org/samples/MPEG2/dvd.mpeg
Skip to
ARMv6 without VFP
Results – libmpeg2
libmpeg2 Mean: 72.99% Median: 72.80% Mode: N/A |
libavcodec Mean: 73.17% Median: 73.70% Mode: 71.50% |
MPEG-2 with libmpeg2 (ARMv6 without VFP)
--no-audio --codec libmpeg2,none PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/VLC(14999): using decoder module "libmpeg2" 14999 6998 10076 S 185m100.4 0 76.9 org.videolan.vlc 14999 6998 10076 S 189m102.7 0 72.8 org.videolan.vlc 14999 6998 10076 S 195m105.5 0 70.1 org.videolan.vlc 14999 6998 10076 S 199m107.9 0 74.6 org.videolan.vlc 14999 6998 10076 S 204m110.3 0 71.6 org.videolan.vlc 14999 6998 10076 S 204m110.4 0 76.1 org.videolan.vlc 14999 6998 10076 S 204m110.4 0 78.3 org.videolan.vlc Pass 2: D/VLC(15048): using decoder module "libmpeg2" 15048 6998 10076 S 186m100.8 0 71.4 org.videolan.vlc 15048 6998 10076 S 190m102.8 0 71.9 org.videolan.vlc 15048 6998 10076 S 195m105.7 0 66.0 org.videolan.vlc 15048 6998 10076 S 200m108.2 0 72.4 org.videolan.vlc 15048 6998 10076 S 205m111.0 0 69.6 org.videolan.vlc 15048 6998 10076 S 206m111.6 0 76.3 org.videolan.vlc 15048 6998 10076 S 206m111.6 0 80.5 org.videolan.vlc Pass 3: D/VLC(15085): using decoder module "libmpeg2" 15085 6998 10076 S 172m 93.1 0 66.6 org.videolan.vlc 15085 6998 10076 S 183m 99.3 0 69.8 org.videolan.vlc 15085 6998 10076 S 185m100.1 0 72.7 org.videolan.vlc 15085 6998 10076 S 188m101.7 0 72.9 org.videolan.vlc 15085 6998 10076 S 191m103.3 0 73.6 org.videolan.vlc 15085 6998 10076 S 192m104.1 0 74.8 org.videolan.vlc 15085 6998 10076 S 193m104.8 0 73.8 org.videolan.vlc
MPEG-2 with libavcodec (ARMv6 without VFP)
--no-audio --codec avcodec,none PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/VLC(15163): using decoder module "avcodec" 15163 6998 10076 S 185m100.1 0 65.0 org.videolan.vlc 15163 6998 10076 S 185m100.3 0 69.1 org.videolan.vlc 15163 6998 10076 S 189m102.4 0 69.9 org.videolan.vlc 15163 6998 10076 S 194m105.0 0 72.5 org.videolan.vlc 15163 6998 10076 S 199m107.8 0 75.5 org.videolan.vlc 15163 6998 10076 S 204m110.7 0 72.9 org.videolan.vlc 15163 6998 10076 S 207m112.3 0 76.3 org.videolan.vlc Pass 2: D/VLC(15199): using decoder module "avcodec" 15199 6998 10076 S 185m100.0 0 75.4 org.videolan.vlc 15199 6998 10076 S 188m101.8 0 74.8 org.videolan.vlc 15199 6998 10076 S 184m 99.5 0 74.1 org.videolan.vlc 15199 6998 10076 S 188m102.0 0 71.6 org.videolan.vlc 15199 6998 10076 S 193m104.4 0 73.5 org.videolan.vlc 15199 6998 10076 S 195m105.4 0 71.5 org.videolan.vlc 15199 6998 10076 S 195m105.4 0 76.7 org.videolan.vlc Pass 3: D/VLC(15227): using decoder module "avcodec" 15227 6998 10076 S 187m101.4 0 75.9 org.videolan.vlc 15227 6998 10076 S 191m103.4 0 73.8 org.videolan.vlc 15227 6998 10076 S 196m106.1 0 73.7 org.videolan.vlc 15227 6998 10076 S 201m108.9 0 71.3 org.videolan.vlc 15227 6998 10076 S 206m111.7 0 71.5 org.videolan.vlc 15227 6998 10076 S 208m112.7 0 75.2 org.videolan.vlc 15227 6998 10076 S 208m112.7 0 76.4 org.videolan.vlc
ARMv7 with NEON
Results – libmpeg2
libmpeg2 Mean: 49.95% Median: 50.5% Mode: 51.6% |
libavcodec Mean: 57.01% Median: 58.3% Mode: 59.9% |
MPEG-2 with libmpeg2 (ARMv7 with NEON)
--no-audio --codec libmpeg2,none PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/VLC(11577): using decoder module "libmpeg2" 11577 119 10033 S 526m 75.6 0 51.0 org.videolan.vlc 11577 119 10033 S 526m 75.6 0 50.5 org.videolan.vlc 11577 119 10033 S 526m 75.6 0 50.9 org.videolan.vlc 11577 119 10033 S 525m 75.5 1 50.4 org.videolan.vlc 11577 119 10033 S 526m 75.6 1 49.0 org.videolan.vlc 11577 119 10033 S 526m 75.7 1 51.3 org.videolan.vlc 11577 119 10033 S 526m 75.7 1 51.6 org.videolan.vlc Pass 2: D/VLC(11632): using decoder module "libmpeg2" 11632 119 10033 S 525m 75.5 0 49.3 org.videolan.vlc 11632 119 10033 S 524m 75.4 0 51.2 org.videolan.vlc 11632 119 10033 S 525m 75.4 1 50.7 org.videolan.vlc 11632 119 10033 S 525m 75.5 0 49.5 org.videolan.vlc 11632 119 10033 S 525m 75.5 1 46.8 org.videolan.vlc 11632 119 10033 S 525m 75.5 0 49.5 org.videolan.vlc 11632 119 10033 S 525m 75.5 0 48.6 org.videolan.vlc Pass 3: D/VLC(11683): using decoder module "libmpeg2" 11683 119 10033 S 527m 75.7 0 50.2 org.videolan.vlc 11683 119 10033 S 527m 75.7 0 51.4 org.videolan.vlc 11683 119 10033 S 527m 75.7 0 51.6 org.videolan.vlc 11683 119 10033 S 527m 75.7 0 51.7 org.videolan.vlc 11683 119 10033 S 526m 75.7 0 42.1 org.videolan.vlc 11683 119 10033 S 526m 75.7 0 52.0 org.videolan.vlc 11683 119 10033 S 527m 75.7 1 49.6 org.videolan.vlc
MPEG-2 with libavcodec (ARMv7 with NEON)
--no-audio --codec avcodec,none PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/VLC(11099): using decoder module "avcodec" 11099 119 10033 S 534m 76.8 0 57.9 org.videolan.vlc 11099 119 10033 S 534m 76.8 0 58.9 org.videolan.vlc 11099 119 10033 S 534m 76.8 1 58.3 org.videolan.vlc 11099 119 10033 S 534m 76.8 0 54.1 org.videolan.vlc 11099 119 10033 S 534m 76.8 1 56.3 org.videolan.vlc 11099 119 10033 S 534m 76.8 1 59.9 org.videolan.vlc 11099 119 10033 S 535m 76.9 1 58.6 org.videolan.vlc Pass 2: D/VLC(11375): using decoder module "avcodec" 11375 119 10033 S 526m 75.6 1 44.7 org.videolan.vlc 11375 119 10033 S 528m 76.0 1 54.8 org.videolan.vlc 11375 119 10033 S 528m 76.0 1 59.7 org.videolan.vlc 11375 119 10033 S 528m 76.0 0 62.6 org.videolan.vlc 11375 119 10033 S 528m 76.0 1 59.8 org.videolan.vlc 11375 119 10033 S 529m 76.0 0 56.9 org.videolan.vlc 11375 119 10033 S 529m 76.0 0 58.7 org.videolan.vlc Pass 3: D/VLC(11431): using decoder module "avcodec" 11431 119 10033 S 528m 75.9 1 53.9 org.videolan.vlc 11431 119 10033 S 528m 75.9 1 56.0 org.videolan.vlc 11431 119 10033 S 528m 75.9 0 59.9 org.videolan.vlc 11431 119 10033 S 528m 75.9 0 55.6 org.videolan.vlc 11431 119 10033 S 528m 76.0 1 49.5 org.videolan.vlc 11431 119 10033 S 528m 76.0 0 59.5 org.videolan.vlc 11431 119 10033 S 528m 76.0 0 61.7 org.videolan.vlc
Topics: Mobile | 4 Comments »
When git am fails, use 3way
By admin | July 3, 2012
git am 0001-Very-valuable-piece-of-art.patch
Applying: Very valuable piece of art
error: patch failed: Apple.java:212
error: Apple.java: patch does not apply
error: patch failed: Window.java:840
error: Window.java: patch does not apply
Patch failed at 0001 Very valuable piece of art
When you have resolved this problem run “git am –resolved”.
If you would prefer to skip this patch, instead run “git am –skip”.
To restore the original branch and stop patching run “git am –abort”.
What to do? –3way to the rescue!
git am --3way
Applying: Very valuable piece of art
Using index info to reconstruct a base tree…
Falling back to patching base and 3-way merge…
Auto-merging Apple.java
Auto-merging Window.java
Smooth.
Topics: Linux | 5 Comments »