summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/ratecontrol.c
diff options
context:
space:
mode:
authorRobin KAY <komadori@users.sourceforge.net>2002-12-22 00:35:04 +0000
committerRobin KAY <komadori@users.sourceforge.net>2002-12-22 00:35:04 +0000
commit614e17928e8f7b1bdc632fd934499cbfea165d8a (patch)
tree26887fbf9f785a69ec603c703ecda4650bbec829 /src/libffmpeg/libavcodec/ratecontrol.c
parent1b71075127f7fdfad0c16cc8535cd2c2b4e01c3b (diff)
downloadxine-lib-614e17928e8f7b1bdc632fd934499cbfea165d8a.tar.gz
xine-lib-614e17928e8f7b1bdc632fd934499cbfea165d8a.tar.bz2
Make xine-lib compile with the SunPro compiler
CVS patchset: 3623 CVS date: 2002/12/22 00:35:04
Diffstat (limited to 'src/libffmpeg/libavcodec/ratecontrol.c')
-rw-r--r--src/libffmpeg/libavcodec/ratecontrol.c65
1 files changed, 35 insertions, 30 deletions
diff --git a/src/libffmpeg/libavcodec/ratecontrol.c b/src/libffmpeg/libavcodec/ratecontrol.c
index caea09b24..63c45c82a 100644
--- a/src/libffmpeg/libavcodec/ratecontrol.c
+++ b/src/libffmpeg/libavcodec/ratecontrol.c
@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <math.h>
+#include <alloca.h>
#include "common.h"
#include "avcodec.h"
#include "dsputil.h"
@@ -229,33 +230,8 @@ static double get_qscale(MpegEncContext *s, RateControlEntry *rce, double rate_f
const double mb_num= s->mb_num;
int i;
- double const_values[]={
- M_PI,
- M_E,
- rce->i_tex_bits*rce->qscale,
- rce->p_tex_bits*rce->qscale,
- (rce->i_tex_bits + rce->p_tex_bits)*(double)rce->qscale,
- rce->mv_bits/mb_num,
- rce->pict_type == B_TYPE ? (rce->f_code + rce->b_code)*0.5 : rce->f_code,
- rce->i_count/mb_num,
- rce->mc_mb_var_sum/mb_num,
- rce->mb_var_sum/mb_num,
- rce->pict_type == I_TYPE,
- rce->pict_type == P_TYPE,
- rce->pict_type == B_TYPE,
- rcc->qscale_sum[pict_type] / (double)rcc->frame_count[pict_type],
- s->qcompress,
-/* rcc->last_qscale_for[I_TYPE],
- rcc->last_qscale_for[P_TYPE],
- rcc->last_qscale_for[B_TYPE],
- rcc->next_non_b_qscale,*/
- rcc->i_cplx_sum[I_TYPE] / (double)rcc->frame_count[I_TYPE],
- rcc->i_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE],
- rcc->p_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE],
- rcc->p_cplx_sum[B_TYPE] / (double)rcc->frame_count[B_TYPE],
- (rcc->i_cplx_sum[pict_type] + rcc->p_cplx_sum[pict_type]) / (double)rcc->frame_count[pict_type],
- 0
- };
+ double const_values[20];
+
char *const_names[]={
"PI",
"E",
@@ -294,6 +270,32 @@ static double get_qscale(MpegEncContext *s, RateControlEntry *rce, double rate_f
NULL
};
+ const_values[0] = M_PI;
+ const_values[1] = M_E;
+ const_values[2] = rce->i_tex_bits*rce->qscale;
+ const_values[3] = rce->p_tex_bits*rce->qscale;
+ const_values[4] = (rce->i_tex_bits + rce->p_tex_bits)*(double)rce->qscale;
+ const_values[5] = rce->mv_bits/mb_num;
+ const_values[6] = rce->pict_type == B_TYPE ? (rce->f_code + rce->b_code)*0.5 : rce->f_code;
+ const_values[7] = rce->i_count/mb_num;
+ const_values[8] = rce->mc_mb_var_sum/mb_num;
+ const_values[9] = rce->mb_var_sum/mb_num;
+ const_values[10] = rce->pict_type == I_TYPE;
+ const_values[11] = rce->pict_type == P_TYPE;
+ const_values[12] = rce->pict_type == B_TYPE;
+ const_values[13] = rcc->qscale_sum[pict_type] / (double)rcc->frame_count[pict_type];
+ const_values[14] = s->qcompress;
+ /*const_values[] = rcc->last_qscale_for[I_TYPE];
+ const_values[] = rcc->last_qscale_for[P_TYPE];
+ const_values[] = rcc->last_qscale_for[B_TYPE];
+ const_values[] = rcc->next_non_b_qscale;*/
+ const_values[15] = rcc->i_cplx_sum[I_TYPE] / (double)rcc->frame_count[I_TYPE];
+ const_values[16] = rcc->i_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE];
+ const_values[17] = rcc->p_cplx_sum[P_TYPE] / (double)rcc->frame_count[P_TYPE];
+ const_values[18] = rcc->p_cplx_sum[B_TYPE] / (double)rcc->frame_count[B_TYPE];
+ const_values[19] = (rcc->i_cplx_sum[pict_type] + rcc->p_cplx_sum[pict_type]) / (double)rcc->frame_count[pict_type];
+ const_values[20] = 0;
+
bits= ff_eval(s->avctx->rc_eq, const_values, const_names, func1, func1_names, NULL, NULL, rce);
rcc->pass1_rc_eq_output_sum+= bits;
@@ -471,12 +473,15 @@ static void adaptive_quantization(MpegEncContext *s, double q){
const float p_masking = s->avctx->p_masking;
float bits_sum= 0.0;
float cplx_sum= 0.0;
- float cplx_tab[s->mb_num];
- float bits_tab[s->mb_num];
+ float *cplx_tab;
+ float *bits_tab;
const int qmin= 2; //s->avctx->mb_qmin;
const int qmax= 31; //s->avctx->mb_qmax;
Picture * const pic= &s->current_picture;
-
+
+ cplx_tab = alloca(s->mb_num * sizeof(float));
+ bits_tab = alloca(s->mb_num * sizeof(float));
+
for(i=0; i<s->mb_num; i++){
float temp_cplx= sqrt(pic->mc_mb_var[i]);
float spat_cplx= sqrt(pic->mb_var[i]);