diff options
author | jstebbins <[email protected]> | 2009-11-25 21:14:44 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2009-11-25 21:14:44 +0000 |
commit | 009238a822971a933d0b7642fd04c15bf8e404a2 (patch) | |
tree | 0979d88ba5116f4ad7e41f55bc7f93a1a82040b9 /libhb/hb.c | |
parent | 08483929dd5352012eb8b1f1143f138e3d5f19f0 (diff) |
batch file scanning and scan cancel
When a directory is specified as the source, first we attempt to open as a dvd,
then if that fails, we attempt to open each file in the directory as a stream
source. Since opening a large directory of files can take a really long time,
you can also now cancel a scan.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2980 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/hb.c')
-rw-r--r-- | libhb/hb.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/libhb/hb.c b/libhb/hb.c index 34fe53b72..1b899e39c 100644 --- a/libhb/hb.c +++ b/libhb/hb.c @@ -38,6 +38,7 @@ struct hb_handle_s /* For MacGui active queue increments each time the scan thread completes*/ int scanCount; + volatile int scan_die; /* Stash of persistent data between jobs, for stuff like correcting frame count and framerate estimates @@ -379,6 +380,8 @@ void hb_scan( hb_handle_t * h, const char * path, int title_index, { hb_title_t * title; + h->scan_die = 0; + /* Clean up from previous scan */ hb_remove_previews( h ); while( ( title = hb_list_item( h->list_title, 0 ) ) ) @@ -388,8 +391,9 @@ void hb_scan( hb_handle_t * h, const char * path, int title_index, } hb_log( "hb_scan: path=%s, title_index=%d", path, title_index ); - h->scan_thread = hb_scan_init( h, path, title_index, h->list_title, - preview_count, store_previews ); + h->scan_thread = hb_scan_init( h, &h->scan_die, path, title_index, + h->list_title, preview_count, + store_previews ); } /** @@ -1238,6 +1242,20 @@ void hb_stop( hb_handle_t * h ) } /** + * Stops the conversion process. + * @param h Handle to hb_handle_t. + */ +void hb_scan_stop( hb_handle_t * h ) +{ + h->scan_die = 1; + + h->job_count = hb_count(h); + h->job_count_permanent = 0; + + hb_resume( h ); +} + +/** * Returns the state of the conversion process. * @param h Handle to hb_handle_t. * @param s Handle to hb_state_t which to copy the state data. @@ -1340,8 +1358,24 @@ static void thread_func( void * _h ) { hb_thread_close( &h->scan_thread ); - hb_log( "libhb: scan thread found %d valid title(s)", - hb_list_count( h->list_title ) ); + if ( h->scan_die ) + { + hb_title_t * title; + + hb_remove_previews( h ); + while( ( title = hb_list_item( h->list_title, 0 ) ) ) + { + hb_list_rem( h->list_title, title ); + hb_title_close( &title ); + } + + hb_log( "hb_scan: canceled" ); + } + else + { + hb_log( "libhb: scan thread found %d valid title(s)", + hb_list_count( h->list_title ) ); + } hb_lock( h->state_lock ); h->state.state = HB_STATE_SCANDONE; //originally state.state hb_unlock( h->state_lock ); |