Knut-Olav Hoven Alt om ingenting og litt i mellom

Unstable video capture with DC10+ on Ubuntu 10.10

28. november 2010 · Comments Off

Some weeks ago I wrote about capturing video with an old Pinnacle DC10+ card on Ubuntu 10.10.

Since then I have had varying success capturing hours of video from both Hi8 and VHS sources. Often lavrec will exit in the middle of a recording with somewhat unknown error messages such as:


# dmesg:
DC10plus[0]: jpg_sync - timeout: codec isr=0x00

# lavrec:
Error syncing on a buffer: Timer expired

… and other nicies.

Often this happened between recordings on the tape, when stopping and starting a recording, where it often occur a lot of noise and jitter. It happened more often when recording from VHS tapes than from HI8 tapes.

I tried different values for the system configuration kernel.sched_time_avg with what looks like random improvements. The default is 1000 on a normal Ubuntu Desktop 10.10. I have tried both 100 and 250, and 250 is what I am currently using. Change it like this:


$ sudo sysctl kernel.sched_time_avg=250

I was previously using KDE while recording, but found out that several background processes like Akonadi Server was running and stealing resources. The window manager seemed slow. I guess I have an I/O issue somewhere, but I just don’t know where. Maybe the SCSI drive or maybe the graphics card which is an old ATI Radeon 8500.

I an now running Openbox with Konsole, as a command line (in an X server) is all I need to both record and watch the result with mplayer afterwards. I feel it goes a little bit smoother.

The most effect, as I figured out, was setting the quality option of lavrec a little lower. Recording with the quality set to 100 might result in unstable recording with lost frames if there is the slightest delay in the system, and eventually lavrec just exits with an error.

I tried setting the quality to 80, just to give it a try, and it was recording much more smoothly with less dropped frames. It looks like lavrec now handles jitter much better.

I am now trying out a quality of 90 which also seems good. A little lost frames now and then, but I guess that occurs mostly between recordings since I am able to record several minutes from a single scene without a single frame drop.

This is the command I use now:


$ aoss lavrec --mjpeg-buffers 512 --mjpeg-buffer-size 8192 -f q -d 1 -i p -q 90 -s -R l -U "dc10-%02d.mov"

So, my best tip to avoid lost frames and lavrec crashes is to lower the quality a little.

Video capture the old way on new Ubuntu 10.10

6. november 2010 · 3 Kommentarer

Like probably many people, I have a lot of old analog video recordings on HI-8 and VHS tape I just have forgotten to keep up to date with technology. I guess it’s time to start capturing video. Soon…

First, the camcorders charger is broken, and buying a new one is kind of difficult, but luckily, I got to borrow one from some friends.
Second, I managed to find the last working VHS player I got. A little dusty.
Third, since Mini-DV is kind of legacy as well, I decided to copy those on to my computer as well, if I ever manage to find the camcorder. Got the charger, remote and the casing, but no camcorder. Oh well…

Find the best composite or S-Video cables you can dig up, because this job you only want to do once. I got my overly priced Monster composite cables, ready to start. Soon…

Ok, so I’ve got an analog video capture card that I, in the old days, used with Windows 98 and pulled my hair out to get working on Windows 2000. The card is a Zoran based Pinnacle/Miro DC10+. That’s history. Sort of. I still got the video capture card.

What I also got is the latest Ubuntu Linux 10.10, also known as Ubuntu Maverick, which comes with the somewhat great ALSA audio support. I say somewhat because this version of Ubuntu lacks the legacy OSS compability driver in the Linux kernel. In other words it makes it harder to record or play audio from older kinds of programs, such as lavrec.

lavrec is the video and audio capture application from the MJPEG video tools package. It is the tool recommended for capturing video from the DC10+ card on Linux, but it lacks ALSA support. However, you can get a OSS wrapper program named aoss from the Ubuntu alsa-oss package which provides OSS is most cases for those old applications.

