Kino
From Porcelinux
Contents |
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
<

