Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

kino_common.cc File Reference

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <sys/types.h>
#include <sys/wait.h>
#include <dirent.h>
#include <string.h>
#include <stdarg.h>
#include <time.h>
#include <libxml/nanohttp.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xpath.h>
#include "kino_common.h"
#include "page_editor.h"
#include "page_capture.h"
#include "page_timeline.h"
#include "page_undefined.h"
#include "page_export.h"
#include "page_bttv.h"
#include "page_trim.h"
#include "page_magick.h"
#include "preferences.h"
#include "message.h"
#include "frame.h"
#include "displayer.h"
#include "storyboard.h"
#include "riff.h"
#include "avi.h"
#include "filehandler.h"
#include "ieee1394io.h"
#include "error.h"
#include "stringutils.h"
#include <pthread.h>

Include dependency graph for kino_common.cc:

Go to the source code of this file.

Functions

gboolean generate_file_preview (GtkWidget *preview, const char *filename)
void update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
static int tohex (char p)
static char * url_decode (char *dest, char *src)
static void on_open_recent_activate (GtkWidget *menuitem, gpointer user_data)


Function Documentation

gboolean generate_file_preview GtkWidget *  preview,
const char *  filename
 

Used by update_preview_cb to generate a file preview in the File->Open dialog

Definition at line 994 of file kino_common.cc.

References AVI, KinoCommon::checkFile(), common, FRAME_MAX_HEIGHT, FRAME_MAX_WIDTH, FileHandler::GetFrame(), GetFramePool(), FileHandler::GetTotalFrames(), FileHandler::Open(), pixels, GdkDisplayer::put(), QT, and RAW_DV.

Referenced by update_preview_cb().

00995 {
00996     FileHandler *mediaFile = 0;
00997     try
00998     {
00999         if ( strcmp( filename, "" ) )
01000         {
01001             switch ( common->checkFile( const_cast<char*>( filename ) ) )
01002             {
01003                 case AVI:
01004                     mediaFile = new AVIHandler();
01005                     break;
01006                 case RAW_DV:
01007                     mediaFile = new RawHandler();
01008                     break;
01009                 case QT:
01010 #ifdef HAVE_LIBQUICKTIME
01011                     mediaFile = new QtHandler();
01012 #endif
01013                     break;
01014             }
01015         }
01016     
01017         if ( mediaFile && mediaFile->Open( filename ) )
01018         {
01019             // Force GDK displayer because freeing the XvDisplayer will
01020             // causing nothing to show
01021             Frame& frame = *GetFramePool()->GetFrame();
01022             int frameNum = mediaFile->GetTotalFrames() < 61 ? ( mediaFile->GetTotalFrames() / 2 ) : 60;
01023 
01024             if ( mediaFile->GetFrame( frame, frameNum ) >= 0 )
01025             {
01026                 GdkDisplayer* display = new GdkDisplayer( preview, frame.GetWidth(), frame.GetHeight(), frame.IsWide() );
01027                 unsigned char *pixels = new unsigned char[ FRAME_MAX_WIDTH * FRAME_MAX_HEIGHT * 4 ];
01028                 frame.ExtractPreviewRGB( pixels );
01029                 gdk_window_clear( preview->window );
01030                 display->put( pixels );
01031                 delete[] pixels;
01032                 delete display;
01033             }
01034             GetFramePool()->DoneWithFrame( &frame );
01035             delete mediaFile;
01036             mediaFile = 0;
01037 
01038             return true;
01039         }
01040     }
01041     catch ( string s )
01042     {
01043         cerr << "generate_file_preview exception: " << s << endl;
01044     }
01045     delete mediaFile;
01046 
01047     return false;
01048 }

static void on_open_recent_activate GtkWidget *  menuitem,
gpointer  user_data
[static]
 

Definition at line 2434 of file kino_common.cc.

References common, and KinoCommon::loadPlayList().

Referenced by KinoCommon::updateRecentFiles().

02435 {
02436     common->loadPlayList( static_cast< char* >( user_data ) );
02437 }

static int tohex char  p  )  [static]
 

Definition at line 1400 of file kino_common.cc.

Referenced by url_decode().

01401 {
01402     return isdigit( p ) ? p - '0' : tolower( p ) - 'a' + 10;
01403 }

void update_preview_cb GtkFileChooser *  file_chooser,
gpointer  data
 

Callback used by KinoCommon::getFileToOpen to generate file previews

Definition at line 1056 of file kino_common.cc.

References generate_file_preview().

Referenced by KinoCommon::getFileToOpen().

01057 {
01058     GtkWidget *preview;
01059     char *filename;
01060     gboolean have_preview;
01061 
01062     preview = GTK_WIDGET( data );
01063     filename = gtk_file_chooser_get_preview_filename( file_chooser );
01064 
01065     if ( filename && !g_file_test( filename, G_FILE_TEST_IS_DIR )) {
01066         have_preview = generate_file_preview( preview, filename );
01067         gtk_file_chooser_set_preview_widget_active( file_chooser,
01068                         have_preview );
01069     }
01070 }

static char* url_decode char *  dest,
char *  src
[static]
 

Definition at line 1405 of file kino_common.cc.

References tohex().

Referenced by KinoCommon::bulkLoad().

01406 {
01407     char *p = dest;
01408     
01409     while ( *src )
01410     {
01411         if ( *src == '%' )
01412         {
01413             *p ++ = ( tohex( *( src + 1 ) ) << 4 ) | tohex( *( src + 2 ) );
01414             src += 3;
01415         }
01416         else
01417         {
01418             *p ++ = *src ++;
01419         }
01420     }
01421 
01422     *p = *src;
01423 
01424     return dest;
01425 }


Generated on Sun Mar 11 22:12:09 2007 for Kino by  doxygen 1.4.2