This is how I do video and audio recording, from the command line, enter something like this:


$ aoss lavrec -f a -i p -q 100 -s -R l -U dc10-out.avi

Make sure that the correct recording input line is selected for CAPTURE in alsamixer -V capture such as Line or Mic. I recommend you capture a 10 second test and check the sound.

How to build PHP extension tidy as shared object

26. oktober 2010 · Comments Off

If you already got a PHP installation setup, you may need another extension/module from the PHP source tree.

You can build and install that single module from the source while keeping the rest of the PHP installation intact, but the documentation of building shared PHP modules is poor.

In my case I needed the tidy extension, and here’s how to do it


 $ # extract the PHP source code and enter the directory
 $ ./configure --with-tidy=shared
 $ find . -name tidy.so

Then copy the tidy.so file to the modules directory of the PHP installation.

The important part here is the shared keyword, which is poorly documented. I had to inspect a RPM spec file to figure it out.

Den første harddisken jeg ikke har klart å redde… var min egen

14. oktober 2010 · Comments Off

Jeg har flere ganger klart å gjenopprette data fra en krasjet datamaskin. Ofte er dette for å hjelpe familie og bekjente som har fått maskinen sin infisert med virus og annet grums, mens andre ganger har jeg måttet ta ddrescue til hjelp. Denne gangen derimot klarte ikke ddrescue å hjelpe meg. Harddisken hadde begynt å spille musikk og hørtes ut som et orgel på steroider.

Det så ut til at jeg bare måtte la det gamle OpenBSD-installasjonen gå dukken, finne fram en annen gammel harddisk og installere OpenBSD på nytt.

Heldigvis hadde jeg tatt backup, men dessverre ikke av alt. Jeg manglet backup av nettverksinnstillingene og av DNS-serverinnstillingene.

Heldigvis klarte jeg å montere opp noen av partisjonene på disken og kopiere ut resten av konfigurasjonen.

Så nå er en flunkende ny installasjonen av OpenBSD på plass, så noe godt kom ut av dette. Jeg har ennå ikke satt opp backuprutine for denne maskinen, så jeg lærer tydeligvis seint…

MySQL, PHP, MDB2 og NULL-problemer

2. oktober 2010 · Comments Off

MDB2 har en fin kompatibilitetsliste for å kompansere for problemer i Oracle SQL, men disse er også aktivert for andre databaser.

Med andre ord så blir tomme strenger (“”) behandlet som NULL. Dermed rapporterer MySQL med en feilmelding dersom du forsøker å sette en tom streng i et “NOT NULL”-felt. Hurra!

Heldigvis går det an å skru av kompatibilitetslagene i MDB2.

JavaZone jz10 dag 2

19. september 2010 · Comments Off

Nå er det riktignok gått halvannen uke siden JavaZone var over, men en kort oppsummering av dag to kan allikevel tillates.

På den andre dagen, 9. september, lærte jeg litt om “Matching Engines”, om høye krav til ytelse og nøyaktighet og fikk virkelig innblikk i at tid koster penger, spesielt på nedetid.

Videre lærte jeg ikke så mye nytt om offentlige data. Synd at hele panelet utelukkende bestod av folk som ønsker fri tilgang til offentlige data, men ingen med myndighet til å kunne gjøre noe med det.

Så skulle jeg lære om hva jeg gjør feil med domenedrevet design (DDD), men foredragsholderen var forsinket, så jeg sneik meg inn på en sesjon om planlegging og å ta valg i utviklingsteam. Spesielt én ting fant jeg svært interessant, å premiere feiling for å oppmuntre til å ta sjanser og utfordre seg selv.

Videre lærte jeg hvordan man kan implementere Dungeon and Dragons i RESTful web services basert på prinsippene rundt HATEOAS, å bruke HTTP som motoren til å drive tilstand i applikasjoner.

Så lærte jeg at man må kjøpe Coherence for å bekjempe ytelsesproblemer i systemer. Et foredrag med stort preg av å selge inn Oracle-produktet, dessverre.

