- Minor changes on bitrate control
Originally committed as revision 300 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d8cf5aea49
commit
b4dbd87c04
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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 {
|
|||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user