ti.offset_x = ti.offset_y = 0;
ti.fps_numerator = job->vrate;
ti.fps_denominator = job->vrate_base;
- if (job->pixel_ratio)
+ if( job->anamorphic.mode )
{
- ti.aspect_numerator = job->pixel_aspect_width;
- ti.aspect_denominator = job->pixel_aspect_height;
+ ti.aspect_numerator = job->anamorphic.par_width;
+ ti.aspect_denominator = job->anamorphic.par_height;
}
else
{
ti.keyframe_mindistance = 8;
ti.noise_sensitivity = 1;
ti.sharpness = 0;
- if (job->vquality < 0.0 || job->vquality > 1.0)
+ if (job->vquality < 0.0)
{
ti.target_bitrate = job->vbitrate * 1000;
ti.keyframe_data_target_bitrate = job->vbitrate * 1000 * 1.5;
else
{
ti.target_bitrate = 0;
- ti.quality = 63 * job->vquality;
+
+ if( job->vquality > 0 && job->vquality < 1 )
+ {
+ ti.quality = 63 * job->vquality;
+ }
+ else
+ {
+ ti.quality = job->vquality;
+ }
}
theora_encode_init( &pv->theora, &ti );
yuv.y_height = job->height;
yuv.y_stride = job->width;
- yuv.uv_width = job->width / 2;
- yuv.uv_height = job->height / 2;
- yuv.uv_stride = job->width / 2;
+ yuv.uv_width = (job->width + 1) / 2;
+ yuv.uv_height = (job->height + 1) / 2;
+ yuv.uv_stride = yuv.uv_width;
yuv.y = in->data;
yuv.u = in->data + job->width * job->height;
- yuv.v = in->data + job->width * job->height * 5/4;
+ yuv.v = in->data + ( job->width * job->height ) + ( yuv.uv_width * yuv.uv_height );
theora_encode_YUVin(&pv->theora, &yuv);