From 4d60f5b6a736b07736e6f1c83bd3f59962a1adcc Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Tue, 2 Dec 2008 20:01:02 +0100 Subject: [PATCH] Added a new INPUT_GET_BOOKMARK to allow future safe bookmark. It removes the need of INPUT_GET_BYTE_POSITION/INPUT_SET_BYTE_SIZE which where not thread safe. --- include/vlc_input.h | 3 +-- modules/gui/macosx/bookmarks.m | 17 +++++--------- modules/gui/qt4/dialogs/bookmarks.cpp | 16 +++++-------- modules/gui/wxwidgets/dialogs/bookmarks.cpp | 17 +++++--------- src/input/control.c | 25 +++++++++++---------- 5 files changed, 32 insertions(+), 46 deletions(-) diff --git a/include/vlc_input.h b/include/vlc_input.h index 53213f3328..94ce851f77 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -617,11 +617,10 @@ enum input_query_e INPUT_ADD_OPTION, /* arg1= char * arg2= char * res=can fail*/ /* Input properties */ - INPUT_GET_BYTE_POSITION, /* arg1= int64_t * res= */ - INPUT_SET_BYTE_SIZE, /* arg1= int64_t * res= */ INPUT_GET_VIDEO_FPS, /* arg1= double * res=can fail */ /* bookmarks */ + INPUT_GET_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_GET_BOOKMARKS, /* arg1= seekpoint_t *** arg2= int * res=can fail */ INPUT_CLEAR_BOOKMARKS, /* res=can fail */ INPUT_ADD_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ diff --git a/modules/gui/macosx/bookmarks.m b/modules/gui/macosx/bookmarks.m index f0fb02e717..754899b448 100644 --- a/modules/gui/macosx/bookmarks.m +++ b/modules/gui/macosx/bookmarks.m @@ -120,17 +120,12 @@ static VLCBookmarks *_o_sharedInstance = nil; if( !p_input ) return; seekpoint_t bookmark; - vlc_value_t pos; - bookmark.psz_name = NULL; - bookmark.i_byte_offset = 0; - bookmark.i_time_offset = 0; - - var_Get( VLCIntf, "position", &pos); - bookmark.psz_name = _("Untitled"); - input_Control( p_input, INPUT_GET_BYTE_POSITION, &bookmark.i_byte_offset ); - var_Get( p_input, "time", &pos ); - bookmark.i_time_offset = pos.i_time; - input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + + if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) ) + { + bookmark.psz_name = _("Untitled"); + input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + } vlc_object_release( p_input ); diff --git a/modules/gui/qt4/dialogs/bookmarks.cpp b/modules/gui/qt4/dialogs/bookmarks.cpp index 750333898d..e84cb4fd62 100644 --- a/modules/gui/qt4/dialogs/bookmarks.cpp +++ b/modules/gui/qt4/dialogs/bookmarks.cpp @@ -146,19 +146,15 @@ void BookmarksDialog::add() if( !p_input ) return; seekpoint_t bookmark; - vlc_value_t pos; - bookmark.psz_name = qtu( THEMIM->getIM()->getName() + - QString("_%1" ).arg( bookmarksList->topLevelItemCount() ) ); - bookmark.i_byte_offset = 0; - bookmark.i_time_offset = 0; - input_Control( p_input, INPUT_GET_BYTE_POSITION, &bookmark.i_byte_offset ); - var_Get( p_input, "time", &pos ); - bookmark.i_time_offset = pos.i_time; - input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) ) + { + bookmark.psz_name = qtu( THEMIM->getIM()->getName() + + QString("_%1" ).arg( bookmarksList->topLevelItemCount() ) ); + input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + } update(); - } void BookmarksDialog::del() diff --git a/modules/gui/wxwidgets/dialogs/bookmarks.cpp b/modules/gui/wxwidgets/dialogs/bookmarks.cpp index fb980c1283..622c8f1054 100644 --- a/modules/gui/wxwidgets/dialogs/bookmarks.cpp +++ b/modules/gui/wxwidgets/dialogs/bookmarks.cpp @@ -283,17 +283,12 @@ void BookmarksDialog::OnAdd( wxCommandEvent& event ) if( !p_input ) return; seekpoint_t bookmark; - vlc_value_t pos; - bookmark.psz_name = NULL; - bookmark.i_byte_offset = 0; - bookmark.i_time_offset = 0; - - var_Get( p_input, "position", &pos ); - bookmark.psz_name = NULL; - input_Control( p_input, INPUT_GET_BYTE_POSITION, &bookmark.i_byte_offset ); - var_Get( p_input, "time", &pos ); - bookmark.i_time_offset = pos.i_time; - input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + + if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) ) + { + bookmark.psz_name = NULL; + input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark ); + } vlc_object_release( p_input ); Update(); diff --git a/src/input/control.c b/src/input/control.c index d7960378f9..838a602962 100644 --- a/src/input/control.c +++ b/src/input/control.c @@ -384,6 +384,19 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) break; + case INPUT_GET_BOOKMARK: + p_bkmk = (seekpoint_t *)va_arg( args, seekpoint_t * ); + + memset( p_bkmk, 0, sizeof(*p_bkmk) ); + p_bkmk->psz_name = NULL; + p_bkmk->i_level = 0; + p_bkmk->i_byte_offset = 0; + /* FIXME not safe at all ! */ + if( p_input->p->input.p_stream ) + p_bkmk->i_byte_offset = stream_Tell( p_input->p->input.p_stream ); + p_bkmk->i_time_offset = var_GetTime( p_input, "time" ); + return VLC_SUCCESS; + case INPUT_ADD_OPTION: { const char *psz_option = va_arg( args, const char * ); @@ -400,18 +413,6 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) return i; } - case INPUT_GET_BYTE_POSITION: - pi_64 = (int64_t*)va_arg( args, int64_t * ); - *pi_64 = !p_input->p->input.p_stream ? 0 : - stream_Tell( p_input->p->input.p_stream ); - return VLC_SUCCESS; - - case INPUT_SET_BYTE_SIZE: - pi_64 = (int64_t*)va_arg( args, int64_t * ); - *pi_64 = !p_input->p->input.p_stream ? 0 : - stream_Size( p_input->p->input.p_stream ); - return VLC_SUCCESS; - case INPUT_GET_VIDEO_FPS: { int i; -- 2.39.2