Exemplo n.º 1
0
static int find_frame_rate_index(MpegEncContext *s){
    int i;
    AVRational bestq= (AVRational){0, 0};
    AVRational ext;
    AVRational target = av_inv_q(s->avctx->time_base);

    for(i=1;i<14;i++) {
        if(s->avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL && i>=9) break;

        for (ext.num=1; ext.num <= 4; ext.num++) {
            for (ext.den=1; ext.den <= 32; ext.den++) {
                AVRational q = av_mul_q(ext, ff_mpeg12_frame_rate_tab[i]);

                if(s->codec_id != AV_CODEC_ID_MPEG2VIDEO && (ext.den!=1 || ext.num!=1))
                    continue;
                if(av_gcd(ext.den, ext.num) != 1)
                    continue;

                if(    bestq.num==0
                    || av_nearer_q(target, bestq, q) < 0
                    || ext.num==1 && ext.den==1 && av_nearer_q(target, bestq, q) == 0){
                    bestq = q;
                    s->frame_rate_index= i;
                    s->mpeg2_frame_rate_ext.num = ext.num;
                    s->mpeg2_frame_rate_ext.den = ext.den;
                }
            }
        }
    }
    if(av_cmp_q(target, bestq))
        return -1;
    else
        return 0;
}
Exemplo n.º 2
0
int av_find_nearest_q_idx(AVRational q, const AVRational* q_list)
{
    int i, nearest_q_idx = 0;
    for(i=0; q_list[i].den; i++)
        if (av_nearer_q(q, q_list[i], q_list[nearest_q_idx]) > 0)
            nearest_q_idx = i;

    return nearest_q_idx;
}