Merge "BITSTREAM CLARIFICATION: Forbid referencing across color spaces."

This commit is contained in:
Alex Converse 2014-09-09 12:28:37 -07:00 committed by Gerrit Code Review
commit f353da9374
2 changed files with 24 additions and 0 deletions

View File

@ -668,6 +668,15 @@ static void setup_frame_size(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) {
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
"Failed to allocate frame buffer");
}
cm->frame_bufs[cm->new_fb_idx].buf.bit_depth = (unsigned int)cm->bit_depth;
}
static INLINE int valid_ref_frame_img_fmt(vpx_bit_depth_t ref_bit_depth,
int ref_xss, int ref_yss,
vpx_bit_depth_t this_bit_depth,
int this_xss, int this_yss) {
return ref_bit_depth == this_bit_depth && ref_xss == this_xss &&
ref_yss == this_yss;
}
static void setup_frame_size_with_refs(VP9_COMMON *cm,
@ -707,6 +716,18 @@ static void setup_frame_size_with_refs(VP9_COMMON *cm,
if (!has_valid_ref_frame)
vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
"Referenced frame has invalid size");
for (i = 0; i < REFS_PER_FRAME; ++i) {
RefBuffer *const ref_frame = &cm->frame_refs[i];
if (!valid_ref_frame_img_fmt(
ref_frame->buf->bit_depth,
ref_frame->buf->uv_crop_width < ref_frame->buf->y_crop_width,
ref_frame->buf->uv_crop_height < ref_frame->buf->y_crop_height,
cm->bit_depth,
cm->subsampling_x,
cm->subsampling_y))
vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
"Referenced frame has incompatible color space");
}
resize_context_buffers(cm, width, height);
setup_display_size(cm, rb);
@ -723,6 +744,7 @@ static void setup_frame_size_with_refs(VP9_COMMON *cm,
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
"Failed to allocate frame buffer");
}
cm->frame_bufs[cm->new_fb_idx].buf.bit_depth = (unsigned int)cm->bit_depth;
}
static void setup_tile_info(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) {

View File

@ -15,6 +15,7 @@
extern "C" {
#endif
#include "vpx/vpx_codec.h"
#include "vpx/vpx_frame_buffer.h"
#include "vpx/vpx_integer.h"
@ -50,6 +51,7 @@ typedef struct yv12_buffer_config {
int buffer_alloc_sz;
int border;
int frame_size;
unsigned int bit_depth;
int corrupted;
int flags;