#include <page_magick.h>
Inheritance diagram for PageMagick:


Public Member Functions | |
| PageMagick (KinoCommon *common) | |
| Constructor for Page Magick. | |
| virtual | ~PageMagick () |
| Destructor for Page Magick. | |
| void | newFile () |
| void | start () |
| Start when entering page. | |
| gulong | activate () |
| Activate scene list selection (for Frame sources). | |
| void | clean () |
| Clean up when leaving page. | |
| void | selectScene (int) |
| put the scene begin and end frame numbers into spinners | |
| void | videoStartOfMovie () |
| void | videoBack (int step=-1) |
| void | videoPlay () |
| void | videoForward (int step=1) |
| void | videoEndOfMovie () |
| void | videoPause () |
| void | videoStop () |
| void | videoPreviousScene () |
| void | videoNextScene () |
| void | videoStartOfScene () |
| void | videoEndOfScene () |
| void | showFrameInfo (int frame_number) |
| Update UI with metadata. | |
| void | showFrameInfo (int frame_number, int duration) |
| void | movedToFrame (int frame_number) |
| void | windowMoved () |
| void | timeFormatChanged () |
| gboolean | processKeyboard (GdkEventKey *event) |
| gboolean | processCommand (char *cmd) |
| std::string | getHelpPage () |
| void | PreviewFrame () |
| void | StartPreview () |
| void | AudioThread () |
| void | VideoThread () |
| void | StartRender () |
| Render the effect. | |
| void | Stop () |
| Stop whatever is running (either preview or rendering). | |
| void | StopPreview () |
| Stop the preview. | |
| void | UpdateProgress (gfloat) |
| Update the progress bar for the export process. | |
| void | UpdateStatus (int currentFrame, int begin, int end, int every) |
| void | RefreshStatus (bool with_fx_notify=false) |
| Refresh the status label to show the current selections. | |
| GDKImageCreate * | GetImageCreate () const |
| Return the currently selected image creator. | |
| GDKImageFilter * | GetImageFilter () const |
| Return the currently selected image filter. | |
| GDKImageTransition * | GetImageTransition () const |
| Return the currently selected image transition. | |
| GDKAudioFilter * | GetAudioFilter () const |
| Return the currently selected audio filter. | |
| GDKAudioTransition * | GetAudioTransition () const |
| Return the currently selected audio transition. | |
| GtkWidget * | GetWindow () const |
| bool | IsRepainting () const |
| bool | IsPreviewing () const |
| void | SetKeyFrameControllerClient (KeyFrameControllerClient *client) |
| void | ShowCurrentStatus (double position, frame_type type, bool hasPrev, bool hasNext) |
| double | GetCurrentPosition () |
| void | OnKeyFrameControllerKeyChanged (GtkToggleButton *togglebutton) |
| void | OnTimeRangeChanged () |
Public Attributes | |
| GtkWidget * | window |
Private Member Functions | |
| void | PlayAudio (int16_t *buffers[], int, int, int, bool) |
| Play an audio frame. | |
| void | ShowImage (GtkWidget *area, uint8_t *pixels, int, int, bool) |
| Show an image in the preview drawing area. | |
Private Attributes | |
| KinoCommon * | common |
| int | last_page |
| bool | rendering |
| bool | paused |
| bool | previewing |
| bool | repainting |
| GtkProgressBar * | progressBar |
| char | status [10240] |
| int | previewPosition |
| GtkWidget * | scrubBar |
| GtkAdjustment * | scrubAdjustment |
| PluginImageCreateRepository | image_creators |
| PluginImageFilterRepository | image_filters |
| PluginImageTransitionRepository | image_transitions |
| PluginAudioFilterRepository | audio_filters |
| PluginAudioTransitionRepository | audio_transitions |
| kino_sound_t * | audio_device |
| dv_audio_t | dv_audio |
| bool | audio_device_avail |
| gint | audio_sampling_rate |
| PluginCollection | plugins |
| string | last_fx_file |
| double | startTime |
| double | pauseTime |
| double | nextUpdateTime |
| KeyFrameControllerClient * | keyFrameControllerClient |
| bool | isGuiLocked |
| bool | isPreviousScene |
| bool | isNextScene |
| double | newPosition |
Definition at line 114 of file page_magick.h.
|
|
Constructor for Page Magick.
Definition at line 1482 of file page_magick.cc. References audio_filters, audio_transitions, PluginCollection::Count(), PluginCollection::Get(), Preferences::getInstance(), KinoCommon::getWidget(), gtk_enhanced_scale_new(), image_creators, image_filters, image_transitions, GDKAudioTransitionRepository::Initialise(), GDKAudioFilterRepository::Initialise(), GDKImageTransitionRepository::Initialise(), GDKImageCreateRepository::Initialise(), GDKImageFilterRepository::Initialise(), PluginCollection::Initialise(), PluginAudioTransitionRepository::InstallPlugins(), PluginAudioFilterRepository::InstallPlugins(), PluginImageTransitionRepository::InstallPlugins(), PluginImageFilterRepository::InstallPlugins(), PluginImageCreateRepository::InstallPlugins(), lookup_widget(), magick_glade, NORM_NTSC, on_drawingarea_refresh_required(), on_notebook_magick_switch_page(), on_notebook_magick_switch_video_page(), on_scrubbar_magick_button_press_event(), on_scrubbar_magick_button_release_event(), on_scrubbar_magick_value_changed_event(), on_spinbutton_magick_limit_value_changed(), on_time_range_changed(), on_togglebutton_key_frame_toggled(), plugins, progressBar, Repaint(), scrubAdjustment, scrubBar, and window. 01482 : 01483 last_page( 0 ), 01484 rendering( false ), 01485 previewing( false ), 01486 previewPosition( 0 ), 01487 keyFrameControllerClient( 0 ), 01488 isGuiLocked( false ), 01489 isPreviousScene( false ), 01490 isNextScene( false ) 01491 { 01492 cerr << "> Creating Magick Page" << endl; 01493 01494 window = glade_xml_get_widget( magick_glade, "window_magick" ); 01495 GtkWidget *bin = lookup_widget( common->getWidget(), "frame_magick" ); 01496 gtk_widget_reparent( gtk_bin_get_child( GTK_BIN( window ) ), bin ); 01497 01498 this->common = common; 01499 01500 progressBar = GTK_PROGRESS_BAR( lookup_widget( common->getWidget(), "progressbar" ) ); 01501 cerr << ">> Searching " << KINO_PLUGINDIR << " for plugins" << endl; 01502 plugins.Initialise( KINO_PLUGINDIR ); 01503 01504 for ( unsigned int index = 0; index < plugins.Count(); index ++ ) 01505 { 01506 image_creators.InstallPlugins( plugins.Get( index ) ); 01507 image_filters.InstallPlugins( plugins.Get( index ) ); 01508 image_transitions.InstallPlugins( plugins.Get( index ) ); 01509 audio_filters.InstallPlugins( plugins.Get( index ) ); 01510 audio_transitions.InstallPlugins( plugins.Get( index ) ); 01511 } 01512 01513 GtkOptionMenu *menu = GTK_OPTION_MENU( lookup_widget( window, "optionmenu_magick_filter" ) ); 01514 GtkBin *container = GTK_BIN( lookup_widget( window, "frame_magick_image_filter" ) ); 01515 image_filters.Initialise( menu, container ); 01516 01517 menu = GTK_OPTION_MENU( lookup_widget( window, "optionmenu_magick_frames_create" ) ); 01518 container = GTK_BIN( lookup_widget( window, "frame_magick_frames_create" ) ); 01519 image_creators.Initialise( menu, container ); 01520 01521 menu = GTK_OPTION_MENU( lookup_widget( window, "optionmenu_magick_transition" ) ); 01522 container = GTK_BIN( lookup_widget( window, "frame_magick_image_transition" ) ); 01523 image_transitions.Initialise( menu, container ); 01524 01525 menu = GTK_OPTION_MENU( lookup_widget( window, "optionmenu_magick_audio_filter" ) ); 01526 container = GTK_BIN( lookup_widget( window, "frame_magick_audio_filter" ) ); 01527 audio_filters.Initialise( menu, container ); 01528 01529 menu = GTK_OPTION_MENU( lookup_widget( window, "optionmenu_magick_audio_transition" ) ); 01530 container = GTK_BIN( lookup_widget( window, "frame_magick_audio_transition" ) ); 01531 audio_transitions.Initialise( menu, container ); 01532 01533 GtkWidget *drawing_area = lookup_widget( window, "drawingarea_magick_preview" ); 01534 g_signal_connect( G_OBJECT( drawing_area ), "expose_event", G_CALLBACK( on_drawingarea_refresh_required ), this ); 01535 gtk_widget_set_double_buffered( drawing_area, FALSE ); 01536 01537 GtkWidget *widget = lookup_widget( window, "notebook_magick_frames" ); 01538 g_signal_connect_after( G_OBJECT( widget ), "switch_page", G_CALLBACK( on_notebook_magick_switch_page ), this ); 01539 widget = lookup_widget( window, "notebook_magick_video" ); 01540 g_signal_connect_after( G_OBJECT( widget ), "switch_page", G_CALLBACK( on_notebook_magick_switch_video_page ), NULL ); 01541 widget = lookup_widget( window, "notebook_magick_audio" ); 01542 g_signal_connect_after( G_OBJECT( widget ), "switch_page", G_CALLBACK( on_notebook_magick_switch_page ), NULL ); 01543 01544 widget = lookup_widget( window, "checkbutton_magick_frame_limit" ); 01545 g_signal_connect( G_OBJECT( widget ), "clicked", G_CALLBACK( on_time_range_changed ), NULL ); 01546 widget = lookup_widget( window, "spinbutton_magick_limit" ); 01547 gtk_spin_button_set_value( GTK_SPIN_BUTTON( widget ), Preferences::getInstance().defaultNormalisation == NORM_NTSC ? 30 : 25 ); 01548 g_signal_connect( G_OBJECT( widget ), "value-changed", G_CALLBACK( on_spinbutton_magick_limit_value_changed ), NULL ); 01549 widget = lookup_widget( window, "optionmenu_magick_frame_offset" ); 01550 g_signal_connect( G_OBJECT( widget ), "changed", G_CALLBACK( on_time_range_changed ), NULL ); 01551 01552 // Attach the scrub bar 01553 scrubAdjustment = GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 0, 1, 10, 0 ) ); 01554 scrubBar = gtk_enhanced_scale_new( ( GtkObject** ) & scrubAdjustment, 1 ); 01555 gtk_widget_set_name( scrubBar, "scrubmar_magick" ); 01556 gtk_widget_ref( scrubBar ); 01557 gtk_object_set_data_full( GTK_OBJECT( window ), "scrubbar_magick", scrubBar, 01558 ( GtkDestroyNotify ) gtk_widget_unref ); 01559 GtkWidget *vbox_scrub = lookup_widget( window, "vbox_scrub" ); 01560 gtk_widget_show( scrubBar ); 01561 gtk_box_pack_start( GTK_BOX( vbox_scrub ), scrubBar, FALSE, TRUE, 0 ); 01562 g_signal_connect( G_OBJECT( scrubAdjustment ), "value_changed", 01563 G_CALLBACK( on_scrubbar_magick_value_changed_event ), NULL ); 01564 g_signal_connect( G_OBJECT( scrubBar ), "button_press_event", 01565 G_CALLBACK( on_scrubbar_magick_button_press_event ), NULL ); 01566 g_signal_connect( G_OBJECT( scrubBar ), "button_release_event", 01567 G_CALLBACK( on_scrubbar_magick_button_release_event ), NULL ); 01568 widget = lookup_widget( window, "togglebutton_key_frame" ); 01569 g_signal_connect( G_OBJECT( widget ), "toggled", G_CALLBACK( on_togglebutton_key_frame_toggled ), this ); 01570 widget = lookup_widget( window, "optionmenu_direction" ); 01571 g_signal_connect( G_OBJECT( widget ), "changed", G_CALLBACK( Repaint ), this ); 01572 widget = lookup_widget( window, "radiobutton_magick_transition_frame" ); 01573 g_signal_connect( G_OBJECT( widget ), "toggled", G_CALLBACK( Repaint ), this ); 01574 widget = lookup_widget( window, "optionmenu_magick_transition_frame" ); 01575 g_signal_connect( G_OBJECT( widget ), "changed", G_CALLBACK( Repaint ), this ); 01576 widget = lookup_widget( window, "radiobutton_magick_transition_colour" ); 01577 g_signal_connect( G_OBJECT( widget ), "toggled", G_CALLBACK( Repaint ), this ); 01578 widget = lookup_widget( window, "colorpicker_magick_transition" ); 01579 g_signal_connect( G_OBJECT( widget ), "color-set", G_CALLBACK( Repaint ), this ); 01580 widget = lookup_widget( window, "hscale_transition_start" ); 01581 g_signal_connect( G_OBJECT( widget ), "value-changed", G_CALLBACK( Repaint ), this ); 01582 widget = lookup_widget( window, "hscale_transition_end" ); 01583 g_signal_connect( G_OBJECT( widget ), "value-changed", G_CALLBACK( Repaint ), this ); 01584 }
|
|
|
Destructor for Page Magick.
Definition at line 1589 of file page_magick.cc. References common, KinoCommon::getWidget(), lookup_widget(), and window. 01590 {
01591 GtkBin * bin = GTK_BIN( lookup_widget( common->getWidget(), "frame_magick" ) );
01592 gtk_widget_reparent( ( GTK_BIN( bin ) ) ->child, GTK_WIDGET( window ) );
01593 gtk_widget_destroy( window );
01594 }
|
|
|
Activate scene list selection (for Frame sources).
Reimplemented from Page. Definition at line 1650 of file page_magick.cc. References isNextScene, isPreviousScene, rendering, SCENE_LIST, VIDEO_BACK, VIDEO_END_OF_MOVIE, VIDEO_FORWARD, VIDEO_NEXT_SCENE, VIDEO_PAUSE, VIDEO_PLAY, VIDEO_START_OF_MOVIE, VIDEO_START_OF_SCENE, and VIDEO_STOP. 01651 {
01652 if ( rendering )
01653 return VIDEO_PLAY | VIDEO_STOP;
01654 else
01655 return SCENE_LIST |
01656 VIDEO_START_OF_MOVIE |
01657 VIDEO_BACK |
01658 VIDEO_PLAY |
01659 VIDEO_PAUSE |
01660 VIDEO_STOP |
01661 VIDEO_FORWARD |
01662 VIDEO_END_OF_MOVIE |
01663 ( isPreviousScene ? VIDEO_START_OF_SCENE : 0 ) |
01664 ( isNextScene ? VIDEO_NEXT_SCENE : 0 );
01665 }
|
|
|
Definition at line 1890 of file page_magick.cc. References audio_device, audio_device_avail, audio_sampling_rate, PageMagickInfo::begin, PageMagickInfo::channels, common, DV_AUDIO_MAX_SAMPLES, PageMagickInfo::end, Frame::ExtractAudio(), FRAME_MAX_HEIGHT, FRAME_MAX_WIDTH, PageMagickInfo::frequency, PageMagickInfo::GetAudioManipulator(), PageMagickImage::GetFrame(), PageMagickAudio::GetFrame(), PageMagickFrames::GetFrame(), GetFramePool(), PageMagickInfo::GetFrameSource(), PageMagickInfo::GetImageManipulator(), Preferences::getInstance(), KinoCommon::getPlayList(), PageMagickInfo::height, PageMagickInfo::increment, info, PageMagickInfo::Initialise(), PageMagickInfo::isPAL, PageMagickInfo::isWide, kino_sound_close(), kino_sound_new(), lookup_widget(), modal_message(), pixels, PlayAudio(), PageMagickInfo::postFrame, PageMagickImage::PreGetFrame(), previewing, previewPosition, rendering, PageMagickInfo::reverse, PageMagickInfo::samples_this_frame, PageMagickInfo::SetLowQuality(), showFrameInfo(), ShowImage(), TriggerAction(), PageMagickInfo::width, and window. Referenced by audioThreadProxy(). 01891 {
01892 // Avoid reentrancy, interrupt rendering, and empty project
01893 if ( rendering )
01894 return;
01895
01896 GtkWidget *area = GTK_WIDGET( lookup_widget( window, "drawingarea_magick_preview" ) );
01897
01898 // Create the temporary space
01899 uint8_t *pixels = new uint8_t[ FRAME_MAX_WIDTH * FRAME_MAX_HEIGHT * 4 ];
01900 int16_t *audio_buffers[ 4 ];
01901 for ( int n = 0; n < 4; n++ )
01902 audio_buffers[ n ] = new int16_t [ 2 * DV_AUDIO_MAX_SAMPLES ];
01903
01904 // Generate the info
01905 PageMagickInfo *info = new PageMagickInfo( common );
01906
01907 audio_device = kino_sound_new();
01908 audio_device_avail = false;
01909 audio_sampling_rate = 0;
01910 int audio_number = 0;
01911 Frame* infoFrame = GetFramePool()->GetFrame();
01912
01913 GtkToggleButton *audioButton = GTK_TOGGLE_BUTTON( lookup_widget( window, "checkbutton_magick_preview_audio" ) );
01914 GtkToggleButton *everyButton = GTK_TOGGLE_BUTTON( lookup_widget( window, "checkbutton_magick_preview_every" ) );
01915 GtkToggleButton *loopButton = GTK_TOGGLE_BUTTON( lookup_widget( window, "checkbutton_magick_preview_loop" ) );
01916 GtkToggleButton *contextButton = GTK_TOGGLE_BUTTON( lookup_widget( window, "checkbutton_magick_preview_context" ) );
01917 GtkToggleButton *qualityButton = GTK_TOGGLE_BUTTON( lookup_widget( window, "checkbutton_low_quality" ) );
01918 GtkEntry *contextSpin = GTK_ENTRY( lookup_widget( window, "spinbutton_magick_preview_context" ) );
01919
01920 try
01921 {
01922 pthread_mutex_lock( &init_mutex );
01923 info->Initialise();
01924 info->SetLowQuality( gtk_toggle_button_get_active( qualityButton ) );
01925 do
01926 {
01927 PageMagickFrames *frames = info->GetFrameSource();
01928 PageMagickImage *image = info->GetImageManipulator();
01929 PageMagickAudio *sound = info->GetAudioManipulator();
01930 pthread_mutex_unlock( &init_mutex );
01931
01932 if ( info->begin > info->end )
01933 throw _( "Invalid frame range specified." );
01934
01935 if ( previewPosition <= 1 )
01936 for ( frameNumber = info->begin - atoi( gtk_entry_get_text( contextSpin ) );
01937 frameNumber < info->begin &&
01938 gtk_toggle_button_get_active( contextButton ) &&
01939 previewing;
01940 frameNumber++ )
01941 {
01942 if ( frameNumber >= 0 )
01943 {
01944 TriggerAction();
01945 common->getPlayList()->GetFrame( frameNumber, *( infoFrame ) );
01946 if ( !gtk_toggle_button_get_active( audioButton ) &&
01947 Preferences::getInstance().enableAudio )
01948 {
01949 if ( infoFrame->ExtractAudio( audio_buffers ) )
01950 PlayAudio( audio_buffers, info->samples_this_frame, info->frequency, info->channels, info->isPAL );
01951 }
01952 if ( !gtk_toggle_button_get_active( everyButton ) || gtk_toggle_button_get_active( audioButton ) )
01953 {
01954 infoFrame->ExtractPreviewRGB( pixels );
01955 gdk_threads_enter();
01956 ShowImage( area, pixels, infoFrame->GetWidth(), infoFrame->GetHeight(), infoFrame->IsWide() );
01957 gdk_flush();
01958 gdk_threads_leave();
01959 }
01960 }
01961 }
01962
01963 int frame_number = info->begin + previewPosition;
01964 for ( double i = ( double ) info->begin + previewPosition;
01965 frame_number <= info->end && previewing;
01966 frame_number = ( int )( ( i += info->increment ) + 0.5 ) )
01967 {
01968 previewPosition = frame_number - info->begin;
01969 gdk_threads_enter();
01970 showFrameInfo( frame_number, info->end - info->begin + 1 );
01971 gdk_threads_leave();
01972 if ( info->reverse )
01973 frame_number = info->end - ( ( int ) i - info->begin );
01974
01975 frameNumber = frame_number;
01976 TriggerAction();
01977 if ( !gtk_toggle_button_get_active( audioButton ) &&
01978 Preferences::getInstance().enableAudio )
01979 {
01980 int samples = info->samples_this_frame;
01981 int locked_samples = infoFrame->CalculateNumberSamples( info->frequency, audio_number ++ );
01982 if ( samples == 0 )
01983 samples = locked_samples;
01984 frames->GetFrame( NULL, 0, 0, audio_buffers, frame_number );
01985 if ( gtk_toggle_button_get_active( everyButton ) )
01986 image->PreGetFrame( );
01987 sound->GetFrame( audio_buffers, frame_number, samples, locked_samples );
01988 PlayAudio( audio_buffers, samples, info->frequency, info->channels, info->isPAL );
01989 }
01990 if ( !gtk_toggle_button_get_active( everyButton ) || gtk_toggle_button_get_active( audioButton ) )
01991 {
01992 frames->GetFrame( pixels, info->width, info->height, NULL, frame_number );
01993 image->PreGetFrame( );
01994 image->GetFrame( pixels, frame_number );
01995 gdk_threads_enter();
01996 ShowImage( area, pixels, info->width, info->height, info->isWide );
01997 gdk_flush();
01998 gdk_threads_leave();
01999 }
02000 }
02001
02002 for ( frameNumber = info->postFrame;
02003 frameNumber < info->postFrame + atoi( gtk_entry_get_text( contextSpin ) ) &&
02004 gtk_toggle_button_get_active( contextButton ) &&
02005 previewing;
02006 frameNumber++ )
02007 {
02008 if ( frameNumber < common->getPlayList()->GetNumFrames() )
02009 {
02010 TriggerAction();
02011 common->getPlayList()->GetFrame( frameNumber, *( infoFrame ) );
02012 if ( !gtk_toggle_button_get_active( audioButton ) &&
02013 Preferences::getInstance().enableAudio )
02014 {
02015 if ( infoFrame->ExtractAudio( audio_buffers ) )
02016 PlayAudio( audio_buffers, info->samples_this_frame, info->frequency, info->channels, info->isPAL );
02017 }
02018 if ( !gtk_toggle_button_get_active( everyButton ) || gtk_toggle_button_get_active( audioButton ) )
02019 {
02020 infoFrame->ExtractPreviewRGB( pixels );
02021 gdk_threads_enter();
02022 ShowImage( area, pixels, infoFrame->GetWidth(), infoFrame->GetHeight(), infoFrame->IsWide() );
02023 gdk_flush();
02024 gdk_threads_leave();
02025 }
02026 }
02027 }
02028 if ( previewing )
02029 previewPosition = 0;
02030 pthread_mutex_lock( &init_mutex );
02031 }
02032 while ( previewing && gtk_toggle_button_get_active( loopButton ) );
02033 }
02034 catch ( const char * exc )
02035 {
02036 modal_message( ( char * ) exc );
02037 }
02038 pthread_mutex_unlock( &init_mutex );
02039
02040 kino_sound_close( audio_device );
02041 previewing = false;
02042 delete info;
02043 delete[] pixels;
02044 for ( int n = 0; n < 4; n++ )
02045 delete[] audio_buffers[ n ];
02046 GetFramePool()->DoneWithFrame( infoFrame );
02047 TriggerAction();
02048 }
|
|
|
Clean up when leaving page.
Reimplemented from Page. Definition at line 1670 of file page_magick.cc. References status, and StopPreview(). 01671 {
01672 StopPreview();
01673 strcpy( status, "" );
01674 }
|
|
|
Return the currently selected audio filter.
Definition at line 2682 of file page_magick.cc. References audio_filters, and GDKAudioFilterRepository::Get(). Referenced by RefreshStatus(). 02683 {
02684 return audio_filters.Get( );
02685 }
|
|
|
Return the currently selected audio transition.
Definition at line 2690 of file page_magick.cc. References audio_transitions, and GDKAudioTransitionRepository::Get(). Referenced by RefreshStatus(). 02691 {
02692 return audio_transitions.Get( );
02693 }
|
|
|
Implements KeyFrameController. Definition at line 3345 of file page_magick.cc. References PageMagickInfo::begin, common, PageMagickInfo::GetFrameSource(), info, and previewPosition. Referenced by on_notebook_magick_switch_video_page(), OnKeyFrameControllerKeyChanged(), RefreshStatus(), videoNextScene(), and videoPreviousScene(). 03346 {
03347 try
03348 {
03349 PageMagickInfo info( common );
03350 info.GetFrameSource();
03351 return time_info( info, info.begin + previewPosition ).position();
03352 }
03353 catch( const char * exc )
03354 {
03355 return 0;
03356 }
03357 }
|
|
|
Reimplemented from Page. Definition at line 146 of file page_magick.h. 00147 {
00148 return "FX";
00149 }
|
|
|
Return the currently selected image creator.
Definition at line 2698 of file page_magick.cc. References GDKImageCreateRepository::Get(), and image_creators. Referenced by RefreshStatus(). 02699 {
02700 return image_creators.Get( );
02701 }
|
|
|
Return the currently selected image filter.
Definition at line 2666 of file page_magick.cc. References GDKImageFilterRepository::Get(), and image_filters. Referenced by RefreshStatus(). 02667 {
02668 return image_filters.Get( );
02669 }
|
|
|
Return the currently selected image transition.
Definition at line 2674 of file page_magick.cc. References GDKImageTransitionRepository::Get(), and image_transitions. Referenced by RefreshStatus(). 02675 {
02676 return image_transitions.Get( );
02677 }
|
|
|
Definition at line 169 of file page_magick.h. References window. 00170 {
00171 return window;
00172 }
|
|
|
Definition at line 177 of file page_magick.h. References previewing. Referenced by FXSelectedFrames::IsPreviewing(), GDKImageTransitionRepository::SelectionChange(), GDKImageFilterRepository::SelectionChange(), GDKAudioTransitionRepository::SelectionChange(), and GDKAudioFilterRepository::SelectionChange(). 00178 {
00179 return previewing;
00180 }
|
|
|
Definition at line 173 of file page_magick.h. References repainting. Referenced by FXSelectedFrames::IsRepainting(). 00174 {
00175 return repainting;
00176 }
|
|
|
Reimplemented from Page. Definition at line 1752 of file page_magick.cc. References common, KinoCommon::getPageEditor(), KinoCommon::getPlayList(), KinoCommon::hasListChanged, lookup_widget(), PreviewFrame(), previewPosition, scenes, selectScene(), StopPreview(), and window. Referenced by selectScene(), and windowMoved(). 01753 {
01754 if ( common->hasListChanged == TRUE )
01755 {
01756 common->getPageEditor()->ResetBar();
01757 common->hasListChanged = FALSE;
01758 if ( common->getPlayList() ->GetNumFrames() > 0 )
01759 {
01760 std::vector<int> scenes = common->getPageEditor()->GetScene();
01761 int i = 0;
01762 for ( i = 0; i < int( scenes.size() ) && frame_number >= scenes[ i ]; i++ );
01763 selectScene( i );
01764 }
01765 GtkSpinButton *startSpin = GTK_SPIN_BUTTON( lookup_widget( window, "spinbutton_magick_start" ) );
01766 GtkSpinButton *endSpin = GTK_SPIN_BUTTON( lookup_widget( window, "spinbutton_magick_end" ) );
01767 gtk_spin_button_set_range( startSpin, 0, gtk_spin_button_get_value( endSpin ) );
01768 gtk_spin_button_set_range( endSpin, gtk_spin_button_get_value( startSpin ),
01769 common->getPlayList() ->GetNumFrames() - 1 );
01770 }
01771 else
01772 {
01773 try {
01774 StopPreview();
01775 previewPosition = frame_number;
01776 PreviewFrame();
01777 } catch ( const char * exc )
01778 { }
01779 }
01780 }
|
|
|
Reimplemented from Page. Definition at line 1596 of file page_magick.cc. References last_fx_file. 01597 {
01598 last_fx_file = "";
01599 }
|
|
|
Definition at line 3389 of file page_magick.cc. References GetCurrentPosition(), isGuiLocked, keyFrameControllerClient, and KeyFrameControllerClient::OnControllerKeyChanged(). Referenced by on_togglebutton_key_frame_toggled(). 03390 {
03391 if ( !isGuiLocked && keyFrameControllerClient )
03392 {
03393 double position = GetCurrentPosition( );
03394 keyFrameControllerClient->OnControllerKeyChanged( position,
03395 gtk_toggle_button_get_active( togglebutton ) );
03396 }
03397 }
|
|
|
Definition at line 2896 of file page_magick.cc. References PageMagickInfo::begin, common, PageMagickInfo::end, PageMagickInfo::GetFrameSource(), info, PreviewFrame(), previewPosition, and scrubAdjustment. Referenced by on_notebook_magick_switch_page(), and on_notebook_magick_switch_video_page(). 02897 {
02898 try
02899 {
02900 PageMagickInfo *info = new PageMagickInfo( common );
02901
02902 info->GetFrameSource();
02903 scrubAdjustment->upper = info->end - info->begin + 1;
02904 if ( gtk_adjustment_get_value( scrubAdjustment ) >= scrubAdjustment->upper )
02905 previewPosition = info->end - info->begin;
02906 delete info;
02907 PreviewFrame();
02908 g_signal_emit_by_name( scrubAdjustment, "changed" );
02909 }
02910 catch ( const char * exc )
02911 {
02912 }
02913 }
|
|
||||||||||||||||||||||||
|
Play an audio frame.
Definition at line 1679 of file page_magick.cc. References audio_device, audio_device_avail, audio_sampling_rate, dv_audio, Preferences::getInstance(), kino_sound_init(), and kino_sound_play(). Referenced by AudioThread(). 01680 {
01681 dv_audio.frequency = frequency;
01682 dv_audio.samples_this_frame = samples;
01683 dv_audio.num_channels = channels;
01684
01685 if ( !audio_device_avail && ( audio_sampling_rate = kino_sound_init(
01686 &dv_audio, audio_device, Preferences::getInstance().audioDevice ) ) != 0 )
01687 audio_device_avail = true;
01688 if ( audio_device_avail )
01689 kino_sound_play( &dv_audio, audio_device, buffers );
01690 }
|
|
|
Definition at line 1788 of file page_magick.cc. References PageMagickInfo::begin, common, PageMagickInfo::end, FRAME_MAX_HEIGHT, FRAME_MAX_WIDTH, PageMagickImage::GetFrame(), PageMagickFrames::GetFrame(), PageMagickInfo::GetFrameSource(), PageMagickInfo::GetImageManipulator(), PageMagickInfo::height, PageMagickInfo::increment, info, PageMagickInfo::Initialise(), PageMagickInfo::isWide, magick_glade, modal_message(), pixels, PageMagickImage::PreGetFrame(), previewing, previewPosition, rendering, repainting, PageMagickInfo::reverse, PageMagickInfo::SetLowQuality(), showFrameInfo(), ShowImage(), and PageMagickInfo::width. Referenced by movedToFrame(), OnTimeRangeChanged(), RefreshStatus(), FXSelectedFrames::Repaint(), videoBack(), videoEndOfMovie(), videoForward(), videoNextScene(), videoPreviousScene(), and videoStartOfMovie(). 01789 {
01790 // Make sure we're not already previewing.
01791 // Do not interrupt rendering
01792 if ( rendering || previewing || repainting )
01793 return;
01794 repainting = true;
01795
01796 PageMagickInfo *info = new PageMagickInfo( common );
01797 info->Initialise();
01798 PageMagickFrames *frames = info->GetFrameSource();
01799 GtkWidget *area = glade_xml_get_widget( magick_glade, "drawingarea_magick_preview" );
01800 if ( previewPosition > info->end - info->begin )
01801 previewPosition = info->end - info->begin;
01802
01803 try
01804 {
01805 if ( GDK_IS_DRAWABLE(area->window) && ( info->begin <= info->end ) )
01806 {
01807 GtkWidget *qualityButton = glade_xml_get_widget( magick_glade, "checkbutton_low_quality" );
01808 info->SetLowQuality( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( qualityButton ) ) );
01809 PageMagickImage *image = info->GetImageManipulator();
01810 double i = double( info->begin ) + previewPosition * info->increment;
01811 int frame_number = int( i + 0.5 );
01812 uint8_t *pixels = new uint8_t[ FRAME_MAX_WIDTH * FRAME_MAX_HEIGHT * 4 ];
01813
01814 showFrameInfo( frame_number, info->end - info->begin + 1 );
01815
01816 // Apply the filter and show image
01817 if ( info->reverse )
01818 frame_number = int( double( info->end ) - ( i - info->begin ) + 0.5 );
01819 if ( frame_number > info->end )
01820 frame_number = info->end;
01821 frames->GetFrame( pixels, info->width, info->height, NULL, frame_number );
01822 image->PreGetFrame( frame_number - info->begin );
01823 image->GetFrame( pixels, frame_number );
01824 ShowImage( area, pixels, info->width, info->height, info->isWide );
01825 delete[] pixels;
01826 }
01827 else
01828 {
01829 showFrameInfo( 0, 0 );
01830 }
01831 }
01832 catch ( const char * exc )
01833 {
01834 modal_message( ( char * ) exc );
01835 }
01836
01837 repainting = false;
01838 delete info;
01839 }
|
|
|
Reimplemented from Page. Definition at line 2727 of file page_magick.cc. References _getOneSecond(), KinoCommon::changePageRequest(), common, KinoCommon::getWidget(), KinoCommon::keyboardFeedback(), kinoDeactivate(), KinoCommon::moveByFrames(), PAGE_EDITOR, PAGE_TIMELINE, PAGE_TRIM, previewing, KinoCommon::savePlayList(), KinoCommon::videoEndOfMovie(), KinoCommon::videoEndOfScene(), KinoCommon::videoNextScene(), KinoCommon::videoPause(), KinoCommon::videoPlay(), KinoCommon::videoPreviousScene(), KinoCommon::videoStartOfMovie(), KinoCommon::videoStartOfScene(), and KinoCommon::videoStop(). 02728 {
02729 /* play, pause */
02730
02731 if ( strcmp( cmd, " " ) == 0 )
02732 {
02733 if ( !previewing )
02734 {
02735 common->keyboardFeedback( cmd, _( "Play" ) );
02736 common->videoPlay( );
02737 }
02738 else
02739 {
02740 common->keyboardFeedback( cmd, _( "Pause" ) );
02741 common->videoPause( );
02742 }
02743 }
02744
02745 /* advance one frame */
02746
02747 else if ( strcmp( cmd, "l" ) == 0 )
02748 {
02749 common->keyboardFeedback( cmd, _( "Move forward" ) );
02750 common->moveByFrames( 1 );
02751 }
02752
02753 /* backspace one frame */
02754
02755 else if ( strcmp( cmd, "h" ) == 0 )
02756 {
02757 common->keyboardFeedback( cmd, _( "Move backward" ) );
02758 common->moveByFrames( -1 );
02759 }
02760
02761 /* advance one second */
02762
02763 else if ( strcmp( cmd, "w" ) == 0 || strcmp( cmd, "W" ) == 0 ||
02764 strcmp( cmd, "e" ) == 0 || strcmp( cmd, "E" ) == 0 )
02765 {
02766 common->keyboardFeedback( cmd, _( "Move forward second" ) );
02767 common->moveByFrames( _getOneSecond() );
02768 }
02769
02770 /* backspace one second */
02771
02772 else if ( ( strcmp( cmd, "b" ) == 0 ) || ( strcmp( cmd, "B" ) == 0 ) )
02773 {
02774 common->keyboardFeedback( cmd, _( "Move backwards one second" ) );
02775 common->moveByFrames( -1 * _getOneSecond() );
02776 }
02777
02778 /* start of scene */
02779
02780 else if ( ( strcmp( cmd, "0" ) == 0 ) || ( strcmp( cmd, "^" ) == 0 ) )
02781 {
02782 common->videoStartOfScene( );
02783 common->keyboardFeedback( cmd, _( "Move to start of scene" ) );
02784 }
02785
02786 /* end of scene */
02787
02788 else if ( strcmp( cmd, "$" ) == 0 )
02789 {
02790 common->videoEndOfScene( );
02791 common->keyboardFeedback( cmd, _( "Move to end of scene" ) );
02792 }
02793
02794 /* start of next scene */
02795
02796 else if ( ( strcmp( cmd, "j" ) == 0 ) || strcmp( cmd, "+" ) == 0 )
02797 {
02798 common->videoNextScene( );
02799 common->keyboardFeedback( cmd, _( "Move to start of next scene" ) );
02800 }
02801
02802 /* start of previous scene */
02803
02804 else if ( ( strcmp( cmd, "k" ) == 0 ) || ( strcmp( cmd, "-" ) == 0 ) )
02805 {
02806 common->videoPreviousScene( );
02807 common->keyboardFeedback( cmd, _( "Move to start of previous scene" ) );
02808 }
02809
02810 /* first frame */
02811
02812 else if ( strcmp( cmd, "gg" ) == 0 )
02813 {
02814 common->videoStartOfMovie( );
02815 common->keyboardFeedback( cmd, _( "Move to first frame" ) );
02816 }
02817
02818 /* last frame */
02819
02820 else if ( strcmp( cmd, "G" ) == 0 )
02821 {
02822 common->videoEndOfMovie( );
02823 common->keyboardFeedback( cmd, _( "Move to last frame" ) );
02824 }
02825
02826 /* write PlayList */
02827
02828 else if ( strcmp( cmd, ":w" ) == 0 )
02829 {
02830 common->keyboardFeedback( cmd, _( "Write playlist" ) );
02831 common->savePlayList( );
02832 }
02833
02834 else if ( strcmp( cmd, "Enter" ) == 0 )
02835 {
02836 common->keyboardFeedback( cmd, _( "Start Render" ) );
02837 GdkEvent ev;
02838 ev.key.type = GDK_KEY_PRESS;
02839 ev.key.window = common->getWidget()->window;
02840 ev.key.send_event = TRUE;
02841 ev.key.state = 0;
02842 ev.key.length = 0;
02843 ev.key.string = "";
02844 ev.key.keyval = GDK_Return;
02845 ev.key.group = 0;
02846 gdk_event_put( &ev );
02847 }
02848
02849 else if ( strcmp( cmd, "Esc" ) == 0 )
02850 {
02851 common->keyboardFeedback( cmd, _( "Stop" ) );
02852 common->videoStop();
02853 }
02854
02855 else if ( strcmp( cmd, "F2" ) == 0 )
02856 {
02857 common->keyboardFeedback( cmd, _( "Edit" ) );
02858 common->changePageRequest( PAGE_EDITOR );
02859 }
02860
02861 else if ( strcmp( cmd, "A" ) == 0 )
02862 {
02863 common->keyboardFeedback( cmd, _( "Capture, append to movie" ) );
02864 common->changePageRequest( PAGE_EDITOR );
02865 }
02866
02867 else if ( strcmp( cmd, "v" ) == 0 )
02868 {
02869 common->keyboardFeedback( cmd, _( "Timeline" ) );
02870 common->changePageRequest( PAGE_TIMELINE );
02871 }
02872
02873 else if ( strcmp( cmd, "t" ) == 0 )
02874 {
02875 common->keyboardFeedback( cmd, _( "Trim" ) );
02876 common->changePageRequest( PAGE_TRIM );
02877 }
02878
02879 else if ( strcmp( cmd, ":W" ) == 0 )
02880 {
02881 common->keyboardFeedback( cmd, _( "Export" ) );
02882 |