Så forvillet jeg meg inn på et foredrag om vedlikehold og utvikling av legacy-systemer.

Til slutt så fikk jeg med meg foredraget om domenedrevet design som ble satt opp. Greit å bli oppdatert på de mer vanskelige aspektene rundt denne teknikken, og selv om foredraget var kort så passet det egentlig bra som avslutning på JavaZone.

Nå er video av foredragene lagt ut på java.no. Har allerede sett noen lyntaler og lengre foredrag, og kan anbefale lyntalene om “97 things every programmer should know” og “Hjemmelaget er bedre enn takeout”, hvor begge lufter tanker om å kaste idéer og kode som blir for vanskelige å integrere eller som kommer i veien.

Selv så er jeg dårlig på å kaste kode, men jeg har i det siste kastet kode et par ganger, og selv om det gjør vondt der og da, så savner jeg ikke koden jeg skrev. Det er faktisk deilig å ikke ha uinnsjekket kode liggende over lengre tid.

Det jeg skal ta med videre fra JavaZone 2010 er idéene rundt HATEOAS og event drevet arkitektur. Sistnevnte har jeg allerede utforsket mye på fra før, og dette er motoren for å dytte data rundt i prosjektet jeg for tiden jobber på.

JavaZone jz10 dag 1

9. september 2010 · Comments Off

Dag 1 er over for JavaZone 2010. Det har vært mange temaer og tankene svever nå litt rundt i skyen foreløpig.

Jeg lærte i dag at hvis man plasserer en Map/Reduce-jobb hos Amazon, så tar det ca 30 ganger lenger tid å kjøre enn på en laptop.

Jeg lærte at hvis webappen din sliter under høy last mot eksterne ressurser, så legg inn sleep(1).

Jeg lærte at Collaborative Filtering kan være et spennende tiltak for å gi noe ekstra tilbake til brukerne.

Jeg lærte at det finnes mange tilnærminger til eventdrevet design.

Jeg lærte at Datalagringsdirektivet har forkjempere og motstandere som ikke alltid klarer å finne ut hvordan livets, trygghetens og frihetens vektskål skal balanseres.

Jeg lærte at RESTful ikke handler om XML og pene URL-er, men om å håndtere state mellom klient og tjener og at resten er bare hjelpemidler for å komme seg dit.

Jeg lærte at det finnes alltid et sikkerhetstiltak som man ikke har tenkt på eller ikke har forstått konsekvensene av.

Jeg lærte at Java har en tung vei å gå for å skape typeorienterte vaner.

Jeg lærte at man bør ha fulladet telefon før man drar på JavaZone.

Enkel virtualisering med KVM

2. september 2010 · Comments Off

Mest som et notat for min egen del, men det kan være nyttig for andre også.

Jeg hadde nettopp behov for å sette opp et utvikler driftsmiljø for en PHP-applikasjon jeg skriver. Jeg ønsket ikke å sette den opp på arbeidsstasjonen min da jeg ikke ønsker å male meg opp i et hjørne dersom denne skal byttes ut eller oppgraderes. Det å sette opp et driftsmiljø er noe kjedelig dersom det må gjøres for ofte. Bestemte meg derfor å teste ut KVM.

KVM og QEMU er noenlunde like, på en måte, hvorav KVM er maskinvareakselerert virtualisering. QEMU støtter virtualisering av flere plattformer, dersom man har behov det.

Etter et par søk på Google fant jeg fram til artikkelen Using Linux KVM Virtualization on Ubuntu Gutsy Gibbon 7.10 som beskriver veldig enkelt en del kommandoer man kan kjøre.

