Kino

From Alessandro's Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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
<