diff options
author | jstebbins <[email protected]> | 2014-12-16 16:50:50 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2014-12-16 16:50:50 +0000 |
commit | f56efd7b52c89da8cac55b4d4a187f2c87fdfee6 (patch) | |
tree | 24eacb856704fa8e4b8b8f0edc76568916f70255 /libhb/common.c | |
parent | d0a975e42dcab93e1d2eead350fb1ba3951d977c (diff) |
json: add json APIs
There are several changes to job and title structs that break
current windows interop code. The interop code should be changed
such that it only uses json APIs. So if there is any missing
features (or bugs) in these APIs, please let me know.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6602 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/common.c')
-rw-r--r-- | libhb/common.c | 71 |
1 files changed, 43 insertions, 28 deletions
diff --git a/libhb/common.c b/libhb/common.c index 79be58758..ee4c566ba 100644 --- a/libhb/common.c +++ b/libhb/common.c @@ -2877,14 +2877,14 @@ hb_title_t * hb_title_init( char * path, int index ) t->list_subtitle = hb_list_init(); t->list_attachment = hb_list_init(); t->metadata = hb_metadata_init(); - strcat( t->path, path ); + strncat(t->path, path, sizeof(t->path) - 1); // default to decoding mpeg2 t->video_id = 0xE0; t->video_codec = WORK_DECAVCODECV; t->video_codec_param = AV_CODEC_ID_MPEG2VIDEO; t->angle_count = 1; - t->pixel_aspect_width = 1; - t->pixel_aspect_height = 1; + t->geometry.par.num = 1; + t->geometry.par.den = 1; return t; } @@ -2967,8 +2967,7 @@ static void job_reset_for_mac_ui( hb_job_t * job, hb_title_t * title ) job->vquality = -1.0; job->vbitrate = 1000; job->pass = 0; - job->vrate = title->rate; - job->vrate_base = title->rate_base; + job->vrate = title->vrate; job->list_audio = hb_list_init(); job->list_subtitle = hb_list_init(); @@ -2979,7 +2978,7 @@ static void job_reset_for_mac_ui( hb_job_t * job, hb_title_t * title ) } -static void job_setup( hb_job_t * job, hb_title_t * title ) +static void job_setup(hb_job_t * job, hb_title_t * title) { if ( job == NULL || title == NULL ) return; @@ -2995,36 +2994,47 @@ static void job_setup( hb_job_t * job, hb_title_t * title ) memcpy( job->crop, title->crop, 4 * sizeof( int ) ); /* Preserve a source's pixel aspect, if it's available. */ - if( title->pixel_aspect_width && title->pixel_aspect_height ) + if (title->geometry.par.num && title->geometry.par.den) { - job->anamorphic.par_width = title->pixel_aspect_width; - job->anamorphic.par_height = title->pixel_aspect_height; + job->par = title->geometry.par; } - - if( title->aspect != 0 && title->aspect != 1. && - !job->anamorphic.par_width && !job->anamorphic.par_height) + else if (title->dar.num && title->dar.den) { - hb_reduce( &job->anamorphic.par_width, &job->anamorphic.par_height, - (int)(title->aspect * title->height + 0.5), title->width ); + hb_reduce(&job->par.num, &job->par.den, + title->geometry.height * title->dar.num, + title->geometry.width * title->dar.den); } - job->width = title->width - job->crop[2] - job->crop[3]; - job->height = title->height - job->crop[0] - job->crop[1]; + job->width = title->geometry.width - title->crop[2] - title->crop[3]; + job->height = title->geometry.height - title->crop[0] - title->crop[1]; +#ifdef HB_DEPRECATE_JOB_SETTINGS job->anamorphic.keep_display_aspect = 1; +#endif + + hb_geometry_t resultGeo, srcGeo; + hb_geometry_settings_t uiGeo; + + srcGeo.width = title->geometry.width; + srcGeo.height = title->geometry.height; + srcGeo.par = title->geometry.par; - int width, height, par_width, par_height; - hb_set_anamorphic_size(job, &width, &height, &par_width, &par_height); - job->width = width; - job->height = height; - job->anamorphic.par_width = par_width; - job->anamorphic.par_height = par_height; + uiGeo.geometry.width = job->width; + uiGeo.geometry.height = job->height; + uiGeo.geometry.par = job->par; + uiGeo.mode = 0; + uiGeo.keep = HB_KEEP_DISPLAY_ASPECT; + uiGeo.itu_par = 0; + + hb_set_anamorphic_size2(&srcGeo, &uiGeo, &resultGeo); + job->width = resultGeo.width; + job->height = resultGeo.height; + job->par = resultGeo.par; job->vcodec = HB_VCODEC_FFMPEG_MPEG4; job->vquality = -1.0; job->vbitrate = 1000; job->pass = 0; - job->vrate = title->rate; - job->vrate_base = title->rate_base; + job->vrate = title->vrate; job->mux = HB_MUX_MP4; @@ -3133,10 +3143,10 @@ hb_title_t * hb_find_title_by_index( hb_handle_t *h, int title_index ) */ hb_job_t * hb_job_init_by_index( hb_handle_t * h, int title_index ) { - hb_title_set_t *title_set = hb_get_title_set( h ); - hb_title_t * title = hb_list_item( title_set->list_title, - title_index - 1 ); - return hb_job_init( title ); + hb_title_t * title = hb_find_title_by_index(h, title_index); + if (title == NULL) + return NULL; + return hb_job_init(title); } hb_job_t * hb_job_init( hb_title_t * title ) @@ -3574,6 +3584,8 @@ int hb_audio_add(const hb_job_t * job, const hb_audio_config_t * audiocfg) * HandBrakeCLI assumes this value is preserved in the jobs * audio list, but in.track in the title's audio list is not * required to be the same. */ + // "track" in title->list_audio is an index into the source's tracks. + // "track" in job->list_audio is an index into title->list_audio audio->config.in.track = audiocfg->in.track; /* Really shouldn't ignore the passed out track, but there is currently no @@ -3739,6 +3751,9 @@ int hb_subtitle_add(const hb_job_t * job, const hb_subtitle_config_t * subtitlec return 0; } + // "track" in title->list_audio is an index into the source's tracks. + // "track" in job->list_audio is an index into title->list_audio + subtitle->track = track; subtitle->config = *subtitlecfg; subtitle->out_track = hb_list_count(job->list_subtitle) + 1; hb_list_add(job->list_subtitle, subtitle); |