Jeg lastet ned nyeste Ubuntu. Først forsøkte jeg amd64-versjonen, men denne fungerte ikke da jeg tydeligvis kjørte i686-versjon av Ubuntu på vertsmaskinen. Selv om CPU-en støtter 64bit så er det OS-et som må støtte 64 bit dersom du ønsker å kjøre 64-bit gjeste-OS i KVM. Så jeg endte opp med å laste ned i386-versjonen av Ubuntu Lucid.


$ qemu-img create lucid-server.img -f qcow2 10G
$ kvm -no-acpi -m 750 -cdrom $HOME/ubuntu-10.04.1-server-i386.iso -boot d  -k no -vnc :2 lucid-server.img

Legg merke til opsjonen “-vnc :2″ som gjør at KVM setter opp en VNC-server på port 5902. Dette gjorde jeg fordi jeg ikke ønsker at vinduet med den virtuelle serveren skal vises på vertsmaskinen, men jeg vil allikevel ha muligheten til å se skjermbildet. Dette er strengt tatt også nødvendig for å installere Ubuntu. :)

PS: Sånn helt på tampen… boota nettopp Ubuntu 10.04 i KVM på en 3 år gammel maskin… vips var loginskjermen der – rask! :D

OPPDATERING:
For å sette opp bridge-nettverk slik at den virtuelle maskinen kan motta IP-adresse fra DHCP, så må du konfigurere et bridge-grensesnitt på vertsmaskinen. På Ubuntu gjør du det ved å legge til følgende i /etc/network/interfaces:


auto br0
iface br0 inet dhcp
    bridge_ports    eth0
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

Du må reloade nettverksinnstillingene:

/etc/init.d/networking restart

Til kvm-kommandoen for å starte den virtuelle maskinen legger du til følgende opsjoner:


-net nic,vlan=0 -net tap,vlan=0,ifname=tun0

Ladekabel og datakabel for HTC Desire – Micro USB

24. juli 2010 · Comments Off

Jeg fant ut i dag noe jeg mistenkte for noen dager siden, at ladekabelen til HTC-telefoner som jeg kjøpte på Elkjøp ikke var en fullkommen Micro USB-datakabel, men bare en ladekabel. Det kom ikke noe opp i loggene og dmesg da jeg kobla telefonen til PC-en, ingen nye enheter ble detektert.

Jeg bestilte så en helt vanlig Micro USB-kabel på Komplett.no, henta den på Posten i dag og testa, og vips så dukka den opp på PC-en og telefonen ble satt i synkroniseringsmodus.

Fra dmesg:


[1668040.520065] usb 2-1: new high speed USB device using ehci_hcd and address 16
[1668040.683373] usb 2-1: configuration #1 chosen from 1 choice
[1668040.699678] scsi9 : SCSI emulation for USB Mass Storage devices
[1668040.700616] usb-storage: device found at 16
[1668040.700622] usb-storage: waiting for device to settle before scanning
[1668045.710103] usb-storage: device scan complete
[1668045.716922] scsi 9:0:0:0: Direct-Access     HTC      Android Phone    0100 PQ: 0 ANSI: 2
[1668045.755374] sd 9:0:0:0: [sdb] 7698432 512-byte hardware sectors: (3.94 GB/3.67 GiB)
[1668045.757120] sd 9:0:0:0: [sdb] Write Protect is off
[1668045.757128] sd 9:0:0:0: [sdb] Mode Sense: 03 00 00 00
[1668045.757133] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[1668045.817134] sd 9:0:0:0: [sdb] 7698432 512-byte hardware sectors: (3.94 GB/3.67 GiB)
[1668045.818298] sd 9:0:0:0: [sdb] Write Protect is off
[1668045.818300] sd 9:0:0:0: [sdb] Mode Sense: 03 00 00 00
[1668045.818302] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[1668045.818308]  sdb: sdb1
[1668046.067608] sd 9:0:0:0: [sdb] Attached SCSI removable disk

lsusb:


Bus 002 Device 023: ID 0bb4:0ffe High Tech Computer Corp.

Husk å aktivere debugging på telefonen hvis du skal koble til med Android SDK adb.