X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fhb.c;h=11b80357e26c9ff777c6fabdc818c2b150b83c3f;hb=4b72a63eb61a01275493c4bfb51ba02152d1c5e1;hp=a835d2766213383cc151c237c18fa349446862f2;hpb=77be7c9cd2affcab72b5f7d9950ed4819d0b5251;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/hb.c b/libhb/hb.c index a835d276..11b80357 100644 --- a/libhb/hb.c +++ b/libhb/hb.c @@ -539,7 +539,7 @@ void hb_remove_previews( hb_handle_t * h ) * @param store_previews Whether or not to write previews to disk. */ void hb_scan( hb_handle_t * h, const char * path, int title_index, - int preview_count, int store_previews ) + int preview_count, int store_previews, uint64_t min_duration ) { hb_title_t * title; @@ -556,7 +556,7 @@ 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, &h->scan_die, path, title_index, h->list_title, preview_count, - store_previews ); + store_previews, min_duration ); } /** @@ -907,6 +907,11 @@ void hb_set_anamorphic_size( hb_job_t * job, - 3: Power user anamorphic, specify everything */ int width, height; + int maxWidth, maxHeight; + + maxWidth = MULTIPLE_MOD_DOWN( job->maxWidth, mod ); + maxHeight = MULTIPLE_MOD_DOWN( job->maxHeight, mod ); + switch( job->anamorphic.mode ) { case 1: @@ -933,27 +938,24 @@ void hb_set_anamorphic_size( hb_job_t * job, If not, set job height to job width divided by storage aspect. */ - if ( job->maxWidth && (job->maxWidth < job->width) ) - width = job->maxWidth; - /* Time to get picture width that divide cleanly.*/ width = MULTIPLE_MOD( width, mod); - /* Verify these new dimensions don't violate max height and width settings */ - if ( job->maxWidth && (job->maxWidth < job->width) ) - width = job->maxWidth; + if ( maxWidth && (maxWidth < job->width) ) + width = maxWidth; + /* Verify these new dimensions don't violate max height and width settings */ height = ((double)width / storage_aspect) + 0.5; - - if ( job->maxHeight && (job->maxHeight < height) ) - height = job->maxHeight; /* Time to get picture height that divide cleanly.*/ height = MULTIPLE_MOD( height, mod); - - /* Verify these new dimensions don't violate max height and width settings */ - if ( job->maxHeight && (job->maxHeight < height) ) - height = job->maxHeight; + + if ( maxHeight && (maxHeight < height) ) + { + height = maxHeight; + width = ((double)height * storage_aspect) + 0.5; + width = MULTIPLE_MOD( width, mod); + } /* The film AR is the source's display width / cropped source height. The output display width is the output height * film AR. @@ -971,28 +973,42 @@ void hb_set_anamorphic_size( hb_job_t * job, - Set everything based on specified values */ /* Use specified storage dimensions */ + storage_aspect = (double)job->width / (double)job->height; width = job->width; height = job->height; - /* Bind to max dimensions */ - if( job->maxWidth && width > job->maxWidth ) - width = job->maxWidth; - if( job->maxHeight && height > job->maxHeight ) - height = job->maxHeight; - /* Time to get picture dimensions that divide cleanly.*/ width = MULTIPLE_MOD( width, mod); height = MULTIPLE_MOD( height, mod); - /* Verify we're still within max dimensions */ - if( job->maxWidth && width > job->maxWidth ) - width = job->maxWidth - (mod/2); - if( job->maxHeight && height > job->maxHeight ) - height = job->maxHeight - (mod/2); - - /* Re-ensure we have picture dimensions that divide cleanly. */ - width = MULTIPLE_MOD( width, mod ); - height = MULTIPLE_MOD( height, mod ); + /* Bind to max dimensions */ + if( maxWidth && width > maxWidth ) + { + width = maxWidth; + // If we are keeping the display aspect, then we are going + // to be modifying the PAR anyway. So it's preferred + // to let the width/height stray some from the original + // requested storage aspect. + // + // But otherwise, PAR and DAR will change the least + // if we stay as close as possible to the requested + // storage aspect. + if ( !job->anamorphic.keep_display_aspect ) + { + height = ((double)width / storage_aspect) + 0.5; + height = MULTIPLE_MOD( height, mod); + } + } + if( maxHeight && height > maxHeight ) + { + height = maxHeight; + // Ditto, see comment above + if ( !job->anamorphic.keep_display_aspect ) + { + width = ((double)height * storage_aspect) + 0.5; + width = MULTIPLE_MOD( width, mod); + } + } /* That finishes the storage dimensions. On to display. */ if( job->anamorphic.dar_width && job->anamorphic.dar_height )