Commit b4dbd87c authored by Juanjo's avatar Juanjo

- Minor changes on bitrate control

Originally committed as revision 300 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent d8cf5aea
...@@ -458,7 +458,7 @@ int estimate_motion(MpegEncContext * s, ...@@ -458,7 +458,7 @@ int estimate_motion(MpegEncContext * s,
vard = vard >> 8; vard = vard >> 8;
sum = sum >> 8; sum = sum >> 8;
varc = (varc >> 8) - (sum * sum); varc = (varc >> 8) - (sum * sum);
s->mb_var[s->mb_width * mb_y + mb_x] = varc;
s->avg_mb_var += varc; s->avg_mb_var += varc;
#if 0 #if 0
......
...@@ -150,16 +150,21 @@ int MPV_common_init(MpegEncContext *s) ...@@ -150,16 +150,21 @@ int MPV_common_init(MpegEncContext *s)
if (s->encoding) { if (s->encoding) {
/* Allocate MB type table */ /* Allocate MB type table */
s->mb_type = malloc(s->mb_num * sizeof(char)); s->mb_type = av_mallocz(s->mb_num * sizeof(char));
if (s->mb_type == NULL) { if (s->mb_type == NULL) {
perror("malloc"); perror("malloc");
goto fail; goto fail;
} }
s->mb_var = av_mallocz(s->mb_num * sizeof(INT16));
if (s->mb_var == NULL) {
perror("malloc");
goto fail;
}
/* Allocate MV table */ /* Allocate MV table */
/* By now we just have one MV per MB */ /* By now we just have one MV per MB */
s->mv_table[0] = malloc(s->mb_num * sizeof(INT16)); s->mv_table[0] = av_mallocz(s->mb_num * sizeof(INT16));
s->mv_table[1] = malloc(s->mb_num * sizeof(INT16)); s->mv_table[1] = av_mallocz(s->mb_num * sizeof(INT16));
if (s->mv_table[1] == NULL || s->mv_table[0] == NULL) { if (s->mv_table[1] == NULL || s->mv_table[0] == NULL) {
perror("malloc"); perror("malloc");
goto fail; goto fail;
...@@ -225,6 +230,8 @@ int MPV_common_init(MpegEncContext *s) ...@@ -225,6 +230,8 @@ int MPV_common_init(MpegEncContext *s)
fail: fail:
if (s->mb_type) if (s->mb_type)
free(s->mb_type); free(s->mb_type);
if (s->mb_var)
free(s->mb_var);
if (s->mv_table[0]) if (s->mv_table[0])
free(s->mv_table[0]); free(s->mv_table[0]);
if (s->mv_table[1]) if (s->mv_table[1])
...@@ -259,6 +266,8 @@ void MPV_common_end(MpegEncContext *s) ...@@ -259,6 +266,8 @@ void MPV_common_end(MpegEncContext *s)
if (s->mb_type) if (s->mb_type)
free(s->mb_type); free(s->mb_type);
if (s->mb_var)
free(s->mb_var);
if (s->mv_table[0]) if (s->mv_table[0])
free(s->mv_table[0]); free(s->mv_table[0]);
if (s->mv_table[1]) if (s->mv_table[1])
...@@ -1079,7 +1088,10 @@ static void encode_picture(MpegEncContext *s, int picture_number) ...@@ -1079,7 +1088,10 @@ static void encode_picture(MpegEncContext *s, int picture_number)
sub_pixels_2(s->block[5], ptr, s->linesize >> 1, dxy); sub_pixels_2(s->block[5], ptr, s->linesize >> 1, dxy);
} }
emms_c(); emms_c();
//if (s->avg_mb_var)
// printf("\nqscale=%2d dquant=%2d var=%4d avgvar=%4d", s->qscale,
// s->qscale*(s->mb_var[s->mb_width*mb_y+mb_x]/s->avg_mb_var),
// s->mb_var[s->mb_width*mb_y+mb_x], s->avg_mb_var);
/* DCT & quantize */ /* DCT & quantize */
if (s->h263_msmpeg4) { if (s->h263_msmpeg4) {
msmpeg4_dc_scale(s); msmpeg4_dc_scale(s);
......
...@@ -117,6 +117,7 @@ typedef struct MpegEncContext { ...@@ -117,6 +117,7 @@ typedef struct MpegEncContext {
int mb_x, mb_y; int mb_x, mb_y;
int mb_incr; int mb_incr;
int mb_intra; int mb_intra;
INT16 *mb_var; /* Table for MB variances */
char *mb_type; /* Table for MB type */ char *mb_type; /* Table for MB type */
/* matrix transmitted in the bitstream */ /* matrix transmitted in the bitstream */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment