vp8_prob i8x8_mode_prob [VP8_UV_MODES-1];
#endif
-
+#if CONFIG_MULCONTEXT
+ FRAME_CONTEXT lfc_a; /* last alt ref entropy */
+#endif
FRAME_CONTEXT lfc; /* last frame entropy */
FRAME_CONTEXT fc; /* this frame entropy */
#endif
-}
+}
\ No newline at end of file
*/
pc->ref_frame_sign_bias[GOLDEN_FRAME] = 0;
pc->ref_frame_sign_bias[ALTREF_FRAME] = 0;
+
+#if CONFIG_MULCONTEXT
+ vpx_memcpy(&pc->lfc, &pc->fc, sizeof(pc->fc));
+ vpx_memcpy(&pc->lfc_a, &pc->fc, sizeof(pc->fc));
+#endif
+
}
else
{
+
if (!pc->use_bilinear_mc_filter)
pc->mcomp_filter_type = SIXTAP;
else
pc->refresh_alt_ref_frame = 0;
#endif
+#if CONFIG_MULCONTEXT
+ if(pc->refresh_alt_ref_frame)
+ vpx_memcpy(&pc->fc, &pc->lfc_a, sizeof(pc->fc));
+ else
+ vpx_memcpy(&pc->fc, &pc->lfc, sizeof(pc->fc));
+#endif
+
/* Buffer to buffer copy flags. */
pc->copy_buffer_to_gf = 0;
{
pc->last_kf_gf_q = pc->base_qindex;
}
-
+#if CONFIG_MULCONTEXT
+ if(pc->refresh_entropy_probs)
+ {
+ if(pc->refresh_alt_ref_frame)
+ vpx_memcpy(&pc->lfc_a, &pc->fc, sizeof(pc->fc));
+ else
+ vpx_memcpy(&pc->lfc, &pc->fc, sizeof(pc->fc));
+ }
+#else
if (pc->refresh_entropy_probs == 0)
{
vpx_memcpy(&pc->fc, &pc->lfc, sizeof(pc->fc));
pbi->independent_partitions = prev_independent_partitions;
}
+#endif
#ifdef PACKET_TESTING
{
fclose(yuv_file);
}
#endif
+//#define WRITE_RECON_BUFFER 1
#if WRITE_RECON_BUFFER
void write_dx_frame_to_file(YV12_BUFFER_CONFIG *frame, int this_frame)
{
yframe = fopen(filename, "wb");
for (i = 0; i < frame->y_height; i++)
- fwrite(frame->y_buffer + i * frame->y_stride, frame->y_width, 1, yframe);
+ fwrite(frame->y_buffer + i * frame->y_stride,
+ frame->y_width, 1, yframe);
fclose(yframe);
sprintf(filename, "dx\\u%04d.raw", this_frame);
yframe = fopen(filename, "wb");
for (i = 0; i < frame->uv_height; i++)
- fwrite(frame->u_buffer + i * frame->uv_stride, frame->uv_width, 1, yframe);
+ fwrite(frame->u_buffer + i * frame->uv_stride,
+ frame->uv_width, 1, yframe);
fclose(yframe);
sprintf(filename, "dx\\v%04d.raw", this_frame);
yframe = fopen(filename, "wb");
for (i = 0; i < frame->uv_height; i++)
- fwrite(frame->v_buffer + i * frame->uv_stride, frame->uv_width, 1, yframe);
+ fwrite(frame->v_buffer + i * frame->uv_stride,
+ frame->uv_width, 1, yframe);
fclose(yframe);
}
#if WRITE_RECON_BUFFER
if(cm->show_frame)
+<<<<<<< HEAD
write_dx_frame_to_file(cm->frame_to_show, cm->current_video_frame);
else
write_dx_frame_to_file(cm->frame_to_show, cm->current_video_frame+1000);
+=======
+ write_dx_frame_to_file(cm->frame_to_show,
+ cm->current_video_frame);
+ else
+ write_dx_frame_to_file(cm->frame_to_show,
+ cm->current_video_frame+1000);
+>>>>>>> added separate entropy context for alt_ref
#endif
if(cm->filter_level)
//************************************************
// save a copy for later refresh
+#if !CONFIG_MULCONTEXT
{
vpx_memcpy(&cpi->common.lfc, &cpi->common.fc, sizeof(cpi->common.fc));
}
-
+#endif
update_coef_probs(cpi);
#ifdef ENTROPY_STATS
vp8_first_pass(cpi);
}
#endif
-
+//#define WRITE_RECON_BUFFER 1
#if WRITE_RECON_BUFFER
void write_cx_frame_to_file(YV12_BUFFER_CONFIG *frame, int this_frame)
{
yframe = fopen(filename, "wb");
for (i = 0; i < frame->y_height; i++)
- fwrite(frame->y_buffer + i * frame->y_stride, frame->y_width, 1, yframe);
+ fwrite(frame->y_buffer + i * frame->y_stride,
+ frame->y_width, 1, yframe);
fclose(yframe);
sprintf(filename, "cx\\u%04d.raw", this_frame);
yframe = fopen(filename, "wb");
for (i = 0; i < frame->uv_height; i++)
- fwrite(frame->u_buffer + i * frame->uv_stride, frame->uv_width, 1, yframe);
+ fwrite(frame->u_buffer + i * frame->uv_stride,
+ frame->uv_width, 1, yframe);
fclose(yframe);
sprintf(filename, "cx\\v%04d.raw", this_frame);
yframe = fopen(filename, "wb");
for (i = 0; i < frame->uv_height; i++)
- fwrite(frame->v_buffer + i * frame->uv_stride, frame->uv_width, 1, yframe);
+ fwrite(frame->v_buffer + i * frame->uv_stride,
+ frame->uv_width, 1, yframe);
fclose(yframe);
}
resize_key_frame(cpi);
vp8_setup_key_frame(cpi);
}
-
+#if CONFIG_MULCONTEXT
+ else
+ {
+ /* setup entropy for nonkey frame */
+ vp8_setup_inter_frame(cpi);
+ }
+#endif
// transform / motion compensation build reconstruction frame
vp8_encode_frame(cpi);
#if WRITE_RECON_BUFFER
if(cm->show_frame)
+<<<<<<< HEAD
write_cx_frame_to_file(cm->frame_to_show, cm->current_video_frame);
else
write_cx_frame_to_file(cm->frame_to_show, cm->current_video_frame+1000);
+=======
+ write_cx_frame_to_file(cm->frame_to_show,
+ cm->current_video_frame);
+ else
+ write_cx_frame_to_file(cm->frame_to_show,
+ cm->current_video_frame+1000);
+>>>>>>> added separate entropy context for alt_ref
#endif
#if CONFIG_MULTITHREAD
}
+
+
+#if CONFIG_MULCONTEXT
+ if(cm->refresh_entropy_probs)
+ {
+ if(cm->refresh_alt_ref_frame)
+ vpx_memcpy(&cm->lfc_a, &cm->fc, sizeof(cm->fc));
+ else
+ vpx_memcpy(&cm->lfc, &cm->fc, sizeof(cm->fc));
+ }
+#else
if (cm->refresh_entropy_probs == 0)
{
vpx_memcpy(&cm->fc, &cm->lfc, sizeof(cm->fc));
}
+#endif
+
// if its a dropped frame honor the requests on subsequent frames
if (*size > 0)
cpi->common.refresh_golden_frame = TRUE;
cpi->common.refresh_alt_ref_frame = TRUE;
+
+#if CONFIG_MULCONTEXT
+ vpx_memcpy(&cpi->common.lfc, &cpi->common.fc, sizeof(cpi->common.fc));
+ vpx_memcpy(&cpi->common.lfc_a, &cpi->common.fc, sizeof(cpi->common.fc));
+#endif
+
}
+#if CONFIG_MULCONTEXT
+void vp8_setup_inter_frame(VP8_COMP *cpi)
+{
+ if(cpi->common.refresh_alt_ref_frame)
+ vpx_memcpy(&cpi->common.fc, &cpi->common.lfc_a, sizeof(cpi->common.fc));
+ else
+ vpx_memcpy(&cpi->common.fc, &cpi->common.lfc, sizeof(cpi->common.fc));
+}
+#endif
static int estimate_bits_at_q(int frame_kind, int Q, int MBs,