forked from FFmpeg/FFmpeg
export gcd function as av_gcd()
Originally committed as revision 16653 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
3194b00479
commit
9ce6c13879
14 changed files with 19 additions and 20 deletions
|
@ -5156,7 +5156,7 @@ int h263_decode_picture_header(MpegEncContext *s)
|
||||||
av_log(s, AV_LOG_ERROR, "zero framerate\n");
|
av_log(s, AV_LOG_ERROR, "zero framerate\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
gcd= ff_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
|
gcd= av_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
|
||||||
s->avctx->time_base.den /= gcd;
|
s->avctx->time_base.den /= gcd;
|
||||||
s->avctx->time_base.num /= gcd;
|
s->avctx->time_base.num /= gcd;
|
||||||
// av_log(s->avctx, AV_LOG_DEBUG, "%d/%d\n", s->avctx->time_base.den, s->avctx->time_base.num);
|
// av_log(s->avctx, AV_LOG_DEBUG, "%d/%d\n", s->avctx->time_base.den, s->avctx->time_base.num);
|
||||||
|
|
|
@ -557,7 +557,7 @@ void xvid_correct_framerate(AVCodecContext *avctx) {
|
||||||
frate = avctx->time_base.den;
|
frate = avctx->time_base.den;
|
||||||
fbase = avctx->time_base.num;
|
fbase = avctx->time_base.num;
|
||||||
|
|
||||||
gcd = ff_gcd(frate, fbase);
|
gcd = av_gcd(frate, fbase);
|
||||||
if( gcd > 1 ) {
|
if( gcd > 1 ) {
|
||||||
frate /= gcd;
|
frate /= gcd;
|
||||||
fbase /= gcd;
|
fbase /= gcd;
|
||||||
|
@ -579,7 +579,7 @@ void xvid_correct_framerate(AVCodecContext *avctx) {
|
||||||
} else
|
} else
|
||||||
est_fbase = 1;
|
est_fbase = 1;
|
||||||
|
|
||||||
gcd = ff_gcd(est_frate, est_fbase);
|
gcd = av_gcd(est_frate, est_fbase);
|
||||||
if( gcd > 1 ) {
|
if( gcd > 1 ) {
|
||||||
est_frate /= gcd;
|
est_frate /= gcd;
|
||||||
est_fbase /= gcd;
|
est_fbase /= gcd;
|
||||||
|
|
|
@ -464,7 +464,7 @@ av_cold int MPV_encode_init(AVCodecContext *avctx)
|
||||||
avctx->b_frame_strategy = 0;
|
avctx->b_frame_strategy = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
i= ff_gcd(avctx->time_base.den, avctx->time_base.num);
|
i= av_gcd(avctx->time_base.den, avctx->time_base.num);
|
||||||
if(i > 1){
|
if(i > 1){
|
||||||
av_log(avctx, AV_LOG_INFO, "removing common factors from framerate\n");
|
av_log(avctx, AV_LOG_INFO, "removing common factors from framerate\n");
|
||||||
avctx->time_base.den /= i;
|
avctx->time_base.den /= i;
|
||||||
|
|
|
@ -4773,7 +4773,7 @@ int main(void){
|
||||||
}
|
}
|
||||||
error= (int)(sqrt(error)+0.5);
|
error= (int)(sqrt(error)+0.5);
|
||||||
errors[level][orientation]= error;
|
errors[level][orientation]= error;
|
||||||
if(g) g=ff_gcd(g, error);
|
if(g) g=av_gcd(g, error);
|
||||||
else g= error;
|
else g= error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -694,7 +694,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
|
||||||
display_aspect_ratio.num, display_aspect_ratio.den);
|
display_aspect_ratio.num, display_aspect_ratio.den);
|
||||||
}
|
}
|
||||||
if(av_log_get_level() >= AV_LOG_DEBUG){
|
if(av_log_get_level() >= AV_LOG_DEBUG){
|
||||||
int g= ff_gcd(enc->time_base.num, enc->time_base.den);
|
int g= av_gcd(enc->time_base.num, enc->time_base.den);
|
||||||
snprintf(buf + strlen(buf), buf_size - strlen(buf),
|
snprintf(buf + strlen(buf), buf_size - strlen(buf),
|
||||||
", %d/%d",
|
", %d/%d",
|
||||||
enc->time_base.num/g, enc->time_base.den/g);
|
enc->time_base.num/g, enc->time_base.den/g);
|
||||||
|
|
|
@ -1172,7 +1172,7 @@ static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
||||||
sc->stts_data[i].count= sample_count;
|
sc->stts_data[i].count= sample_count;
|
||||||
sc->stts_data[i].duration= sample_duration;
|
sc->stts_data[i].duration= sample_duration;
|
||||||
|
|
||||||
sc->time_rate= ff_gcd(sc->time_rate, sample_duration);
|
sc->time_rate= av_gcd(sc->time_rate, sample_duration);
|
||||||
|
|
||||||
dprintf(c->fc, "sample_count=%d, sample_duration=%d\n",sample_count,sample_duration);
|
dprintf(c->fc, "sample_count=%d, sample_duration=%d\n",sample_count,sample_duration);
|
||||||
|
|
||||||
|
@ -1215,7 +1215,7 @@ static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
|
||||||
sc->ctts_data[i].count = count;
|
sc->ctts_data[i].count = count;
|
||||||
sc->ctts_data[i].duration= duration;
|
sc->ctts_data[i].duration= duration;
|
||||||
|
|
||||||
sc->time_rate= ff_gcd(sc->time_rate, FFABS(duration));
|
sc->time_rate= av_gcd(sc->time_rate, FFABS(duration));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,7 +206,7 @@ static int decode_main_header(NUTContext *nut){
|
||||||
for(i=0; i<nut->time_base_count; i++){
|
for(i=0; i<nut->time_base_count; i++){
|
||||||
GET_V(nut->time_base[i].num, tmp>0 && tmp<(1ULL<<31))
|
GET_V(nut->time_base[i].num, tmp>0 && tmp<(1ULL<<31))
|
||||||
GET_V(nut->time_base[i].den, tmp>0 && tmp<(1ULL<<31))
|
GET_V(nut->time_base[i].den, tmp>0 && tmp<(1ULL<<31))
|
||||||
if(ff_gcd(nut->time_base[i].num, nut->time_base[i].den) != 1){
|
if(av_gcd(nut->time_base[i].num, nut->time_base[i].den) != 1){
|
||||||
av_log(s, AV_LOG_ERROR, "time base invalid\n");
|
av_log(s, AV_LOG_ERROR, "time base invalid\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -466,7 +466,7 @@ void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssiz
|
||||||
*au_scale= stream->block_align ? stream->block_align*8 : 8;
|
*au_scale= stream->block_align ? stream->block_align*8 : 8;
|
||||||
*au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate;
|
*au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate;
|
||||||
}
|
}
|
||||||
gcd= ff_gcd(*au_scale, *au_rate);
|
gcd= av_gcd(*au_scale, *au_rate);
|
||||||
*au_scale /= gcd;
|
*au_scale /= gcd;
|
||||||
*au_rate /= gcd;
|
*au_rate /= gcd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2727,7 +2727,7 @@ static void dump_stream_format(AVFormatContext *ic, int i, int index, int is_out
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
|
int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
|
||||||
AVStream *st = ic->streams[i];
|
AVStream *st = ic->streams[i];
|
||||||
int g = ff_gcd(st->time_base.num, st->time_base.den);
|
int g = av_gcd(st->time_base.num, st->time_base.den);
|
||||||
avcodec_string(buf, sizeof(buf), st->codec, is_output);
|
avcodec_string(buf, sizeof(buf), st->codec, is_output);
|
||||||
av_log(NULL, AV_LOG_INFO, " Stream #%d.%d", index, i);
|
av_log(NULL, AV_LOG_INFO, " Stream #%d.%d", index, i);
|
||||||
/* the pid is an important information, so we display it */
|
/* the pid is an important information, so we display it */
|
||||||
|
@ -3192,7 +3192,7 @@ char *ff_data_to_hex(char *buff, const uint8_t *src, int s)
|
||||||
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
|
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
|
||||||
int pts_num, int pts_den)
|
int pts_num, int pts_den)
|
||||||
{
|
{
|
||||||
unsigned int gcd= ff_gcd(pts_num, pts_den);
|
unsigned int gcd= av_gcd(pts_num, pts_den);
|
||||||
s->pts_wrap_bits = pts_wrap_bits;
|
s->pts_wrap_bits = pts_wrap_bits;
|
||||||
s->time_base.num = pts_num/gcd;
|
s->time_base.num = pts_num/gcd;
|
||||||
s->time_base.den = pts_den/gcd;
|
s->time_base.den = pts_den/gcd;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
|
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 49
|
#define LIBAVUTIL_VERSION_MAJOR 49
|
||||||
#define LIBAVUTIL_VERSION_MINOR 12
|
#define LIBAVUTIL_VERSION_MINOR 13
|
||||||
#define LIBAVUTIL_VERSION_MICRO 0
|
#define LIBAVUTIL_VERSION_MICRO 0
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||||
|
|
|
@ -242,9 +242,6 @@ static inline av_const float av_clipf(float a, float amin, float amax)
|
||||||
else return a;
|
else return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* math */
|
|
||||||
int64_t av_const ff_gcd(int64_t a, int64_t b);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* converts fourcc string to int
|
* converts fourcc string to int
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -48,8 +48,8 @@ const uint8_t ff_log2_tab[256]={
|
||||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
|
||||||
};
|
};
|
||||||
|
|
||||||
int64_t ff_gcd(int64_t a, int64_t b){
|
int64_t av_gcd(int64_t a, int64_t b){
|
||||||
if(b) return ff_gcd(b, a%b);
|
if(b) return av_gcd(b, a%b);
|
||||||
else return a;
|
else return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,8 @@ enum AVRounding {
|
||||||
AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero
|
AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int64_t av_const av_gcd(int64_t a, int64_t b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rescale a 64bit integer with rounding to nearest.
|
* rescale a 64bit integer with rounding to nearest.
|
||||||
* a simple a*b/c isn't possible as it can overflow
|
* a simple a*b/c isn't possible as it can overflow
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){
|
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){
|
||||||
AVRational a0={0,1}, a1={1,0};
|
AVRational a0={0,1}, a1={1,0};
|
||||||
int sign= (nom<0) ^ (den<0);
|
int sign= (nom<0) ^ (den<0);
|
||||||
int64_t gcd= ff_gcd(FFABS(nom), FFABS(den));
|
int64_t gcd= av_gcd(FFABS(nom), FFABS(den));
|
||||||
|
|
||||||
if(gcd){
|
if(gcd){
|
||||||
nom = FFABS(nom)/gcd;
|
nom = FFABS(nom)/gcd;
|
||||||
|
@ -66,7 +66,7 @@ int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max)
|
||||||
nom= den;
|
nom= den;
|
||||||
den= next_den;
|
den= next_den;
|
||||||
}
|
}
|
||||||
assert(ff_gcd(a1.num, a1.den) <= 1U);
|
assert(av_gcd(a1.num, a1.den) <= 1U);
|
||||||
|
|
||||||
*dst_nom = sign ? -a1.num : a1.num;
|
*dst_nom = sign ? -a1.num : a1.num;
|
||||||
*dst_den = a1.den;
|
*dst_den = a1.den;
|
||||||
|
|
Loading…
Add table
Reference in a new issue