summaryrefslogtreecommitdiffstats
path: root/libhb/common.c
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2014-12-16 16:50:50 +0000
committerjstebbins <[email protected]>2014-12-16 16:50:50 +0000
commitf56efd7b52c89da8cac55b4d4a187f2c87fdfee6 (patch)
tree24eacb856704fa8e4b8b8f0edc76568916f70255 /libhb/common.c
parentd0a975e42dcab93e1d2eead350fb1ba3951d977c (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.c71
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);