switch(s->pix_fmt){
case PIX_FMT_YUV420P:
case PIX_FMT_YUV422:
+ case PIX_FMT_UYVY422:
case PIX_FMT_YUV422P:
case PIX_FMT_YUV444P:
case PIX_FMT_GRAY8:
w_align=64;
h_align=64;
}
+ case PIX_FMT_RGB555:
+ if(s->codec_id == CODEC_ID_RPZA){
+ w_align=4;
+ h_align=4;
+ }
+ case PIX_FMT_PAL8:
+ if(s->codec_id == CODEC_ID_SMC){
+ w_align=4;
+ h_align=4;
+ }
break;
default:
w_align= 1;
case PIX_FMT_RGB555:
case PIX_FMT_RGB565:
case PIX_FMT_YUV422:
+ case PIX_FMT_UYVY422:
pixel_size=2;
break;
case PIX_FMT_RGB24:
int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
const short *samples)
{
- int ret;
-
- ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples);
- avctx->frame_number++;
- return ret;
+ if((avctx->codec->capabilities & CODEC_CAP_DELAY) || samples){
+ int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples);
+ avctx->frame_number++;
+ return ret;
+ }else
+ return 0;
}
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
const AVFrame *pict)
{
- int ret;
-
- ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict);
+ if((avctx->codec->capabilities & CODEC_CAP_DELAY) || pict){
+ int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict);
+ avctx->frame_number++;
+ emms_c(); //needed to avoid a emms_c() call before every return;
- emms_c(); //needed to avoid a emms_c() call before every return;
-
- avctx->frame_number++;
- return ret;
+ return ret;
+ }else
+ return 0;
}
/**
{
int ret;
+ *got_picture_ptr= 0;
ret = avctx->codec->decode(avctx, picture, got_picture_ptr,
buf, buf_size);
{
int ret;
+ *frame_size_ptr= 0;
ret = avctx->codec->decode(avctx, samples, frame_size_ptr,
buf, buf_size);
avctx->frame_number++;
return NULL;
}
-AVCodec *avcodec_find(enum CodecID id)
+static AVCodec *avcodec_find(enum CodecID id)
{
AVCodec *p;
p = first_avcodec;
}
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){
- int exact=1, sign=0;
- int64_t gcd;
-
- assert(den != 0);
-
- if(den < 0)
- return av_reduce(dst_nom, dst_den, -nom, -den, max);
-
- sign= nom < 0;
- nom= ABS(nom);
-
- gcd = ff_gcd(nom, den);
- nom /= gcd;
- den /= gcd;
-
- if(nom > max || den > max){
- AVRational a0={0,1}, a1={1,0};
- exact=0;
-
- for(;;){
- int64_t x= nom / den;
- int64_t a2n= x*a1.num + a0.num;
- int64_t a2d= x*a1.den + a0.den;
-
- if(a2n > max || a2d > max) break;
-
- nom %= den;
-
- a0= a1;
- a1= (AVRational){a2n, a2d};
- if(nom==0) break;
- x= nom; nom=den; den=x;
- }
- nom= a1.num;
- den= a1.den;
+ AVRational a0={0,1}, a1={1,0};
+ int sign= (nom<0) ^ (den<0);
+ int64_t gcd= ff_gcd(ABS(nom), ABS(den));
+
+ nom = ABS(nom)/gcd;
+ den = ABS(den)/gcd;
+ if(nom<=max && den<=max){
+ a1= (AVRational){nom, den};
+ den=0;
}
- assert(ff_gcd(nom, den) == 1);
+ while(den){
+ int64_t x = nom / den;
+ int64_t next_den= nom - den*x;
+ int64_t a2n= x*a1.num + a0.num;
+ int64_t a2d= x*a1.den + a0.den;
+
+ if(a2n > max || a2d > max) break;
+
+ a0= a1;
+ a1= (AVRational){a2n, a2d};
+ nom= den;
+ den= next_den;
+ }
+ assert(ff_gcd(a1.num, a1.den) == 1);
- *dst_nom = sign ? -nom : nom;
- *dst_den = den;
+ *dst_nom = sign ? -a1.num : a1.num;
+ *dst_den = a1.den;
- return exact;
+ return den==0;
}
int64_t av_rescale(int64_t a, int64_t b, int64_t c){
av_log_callback = callback;
}
+#if !defined(HAVE_PTHREADS) && !defined(HAVE_W32THREADS)
+int avcodec_thread_init(AVCodecContext *s, int thread_count){
+ return -1;
+}
+#endif