Kino
Installazione Kino
Fedora / Scientific Linux
diventare root: (andiamoci piano)
su -
inserire password di root
- installare kino
yum install -y kino ieee1394-kmdl-`uname -r`
Compilazione
wget http://kent.dl.sourceforge.net/sourceforge/kino/kino-1.3.0.tar.gz.gz tar zxvf kino-1.3.0.tar.gz cd kino-1.3.0/
install build dependencies
RedHat - Scientific Linux / Fedora
yum -y install perl-XML-Parser libdv-devel libraw1394-devel \ libavc1394-devel libiec61883-devel libXv-devel \ libxml2-devel libXi-devel glib-devel gtk+-devel \ glib2-devel gtk2-devel libglade2-devel \ libsamplerate-devel gcc-c++ intltool
Debian - Ubuntu / Kubuntu
aptitude install kino gettext gettext-base perl-XML-Parser libdv-dev \ libavc1394-dev libiec61883-dev libXv-dev libxml2-dev \ libraw1394-dev libXi-dev glib-dev gtk+-dev glib2-dev \ gtk2-dev libglade2-dev libsamplerate-dev gcc-c++ libdv-dev \ build-essential libdv4-dev libraw1394-8
- configurare e compilare
./configure && make make install
- poi spostare il kino del repositorio e linkare il nuovo
mv /usr/bin/kino /usr/bin/kino-1.1.1;ln -s /usr/local/bin/kino /usr/bin/kino
o
mv /usr/bin/kino /usr/bin/kino-1.3.0;ln -s /usr/local/bin/kino /usr/bin/kino
Configurare Kino
Directories
Audio
- Utilizzare /dev/dsp come dispositivo se l'audio va troppo fuori sync, cambiandolo dalle Preferenze->Audio
Video
Problemi
- Kino si chiude quando si passa da una schermata all'altra:
Molto probabilmente il problema è nell'audio, cambiare le impostazioni come descritto sopra in "Audio".
- Kino dice che ha dei problemi con '/dev/raw1394':
verificare che la macchina veda il raw fireware: (da un terminale)
ls -l /dev/raw1394
- se l'output è il seguente ( fare caso a rw-r----- )
crw-r----- 1 root root 171, 0 3 dic 16:08 /dev/raw1394
sarà necessario cambiare i permessi del dispositivo (necessaria pass di root)
su - chmod 777 /dev/raw1394
Poi chiudere kino, spegnere la telecamera e riconminciare
- se l'output invece è un errore del tipo
ls: impossibile accedere a /dev/raw1394: No such file or directory
vuoldire che non si è caricato il modulo o il dispositivo firewire non è riconosciuto, provare a installare il modulo: (necessaria pass di root)
su - yum -y install ieee1394-kmdl-`uname -r` --enablerepo atrpms
Scientific Linux >= 5.1
In SL5.1 cambia il pacchetto libraw1394 e si aggiorna alla versione 3, ma il resto dei pacchetti che lo utilizzano non lo gradiscono. così sarà necessario forzare la rimozione della nuova versione e installare il vecchio pacchetto:
wget agenziami.net/bin/libraw1394-1.2.1-1.fc6.i386.rpm wget agenziami.net/bin/libraw1394-devel-1.2.1-1.fc6.i386.rpm rpm -e libraw1394 libraw1394-devel --nodeps rpm -Uvh libraw1394-1.2.1-1.fc6.i386.rpm rpm -Uvh libraw1394-devel-1.2.1-1.fc6.i386.rpm yum -y install ieee1394-kmdl-`uname -r` --enablerepo atrpms
- Sarà necessario ricompilare kino (se non si usa un pacchetto precompilato)
Ubuntu/Kubuntu
- E' necessario caricare il modulo raw1394 all'avvio:
sudo echo raw1394 >> /etc/modules
Fedora >= 8
1. install the old firewire driver by installing the following 2 packages now offered by ATrpms
ieee1394 ieee1394-kmdl
(use rpm, yum or Fedora's "Add/Remove Software") This step will have to be repeated on every kernel update until the new firewire driver works.
2. install the libraw1394 packages from ATrpms
libraw1394_8 libraw1394
after (force) removing the Fedora libraw1394 package if any
yum install ieee1394 ieee1394-kmdl.i686 libraw1394_8 libraw1394 --enablerepo atrpms
3. disable the new work-in-progress firewire driver by adding the following 2 lines
blacklist firewire_core blacklist firewire_ohci
to
/etc/modprobe.d/blacklist
4. reboot
5. change permission (ownership) on /dev/raw1394
chown <user> /dev/raw1394
where <user> is the name of currently logged in (non-root) user This step will have to be performed after every reboot (but could perhaps be avoided using a udev rule)
Bugs
Crash!
Kino experienced a segmentation fault. Dumping stack from the offending thread Obtained 9 stack frames. kino(cos+0x482) [0x4432b2] /lib64/libc.so.6 [0x3086030070] /usr/lib64/libdv.so.4(dv_decode_audio_block+0x29f) [0x308120d5df] /usr/lib64/libdv.so.4(dv_decode_full_audio+0x7b) [0x30812054ab] kino(_ZNK5Frame12ExtractAudioEPv+0x42) [0x470dd2] kino(_ZN14FrameDisplayer8PutSoundER5Frame+0x12f) [0x4771bf] kino [0x4847e2] /lib64/libpthread.so.0 [0x3086c061b5] /lib64/libc.so.6(clone+0x6d) [0x30860cd36d] Done dumping - exiting.
Kino experienced a segmentation fault. Dumping stack from the offending thread Obtained 3 stack frames. kino [0x8083911] [0x110400] /lib/libm.so.6(logf+0x32) [0x920092] Done dumping - exiting.
>> (frame 0 )annunci_dimissioni_veltroni001.dv >>> Trying /net/storage/export/redazione/consolidato/prova001.dv >>> (split) UpDB /usr/scripts/arkino.sh UpdateDB 'annunci_dimissioni_veltroni001.dv' '/net/storage/export/redazione/consolidato/prova001.dv' '00:01:23:10' '00:01:57:00' '0' sede ami > idclip 2759 ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`primary_db/clip_cut`, CONSTRAINT `clip_cut_ibfk_9` FOREIGN KEY (`Idnastro`) REFERENCES `nastri` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) >>> Trying /net/storage/export/redazione/consolidato/prova002.dv >>> (split) UpDB /usr/scripts/arkino.sh UpdateDB 'annunci_dimissioni_veltroni001.dv' '/net/storage/export/redazione/consolidato/prova002.dv' '00:02:45:24' '00:02:46:23' '1' sede ami > idclip 2759 ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`primary_db/clip_cut`, CONSTRAINT `clip_cut_ibfk_9` FOREIGN KEY (`Idnastro`) REFERENCES `nastri` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) >>> Trying /net/storage/export/redazione/consolidato/prova003.dv >>> (split) UpDB /usr/scripts/arkino.sh UpdateDB 'annunci_dimissioni_veltroni001.dv' '/net/storage/export/redazione/consolidato/prova003.dv' '00:02:46:24' '00:02:51:23' '2' sede ami > idclip 2759 ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`primary_db/clip_cut`, CONSTRAINT `clip_cut_ibfk_9` FOREIGN KEY (`Idnastro`) REFERENCES `nastri` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) >>> Trying /net/storage/export/redazione/consolidato/prova004.dv >>> (split) UpDB /usr/scripts/arkino.sh UpdateDB 'annunci_dimissioni_veltroni001.dv' '/net/storage/export/redazione/consolidato/prova004.dv' '00:02:51:24' '00:03:22:10' '3' sede ami > idclip 2759 ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`primary_db/clip_cut`, CONSTRAINT `clip_cut_ibfk_9` FOREIGN KEY (`Idnastro`) REFERENCES `nastri` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) >>> Trying /net/storage/export/redazione/consolidato/prova005.dv >> Last UpDB /usr/scripts/arkino.sh UpdateDB 'annunci_dimissioni_veltroni001.dv' '/net/storage/export/redazione/consolidato/prova005.dv' '00:05:25:12' '00:05:49:18' '4' sede ami > idclip 2759 ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`primary_db/clip_cut`, CONSTRAINT `clip_cut_ibfk_9` FOREIGN KEY (`Idnastro`) REFERENCES `nastri` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) >> FLV,JPG konsole --script -e /usr/scripts/arkino.sh ConvertiCon '/net/storage/export/redazione/consolidato/prova005.dv' konsole: Opzione «script» sconosciuta. konsole: Usa --help per ottenere la lista delle opzioni a riga di comando disponibili.
AMI Kino Development
Patch a page_export_avi.cc
[root@services05 data]# diff amikino-1.3.0/src/page_export_avi.cc kino-1.3.0/src/page_export_avi.cc 32,33d31 < #include <unistd.h> < 71,86d68 < < outerToggle < = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), < "checkbutton_export_avi_outer" ) ); < simple_dvToggle < = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), < "radiobutton_export_avi_simple_dv" ) ); < simple_dbToggle < = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), < "radiobutton_export_avi_simple_db" ) ); < mxfToggle < = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), < "radiobutton_export_avi_mxf" ) ); < autoArchiveToggle < = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), < "radiobutton_export_avi_archive" ) ); 141,152d122 < < /* gtk_toggle_button_set_active( simple_dvToggle, < Preferences::getInstance().simple_dv ); < gtk_toggle_button_set_active( simple_dbToggle, < Preferences::getInstance().simple_db ); < gtk_toggle_button_set_active( outerToggle, < Preferences::getInstance().outer ); < */ < gtk_toggle_button_set_active( mxfToggle, < Preferences::getInstance().mxf ); < gtk_toggle_button_set_active( autoArchiveToggle, < Preferences::getInstance().autoArchive ); 205,214d174 < Preferences::getInstance().simple_dv < = gtk_toggle_button_get_active( simple_dvToggle ); < Preferences::getInstance().simple_db < = gtk_toggle_button_get_active( simple_dbToggle ); < Preferences::getInstance().outer < = gtk_toggle_button_get_active( outerToggle ); < Preferences::getInstance().mxf < = gtk_toggle_button_get_active( mxfToggle ); < Preferences::getInstance().autoArchive < = gtk_toggle_button_get_active( autoArchiveToggle ); 254d213 < TimeCode tc; 258,265d216 < int Fallo = 0; < char* tcString = new char [12]; < char* INtcString = new char [12]; < char* OUTtcString = new char [12]; < char* sceneString = new char [4]; < string LastTapeName; < string ClipName = basename( Preferences::getInstance().file ); < 279,288d229 < snprintf( sceneString,4,"%d",sceneIndex); < playlist->GetFrame( i, frame ); < if ( Fallo == 1 ) { < strcpy( INtcString , tcString ); < LastTapeName = basename(playlist->GetFileNameOfFrame( i )); < Fallo = 0; < } < frame.GetTimeCode( tc ); < snprintf( tcString , 12 , _( "%2.2d:%2.2d:%2.2d:%2.2d" ) , tc.hour, tc.min, tc.sec, tc.frame ); < 290,362c231,236 < // Check for split < /* playlist->GetFrame( i, frame ); < if ( Preferences::getInstance().autoSplit && writer->FileIsOpen() < && ( i > 0 ) && ( i == scene[ sceneIndex ] ) ) < { < sceneIndex++; < writer->Close(); < frameNum = 0; < delete resampler; < resampler = 0; < } */ < < // primo frame dell' export < if ( i == 0 ) { < strcpy( INtcString, tcString ); < LastTapeName = basename(playlist->GetFileNameOfFrame( i )); < cerr << ">> (frame 0 )" << LastTapeName << endl ; < // if ( sceneIndex == 0 ) { < < } < if ( ( i > 0 ) && ( i == scene[ sceneIndex ] ) && writer->FileIsOpen() ) < if ( Preferences::getInstance().autoSplit < || Preferences::getInstance().mxf < || Preferences::getInstance().autoArchive < || Preferences::getInstance().simple_db ) { < < // Aggiorna nastro, clip_cut < if ( Preferences::getInstance().autoArchive || Preferences::getInstance().simple_db ) < { < string tmp2 = "/usr/scripts/arkino.sh UpdateDB \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + INtcString + "\' \'" + OUTtcString < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) + "\' \'" + sceneString + "\' "; < cerr << ">>> (split) UpDB " << tmp2 << endl ; < system( tmp2.c_str() ); < Fallo = 1; < } < // Splitto il file se "autoSplit" o devo creare MXF per avid < if ( Preferences::getInstance().mxf || Preferences::getInstance().autoSplit){ < // Trottolando () < if ( ! Preferences::getInstance().autoSplit ) < { < if ( sceneIndex == 0 ) { < string UpdateDBavid = "/usr/scripts/arkino.sh UpdateDBavid \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + INtcString + "\' \'" + OUTtcString < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) + "\' " ; < cerr << ">>> first UpDBavid " << UpdateDBavid << endl ; < system( UpdateDBavid.c_str() ); < } < string tmp5 = "/usr/scripts/arkino.sh UpdateDBale \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + INtcString + "\' \'" + OUTtcString < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) + "\' \'" + sceneString + "\' "; < cerr << ">>> (split) UpDBale " << tmp5 << endl ; < system( tmp5.c_str() ); < < string tmp1 = "/usr/scripts/trottolo.base.sh \'" + string(INtcString) < + "\' \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) < + "\' \'" + sceneString + "\'"; < cerr << ">>>> make MXF " << tmp1 << endl ; < system( tmp1.c_str() ); < } < LastTapeName = basename(playlist->GetFileNameOfFrame( i )); < writer->Close(); < Fallo = 1; < frameNum = 0; < delete resampler; < resampler = 0; < } --- > > // Check for split > playlist->GetFrame( i, frame ); > if ( Preferences::getInstance().autoSplit && writer->FileIsOpen() > && ( i > 0 ) && ( i == scene[ sceneIndex ] ) ) > { 363a238,241 > writer->Close(); > frameNum = 0; > delete resampler; > resampler = 0; 365c243 < strcpy( OUTtcString, tcString ); --- > 408a287 > 416,453d294 < } // fine ciclo frames < if ( Preferences::getInstance().outer ) < { < string tmp4 = "/usr/scripts/arkino.sh ArchiviaCache \'" + writer->GetFilename() + "\' "; < cerr << "Pospongo Archiviazione " << tmp4 << endl; < // system( tmp4.c_str() ); < } < if ( Preferences::getInstance().mxf ) < { < string tmp5 = "/usr/scripts/arkino.sh UpdateDBale \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + INtcString + "\' \'" + OUTtcString < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) + "\' \'" + sceneString + "\' "; < cerr << ">> last UpDBale " << tmp5 << endl ; < system( tmp5.c_str() ); < string tmp1 = "/usr/scripts/trottolo.base.sh \'" + string(INtcString) < + "\' \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) < + "\' \'" + sceneString + "\'" < + "; /usr/scripts/arkino.sh Trottola \'" + LastTapeName < + "\' \'" + writer->GetFilename() + "\' "; < cerr << ">> make last MXF, ALE " << tmp1 << endl ; < system( tmp1.c_str() ); < < } < if ( Preferences::getInstance().simple_db || Preferences::getInstance().autoArchive ) { < string tmp2 = "/usr/scripts/arkino.sh UpdateDB \'" + LastTapeName < + "\' \'" + writer->GetFilename() < + "\' \'" + INtcString + "\' \'" + OUTtcString < + "\' \'" + playlist->GetSeqAttribute( i-1, "log" ) + "\' \'" + sceneString + "\' "; < cerr << ">> Last UpDB " << tmp2 << endl ; < system( tmp2.c_str() ); < } < if ( Preferences::getInstance().autoArchive ) { < string tmp3 = "konsole --script -e /usr/scripts/arkino.sh ConvertiCon \'" + writer->GetFilename() + "\' "; < cerr << ">> FLV,JPG " << tmp3 << endl; < system( tmp3.c_str() ); 498d338 <