vp9_receive_raw_frame: add missing setjmp

allocations done within this function are protected with
vpx_internal_error; adding the setjmp fixes a crash in
vp9_lookahead_push() under low memory conditions.

Change-Id: I4b79dca37cc7fadc4b7633f0db44c0e406799bc6
This commit is contained in:
James Zern 2016-02-11 18:05:31 -08:00
parent 34d12d1160
commit 6c323e359a

View File

@ -4153,13 +4153,22 @@ static void check_initial_width(VP9_COMP *cpi,
int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags, int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags,
YV12_BUFFER_CONFIG *sd, int64_t time_stamp, YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
int64_t end_time) { int64_t end_time) {
VP9_COMMON *cm = &cpi->common; VP9_COMMON *volatile const cm = &cpi->common;
struct vpx_usec_timer timer; struct vpx_usec_timer timer;
int res = 0; volatile int res = 0;
const int subsampling_x = sd->subsampling_x; const int subsampling_x = sd->subsampling_x;
const int subsampling_y = sd->subsampling_y; const int subsampling_y = sd->subsampling_y;
#if CONFIG_VP9_HIGHBITDEPTH #if CONFIG_VP9_HIGHBITDEPTH
const int use_highbitdepth = (sd->flags & YV12_FLAG_HIGHBITDEPTH) != 0; const int use_highbitdepth = (sd->flags & YV12_FLAG_HIGHBITDEPTH) != 0;
#endif
if (setjmp(cm->error.jmp)) {
cm->error.setjmp = 0;
return -1;
}
cm->error.setjmp = 1;
#if CONFIG_VP9_HIGHBITDEPTH
check_initial_width(cpi, use_highbitdepth, subsampling_x, subsampling_y); check_initial_width(cpi, use_highbitdepth, subsampling_x, subsampling_y);
#else #else
check_initial_width(cpi, subsampling_x, subsampling_y); check_initial_width(cpi, subsampling_x, subsampling_y);
@ -4192,6 +4201,7 @@ int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags,
res = -1; res = -1;
} }
cm->error.setjmp = 0;
return res; return res;
} }