OSDN Git Service
(root)
/
handbrake-jp
/
handbrake-jp-git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LinGui: Internalize all the icons so I don't have to install them in
[handbrake-jp/handbrake-jp-git.git]
/
libhb
/
hb.c
diff --git
a/libhb/hb.c
b/libhb/hb.c
index
825b2de
..
cde5132
100644
(file)
--- a/
libhb/hb.c
+++ b/
libhb/hb.c
@@
-1,7
+1,8
@@
#include "hb.h"
#include "hb.h"
-#include "ffmpeg/avcodec.h"
-#include "ffmpeg/swscale.h"
+#include "libavcodec/avcodec.h"
+#include "libavformat/avformat.h"
+#include "libswscale/swscale.h"
struct hb_handle_s
{
struct hb_handle_s
{
@@
-72,7
+73,6
@@
hb_handle_t * hb_init_real( int verbose, int update_check )
if( verbose > HB_DEBUG_NONE )
{
putenv( "HB_DEBUG=1" );
if( verbose > HB_DEBUG_NONE )
{
putenv( "HB_DEBUG=1" );
- av_log_set_level(AV_LOG_DEBUG);
}
/* Check for an update on the website if asked to */
}
/* Check for an update on the website if asked to */
@@
-122,9
+122,7
@@
hb_handle_t * hb_init_real( int verbose, int update_check )
h->pause_lock = hb_lock_init();
/* libavcodec */
h->pause_lock = hb_lock_init();
/* libavcodec */
- avcodec_init();
- avcodec_register_all();
- av_register_codec_parser( &mpegaudio_parser);
+ av_register_all();
/* Start library thread */
hb_log( "hb_init: starting libhb thread" );
/* Start library thread */
hb_log( "hb_init: starting libhb thread" );
@@
-154,7
+152,6
@@
hb_handle_t * hb_init_dl( int verbose, int update_check )
if( verbose > HB_DEBUG_NONE )
{
putenv( "HB_DEBUG=1" );
if( verbose > HB_DEBUG_NONE )
{
putenv( "HB_DEBUG=1" );
- av_log_set_level(AV_LOG_DEBUG);
}
/* Check for an update on the website if asked to */
}
/* Check for an update on the website if asked to */
@@
-220,6
+217,9
@@
hb_handle_t * hb_init_dl( int verbose, int update_check )
hb_register( &hb_deca52 );
hb_register( &hb_decdca );
hb_register( &hb_decavcodec );
hb_register( &hb_deca52 );
hb_register( &hb_decdca );
hb_register( &hb_decavcodec );
+ hb_register( &hb_decavcodecv );
+ hb_register( &hb_decavcodecvi );
+ hb_register( &hb_decavcodecai );
hb_register( &hb_declpcm );
hb_register( &hb_encfaac );
hb_register( &hb_enclame );
hb_register( &hb_declpcm );
hb_register( &hb_encfaac );
hb_register( &hb_enclame );
@@
-565,11
+565,11
@@
void hb_set_anamorphic_size( hb_job_t * job,
hb_title_t * title = job->title;
int cropped_width = title->width - job->crop[2] - job->crop[3] ;
int cropped_height = title->height - job->crop[0] - job->crop[1] ;
hb_title_t * title = job->title;
int cropped_width = title->width - job->crop[2] - job->crop[3] ;
int cropped_height = title->height - job->crop[0] - job->crop[1] ;
-
int storage_aspect = cropped_width * 10000 /
cropped_height;
+
double storage_aspect = (double)cropped_width / (double)
cropped_height;
int width = job->width;
int height; // Gets set later, ignore user value
int mod = job->modulus;
int width = job->width;
int height; // Gets set later, ignore user value
int mod = job->modulus;
-
int
aspect = title->aspect;
+
double
aspect = title->aspect;
/* Gotta handle bounding dimensions differently
than for non-anamorphic encodes:
/* Gotta handle bounding dimensions differently
than for non-anamorphic encodes:
@@
-583,13
+583,14
@@
void hb_set_anamorphic_size( hb_job_t * job,
if ( job->maxWidth && (job->maxWidth < job->width) )
width = job->maxWidth;
if ( job->maxWidth && (job->maxWidth < job->width) )
width = job->maxWidth;
- if ( job->maxHeight && (job->maxHeight < (width / storage_aspect * 10000)) )
+ height = (double)width / storage_aspect;
+ if ( job->maxHeight && (job->maxHeight < height) )
{
height = job->maxHeight;
}
else
{
{
height = job->maxHeight;
}
else
{
- height =
width * 10000
/ storage_aspect;
+ height =
(double)width
/ storage_aspect;
}
}
@@
-654,20
+655,27
@@
void hb_set_anamorphic_size( hb_job_t * job,
int pixel_aspect_width = job->pixel_aspect_width;
int pixel_aspect_height = job->pixel_aspect_height;
int pixel_aspect_width = job->pixel_aspect_width;
int pixel_aspect_height = job->pixel_aspect_height;
-
- if (cropped_width <= 706)
+
+ /* If a source was really 704*480 and hard matted with cropping
+ to 720*480, replace the PAR values with the ITU broadcast ones. */
+ if (title->width == 720 && cropped_width <= 706)
{
{
+ // convert aspect to a scaled integer so we can test for 16:9 & 4:3
+ // aspect ratios ignoring insignificant differences in the LSBs of
+ // the floating point representation.
+ int iaspect = aspect * 9.;
+
/* Handle ITU PARs */
if (title->height == 480)
{
/* It's NTSC */
/* Handle ITU PARs */
if (title->height == 480)
{
/* It's NTSC */
- if (aspect == 16)
+ if (
i
aspect == 16)
{
/* It's widescreen */
pixel_aspect_width = 40;
pixel_aspect_height = 33;
}
{
/* It's widescreen */
pixel_aspect_width = 40;
pixel_aspect_height = 33;
}
- else
+ else
if (iaspect == 12)
{
/* It's 4:3 */
pixel_aspect_width = 10;
{
/* It's 4:3 */
pixel_aspect_width = 10;
@@
-677,13
+685,13
@@
void hb_set_anamorphic_size( hb_job_t * job,
else if (title->height == 576)
{
/* It's PAL */
else if (title->height == 576)
{
/* It's PAL */
- if(aspect == 16)
+ if(
i
aspect == 16)
{
/* It's widescreen */
pixel_aspect_width = 16;
pixel_aspect_height = 11;
}
{
/* It's widescreen */
pixel_aspect_width = 16;
pixel_aspect_height = 11;
}
- else
+ else
if (iaspect == 12)
{
/* It's 4:3 */
pixel_aspect_width = 12;
{
/* It's 4:3 */
pixel_aspect_width = 12;
@@
-693,7
+701,8
@@
void hb_set_anamorphic_size( hb_job_t * job,
}
/* Figure out what dimensions the source would display at. */
}
/* Figure out what dimensions the source would display at. */
- int source_display_width = cropped_width * ((float)pixel_aspect_width / (float)pixel_aspect_height) ;
+ int source_display_width = cropped_width * (double)pixel_aspect_width /
+ (double)pixel_aspect_height ;
/* The film AR is the source's display width / cropped source height.
The output display width is the output height * film AR.
/* The film AR is the source's display width / cropped source height.
The output display width is the output height * film AR.
@@
-701,16
+710,14
@@
void hb_set_anamorphic_size( hb_job_t * job,
pixel_aspect_width = height * source_display_width / cropped_height;
pixel_aspect_height = width;
pixel_aspect_width = height * source_display_width / cropped_height;
pixel_aspect_height = width;
- /* While x264 is smart enough to reduce fractions on its own, libavcodec
- needs some help with the math, so lose superfluous factors. */
- hb_reduce( &pixel_aspect_width, &pixel_aspect_height,
- pixel_aspect_width, pixel_aspect_height );
-
/* Pass the results back to the caller */
*output_width = width;
*output_height = height;
/* Pass the results back to the caller */
*output_width = width;
*output_height = height;
- *output_par_width = pixel_aspect_width;
- *output_par_height = pixel_aspect_height;
+
+ /* While x264 is smart enough to reduce fractions on its own, libavcodec
+ needs some help with the math, so lose superfluous factors. */
+ hb_reduce( output_par_width, output_par_height,
+ pixel_aspect_width, pixel_aspect_height );
}
/**
}
/**
@@
-719,14
+726,14
@@
void hb_set_anamorphic_size( hb_job_t * job,
* @param aspect Desired aspect ratio. Value of -1 uses title aspect.
* @param pixels Maximum desired pixel count.
*/
* @param aspect Desired aspect ratio. Value of -1 uses title aspect.
* @param pixels Maximum desired pixel count.
*/
-void hb_set_size( hb_job_t * job,
int
aspect, int pixels )
+void hb_set_size( hb_job_t * job,
double
aspect, int pixels )
{
hb_title_t * title = job->title;
int croppedWidth = title->width - title->crop[2] - title->crop[3];
int croppedHeight = title->height - title->crop[0] - title->crop[1];
{
hb_title_t * title = job->title;
int croppedWidth = title->width - title->crop[2] - title->crop[3];
int croppedHeight = title->height - title->crop[0] - title->crop[1];
-
int
croppedAspect = title->aspect * title->height * croppedWidth /
-
croppedHeight / title->width;
+
double
croppedAspect = title->aspect * title->height * croppedWidth /
+ croppedHeight / title->width;
int addCrop;
int i, w, h;
int addCrop;
int i, w, h;
@@
-791,7
+798,7
@@
void hb_set_size( hb_job_t * job, int aspect, int pixels )
for( i = 0;; i++ )
{
w = 16 * i;
for( i = 0;; i++ )
{
w = 16 * i;
- h = MULTIPLE_16(
w * HB_ASPECT_BASE / aspect
);
+ h = MULTIPLE_16(
(int)( (double)w / aspect )
);
if( w * h > pixels )
{
break;
if( w * h > pixels )
{
break;
@@
-799,7
+806,7
@@
void hb_set_size( hb_job_t * job, int aspect, int pixels )
}
i--;
job->width = 16 * i;
}
i--;
job->width = 16 * i;
- job->height = MULTIPLE_16(
16 * i * HB_ASPECT_BASE / aspect
);
+ job->height = MULTIPLE_16(
(int)( (double)job->width / aspect )
);
}
/**
}
/**
@@
-860,15
+867,11
@@
void hb_add( hb_handle_t * h, hb_job_t * job )
/* Copy the audio track(s) we want */
title_copy->list_audio = hb_list_init();
/* Copy the audio track(s) we want */
title_copy->list_audio = hb_list_init();
- /* Do nothing about audio during first pass */
- if( job->pass == 0 || job->pass == 2 )
+ for( i = 0; i < hb_list_count(job->list_audio); i++ )
{
{
-
for( i = 0; i < hb_list_count(job->list_audio); i++
)
+
if( ( audio = hb_list_item( job->list_audio, i ) )
)
{
{
- if( ( audio = hb_list_item( job->list_audio, i ) ) )
- {
- hb_list_add( title_copy->list_audio, hb_audio_copy(audio) );
- }
+ hb_list_add( title_copy->list_audio, hb_audio_copy(audio) );
}
}
}
}