Kino

From Alessandro's Wiki
Jump to: navigation, search

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
<