comparison ratecontrol.c @ 11801:026edf66e3a9 libavcodec

Make ff_parse_expr() and ff_parse_and_eval_expr() return an int containing an error code. Allow these functions to convey the reason of the failure to the calling function, failure which is not always due to a parsing error but it may depend for example on a memory problem. Also fix several potential memleaks.
author stefano
date Tue, 01 Jun 2010 08:07:07 +0000
parents c6368258b694
children e522dbf60abd
comparison
equal deleted inserted replaced
11800:966aa6b53dcf 11801:026edf66e3a9
64 } 64 }
65 65
66 int ff_rate_control_init(MpegEncContext *s) 66 int ff_rate_control_init(MpegEncContext *s)
67 { 67 {
68 RateControlContext *rcc= &s->rc_context; 68 RateControlContext *rcc= &s->rc_context;
69 int i; 69 int i, res;
70 static const char * const const_names[]={ 70 static const char * const const_names[]={
71 "PI", 71 "PI",
72 "E", 72 "E",
73 "iTex", 73 "iTex",
74 "pTex", 74 "pTex",
104 "qp2bits", 104 "qp2bits",
105 NULL 105 NULL
106 }; 106 };
107 emms_c(); 107 emms_c();
108 108
109 rcc->rc_eq_eval = ff_parse_expr(s->avctx->rc_eq ? s->avctx->rc_eq : "tex^qComp", const_names, func1_names, func1, NULL, NULL, 0, s->avctx); 109 res = ff_parse_expr(&rcc->rc_eq_eval, s->avctx->rc_eq ? s->avctx->rc_eq : "tex^qComp", const_names, func1_names, func1, NULL, NULL, 0, s->avctx);
110 if (!rcc->rc_eq_eval) { 110 if (res < 0) {
111 av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->avctx->rc_eq); 111 av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->avctx->rc_eq);
112 return -1; 112 return res;
113 } 113 }
114 114
115 for(i=0; i<5; i++){ 115 for(i=0; i<5; i++){
116 rcc->pred[i].coeff= FF_QP2LAMBDA * 7.0; 116 rcc->pred[i].coeff= FF_QP2LAMBDA * 7.0;
117 rcc->pred[i].count= 1.0; 117 rcc->pred[i].count= 1.0;