X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fdecavcodec.c;h=8b09afcf77dac79aaf135d80368e1b44661037b2;hb=c593146bf3fab6290c71cbbb974e0a756e43f5e0;hp=5dd22244cc1df26eca0813a7e52677bfb950b48e;hpb=8f82160f8029a84a12d8219b35497727a27c9564;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/decavcodec.c b/libhb/decavcodec.c index 5dd22244..8b09afcf 100644 --- a/libhb/decavcodec.c +++ b/libhb/decavcodec.c @@ -61,9 +61,7 @@ #include "hb.h" #include "hbffmpeg.h" - -//#include "libavcodec/audioconvert.h" -#include "../contrib/ffmpeg/libavcodec/audioconvert.h" +#include "libavcodec/audioconvert.h" static int decavcodecInit( hb_work_object_t *, hb_job_t * ); static int decavcodecWork( hb_work_object_t *, hb_buffer_t **, hb_buffer_t ** ); @@ -403,7 +401,7 @@ static int decavcodecBSInfo( hb_work_object_t *w, const hb_buffer_t *buf, AVCodecParserContext *parser = av_parser_init( codec->id ); AVCodecContext *context = avcodec_alloc_context(); hb_avcodec_open( context, codec ); -#ifdef SYS_CYGWIN +#if defined( SYS_CYGWIN ) uint8_t *buffer = memalign(16, AVCODEC_MAX_AUDIO_FRAME_SIZE); #else uint8_t *buffer = malloc( AVCODEC_MAX_AUDIO_FRAME_SIZE ); @@ -897,6 +895,12 @@ static int decavcodecvInfo( hb_work_object_t *w, hb_work_info_t *info ) info->rate = 27000000; info->rate_base = (int64_t)context->time_base.num * 27000000LL / context->time_base.den; + if ( context->ticks_per_frame > 1 ) + { + // for ffmpeg 0.5 & later, the H.264 & MPEG-2 time base is + // field rate rather than frame rate so convert back to frames. + info->rate_base *= context->ticks_per_frame; + } /* Sometimes there's no pixel aspect set in the source. In that case, assume a 1:1 PAR. Otherwise, preserve the source PAR. */ @@ -1128,7 +1132,7 @@ static void decodeAudio( hb_work_private_t *pv, uint8_t *data, int size ) // complicated, machine dependent alignment here we use the // fact that malloc returns an aligned pointer on most architectures. - #ifdef SYS_CYGWIN + #if defined( SYS_CYGWIN ) // Cygwin's malloc doesn't appear to return 16-byte aligned memory so use memalign instead. pv->buffer = memalign(16, AVCODEC_MAX_AUDIO_FRAME_SIZE); #else