Merge "Fixed a bug of setting wrong first pass mb stats pointer"

This commit is contained in:
Pengchong Jin 2014-07-17 14:24:52 -07:00 коммит произвёл Gerrit Code Review
Родитель 8cb8aef7c7 e358ab5fc9
Коммит ac638125ea
4 изменённых файлов: 22 добавлений и 20 удалений

Просмотреть файл

@ -3048,6 +3048,21 @@ static void encode_tiles(VP9_COMP *cpi) {
} }
} }
#if CONFIG_FP_MB_STATS
static int input_fpmb_stats(FIRSTPASS_MB_STATS *firstpass_mb_stats,
VP9_COMMON *cm, uint8_t **this_frame_mb_stats) {
uint8_t *mb_stats_in = firstpass_mb_stats->mb_stats_start +
cm->current_video_frame * cm->MBs * sizeof(uint8_t);
if (mb_stats_in > firstpass_mb_stats->mb_stats_end)
return EOF;
*this_frame_mb_stats = mb_stats_in;
return 1;
}
#endif
static void encode_frame_internal(VP9_COMP *cpi) { static void encode_frame_internal(VP9_COMP *cpi) {
SPEED_FEATURES *const sf = &cpi->sf; SPEED_FEATURES *const sf = &cpi->sf;
RD_OPT *const rd_opt = &cpi->rd; RD_OPT *const rd_opt = &cpi->rd;
@ -3115,6 +3130,13 @@ static void encode_frame_internal(VP9_COMP *cpi) {
struct vpx_usec_timer emr_timer; struct vpx_usec_timer emr_timer;
vpx_usec_timer_start(&emr_timer); vpx_usec_timer_start(&emr_timer);
#if CONFIG_FP_MB_STATS
if (cpi->use_fp_mb_stats) {
input_fpmb_stats(&cpi->twopass.firstpass_mb_stats, cm,
&cpi->twopass.this_frame_mb_stats);
}
#endif
encode_tiles(cpi); encode_tiles(cpi);
vpx_usec_timer_mark(&emr_timer); vpx_usec_timer_mark(&emr_timer);

Просмотреть файл

@ -937,8 +937,6 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) {
cpi->twopass.firstpass_mb_stats.mb_stats_start = cpi->twopass.firstpass_mb_stats.mb_stats_start =
oxcf->firstpass_mb_stats_in.buf; oxcf->firstpass_mb_stats_in.buf;
cpi->twopass.firstpass_mb_stats.mb_stats_in =
cpi->twopass.firstpass_mb_stats.mb_stats_start;
cpi->twopass.firstpass_mb_stats.mb_stats_end = cpi->twopass.firstpass_mb_stats.mb_stats_end =
cpi->twopass.firstpass_mb_stats.mb_stats_start + cpi->twopass.firstpass_mb_stats.mb_stats_start +
(ps - 1) * cpi->common.MBs * sizeof(uint8_t); (ps - 1) * cpi->common.MBs * sizeof(uint8_t);

Просмотреть файл

@ -148,16 +148,6 @@ static void output_stats(FIRSTPASS_STATS *stats,
} }
#if CONFIG_FP_MB_STATS #if CONFIG_FP_MB_STATS
static int input_fpmb_stats(FIRSTPASS_MB_STATS *firstpass_mb_stats,
VP9_COMMON *cm, uint8_t **this_frame_mb_stats) {
if (firstpass_mb_stats->mb_stats_in > firstpass_mb_stats->mb_stats_end)
return EOF;
*this_frame_mb_stats = firstpass_mb_stats->mb_stats_in;
firstpass_mb_stats->mb_stats_in += cm->MBs * sizeof(uint8_t);
return 1;
}
static void output_fpmb_stats(uint8_t *this_frame_mb_stats, VP9_COMMON *cm, static void output_fpmb_stats(uint8_t *this_frame_mb_stats, VP9_COMMON *cm,
struct vpx_codec_pkt_list *pktlist) { struct vpx_codec_pkt_list *pktlist) {
struct vpx_codec_cx_pkt pkt; struct vpx_codec_cx_pkt pkt;
@ -2224,13 +2214,6 @@ void vp9_rc_get_second_pass_params(VP9_COMP *cpi) {
// Update the total stats remaining structure. // Update the total stats remaining structure.
subtract_stats(&twopass->total_left_stats, &this_frame); subtract_stats(&twopass->total_left_stats, &this_frame);
#if CONFIG_FP_MB_STATS
if (cpi->use_fp_mb_stats) {
input_fpmb_stats(&twopass->firstpass_mb_stats, cm,
&twopass->this_frame_mb_stats);
}
#endif
} }
void vp9_twopass_postencode_update(VP9_COMP *cpi) { void vp9_twopass_postencode_update(VP9_COMP *cpi) {

Просмотреть файл

@ -20,7 +20,6 @@ extern "C" {
#if CONFIG_FP_MB_STATS #if CONFIG_FP_MB_STATS
typedef struct { typedef struct {
uint8_t *mb_stats_in;
uint8_t *mb_stats_start; uint8_t *mb_stats_start;
uint8_t *mb_stats_end; uint8_t *mb_stats_end;
} FIRSTPASS_MB_STATS; } FIRSTPASS_MB_STATS;