Mercurial > libavcodec.hg
comparison utils.c @ 1126:77ccf7fe3bd0 libavcodec
per context frame_rate_base, this should finally fix frame_rate related av sync issues
| author | michaelni |
|---|---|
| date | Wed, 12 Mar 2003 15:16:19 +0000 |
| parents | 1e39f273ecd6 |
| children | e10e841c9bf0 |
comparison
equal
deleted
inserted
replaced
| 1125:0980ae063f4e | 1126:77ccf7fe3bd0 |
|---|---|
| 234 s->i_quant_factor=-0.8; | 234 s->i_quant_factor=-0.8; |
| 235 s->i_quant_offset=0.0; | 235 s->i_quant_offset=0.0; |
| 236 s->error_concealment= 3; | 236 s->error_concealment= 3; |
| 237 s->error_resilience= 1; | 237 s->error_resilience= 1; |
| 238 s->workaround_bugs= FF_BUG_AUTODETECT; | 238 s->workaround_bugs= FF_BUG_AUTODETECT; |
| 239 s->frame_rate = 25 * FRAME_RATE_BASE; | 239 s->frame_rate_base= 1; |
| 240 s->frame_rate = 25; | |
| 240 s->gop_size= 50; | 241 s->gop_size= 50; |
| 241 s->me_method= ME_EPZS; | 242 s->me_method= ME_EPZS; |
| 242 s->get_buffer= avcodec_default_get_buffer; | 243 s->get_buffer= avcodec_default_get_buffer; |
| 243 s->release_buffer= avcodec_default_release_buffer; | 244 s->release_buffer= avcodec_default_release_buffer; |
| 244 s->get_format= avcodec_default_get_format; | 245 s->get_format= avcodec_default_get_format; |
| 461 } | 462 } |
| 462 if (enc->width) { | 463 if (enc->width) { |
| 463 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 464 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
| 464 ", %dx%d, %0.2f fps", | 465 ", %dx%d, %0.2f fps", |
| 465 enc->width, enc->height, | 466 enc->width, enc->height, |
| 466 (float)enc->frame_rate / FRAME_RATE_BASE); | 467 (float)enc->frame_rate / enc->frame_rate_base); |
| 467 } | 468 } |
| 468 if (encode) { | 469 if (encode) { |
| 469 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 470 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
| 470 ", q=%d-%d", enc->qmin, enc->qmax); | 471 ", q=%d-%d", enc->qmin, enc->qmax); |
| 471 } | 472 } |
| 586 //FIXME | 587 //FIXME |
| 587 break; | 588 break; |
| 588 } | 589 } |
| 589 } | 590 } |
| 590 | 591 |
| 592 int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){ | |
| 593 int exact=1, sign=0; | |
| 594 int64_t gcd, larger; | |
| 595 | |
| 596 assert(den != 0); | |
| 597 | |
| 598 if(den < 0){ | |
| 599 den= -den; | |
| 600 nom= -nom; | |
| 601 } | |
| 602 | |
| 603 if(nom < 0){ | |
| 604 nom= -nom; | |
| 605 sign= 1; | |
| 606 } | |
| 607 | |
| 608 for(;;){ //note is executed 1 or 2 times | |
| 609 gcd = ff_gcd(nom, den); | |
| 610 nom /= gcd; | |
| 611 den /= gcd; | |
| 612 | |
| 613 larger= FFMAX(nom, den); | |
| 614 | |
| 615 if(larger > max){ | |
| 616 int64_t div= (larger + max - 1) / max; | |
| 617 nom = (nom + div/2)/div; | |
| 618 den = (den + div/2)/div; | |
| 619 exact=0; | |
| 620 }else | |
| 621 break; | |
| 622 } | |
| 623 | |
| 624 if(sign) nom= -nom; | |
| 625 | |
| 626 *dst_nom = nom; | |
| 627 *dst_den = den; | |
| 628 | |
| 629 return exact; | |
| 630 } | |
| 631 | |
| 632 int64_t av_rescale(int64_t a, int b, int c){ | |
| 633 uint64_t h, l; | |
| 634 assert(c > 0); | |
| 635 assert(b >=0); | |
| 636 | |
| 637 if(a<0) return -av_rescale(-a, b, c); | |
| 638 | |
| 639 h= a>>32; | |
| 640 if(h==0) return a*b/c; | |
| 641 | |
| 642 l= a&0xFFFFFFFF; | |
| 643 l *= b; | |
| 644 h *= b; | |
| 645 | |
| 646 l += (h%c)<<32; | |
| 647 | |
| 648 return ((h/c)<<32) + l/c; | |
| 649 } | |
| 650 | |
| 591 static int raw_encode_init(AVCodecContext *s) | 651 static int raw_encode_init(AVCodecContext *s) |
| 592 { | 652 { |
| 593 return 0; | 653 return 0; |
| 594 } | 654 } |
| 595 | 655 |
