--- branches/dev-api-4/xvidcore/vfw/src/codec.c 2003/11/11 16:25:39 1203 +++ branches/dev-api-4/xvidcore/vfw/src/codec.c 2003/12/20 15:30:03 1286 @@ -285,7 +285,7 @@ * builds and that activates lot of other debug printfs. We only * want these all the time */ char buf[1024]; - sprintf(buf, "[%5i] type=%c Q:%2i length:%6i", + sprintf(buf, "[%6i] type=%c Q:%2i length:%6i", data->frame_num, type2char(data->type), data->quant, @@ -384,7 +384,7 @@ pass2.max_overflow_improvement = codec->config.twopass_max_overflow_improvement; pass2.max_overflow_degradation = codec->config.twopass_max_overflow_degradation; pass2.kfreduction = codec->config.kfreduction; - pass2.min_key_interval = codec->config.min_key_interval; + pass2.kfthreshold = codec->config.kfthreshold; pass2.container_frame_overhead = 24; /* AVI */ plugins[create.num_plugins].func = xvid_plugin_2pass2; @@ -489,9 +489,11 @@ int i; for (i=0; inum_zones && config->zones[i].frame <= framenum; i++) ; - i--; - frame->type = config->zones[i].type; + if (--i < 0) return; /* there are no zones, or we're before the first zone */ + + if (framenum == config->zones[i].frame) + frame->type = config->zones[i].type; if (config->zones[i].greyscale) { frame->vop_flags |= XVID_VOP_GREYSCALE; @@ -555,6 +557,21 @@ if ((profiles[codec->config.profile].flags & PROFILE_INTERLACE) && codec->config.interlacing) frame.vol_flags |= XVID_VOL_INTERLACING; + if (codec->config.ar_mode == 0) { /* PAR */ + if (codec->config.display_aspect_ratio != 5) { + frame.par = codec->config.display_aspect_ratio + 1; + } else { + frame.par = XVID_PAR_EXT; + frame.par_width = codec->config.par_x; + frame.par_height= codec->config.par_y; + } + } else { /* AR */ + /* custom pixel aspect ratio -> calculated from DAR */ + frame.par = XVID_PAR_EXT; + frame.par_width = (100 * inhdr->biHeight) / codec->config.ar_y; + frame.par_height= (100 * inhdr->biWidth) / codec->config.ar_x; + } + /* vop stuff */ frame.vop_flags |= XVID_VOP_HALFPEL; @@ -637,14 +654,7 @@ // force keyframe spacing in 2-pass 1st pass if (codec->config.motion_search == 0) - { frame.type = XVID_TYPE_IVOP; - } - else if (codec->keyspacing < codec->config.min_key_interval && codec->framenum) - { - DPRINTF("current frame forced to p-frame"); - frame.type = XVID_TYPE_PVOP; - } /* frame-based stuff */ apply_zone_modifiers(&frame, &codec->config, codec->framenum);