]> granicus.if.org Git - libvpx/commitdiff
Removing decoded_key_frame flag.
authorDmitry Kovalev <dkovalev@google.com>
Wed, 21 May 2014 22:51:40 +0000 (15:51 -0700)
committerDmitry Kovalev <dkovalev@google.com>
Wed, 21 May 2014 22:51:40 +0000 (15:51 -0700)
Change-Id: I79576920efb7f3f6f197d386727409759d8bda8d

vp9/decoder/vp9_decodeframe.c
vp9/decoder/vp9_decodeframe.h
vp9/decoder/vp9_decoder.c
vp9/decoder/vp9_decoder.h
vp9/vp9_dx_iface.c

index d6482761b9b380e1fa3b8d922f78fec680f17c8c..121b1f2cd8d7222f1264c3a0eee2ed49712cccf4 100644 (file)
@@ -1317,16 +1317,15 @@ static struct vp9_read_bit_buffer* init_read_bit_buffer(
   return rb;
 }
 
-int vp9_decode_frame(VP9Decoder *pbi,
-                     const uint8_t *data, const uint8_t *data_end,
-                     const uint8_t **p_data_end) {
+void vp9_decode_frame(VP9Decoder *pbi,
+                      const uint8_t *data, const uint8_t *data_end,
+                      const uint8_t **p_data_end) {
   VP9_COMMON *const cm = &pbi->common;
   MACROBLOCKD *const xd = &pbi->mb;
   struct vp9_read_bit_buffer rb = { 0 };
   uint8_t clear_data[MAX_VP9_HEADER_SIZE];
   const size_t first_partition_size = read_uncompressed_header(pbi,
       init_read_bit_buffer(pbi, &rb, data, data_end, clear_data));
-  const int keyframe = cm->frame_type == KEY_FRAME;
   const int tile_rows = 1 << cm->log2_tile_rows;
   const int tile_cols = 1 << cm->log2_tile_cols;
   YV12_BUFFER_CONFIG *const new_fb = get_frame_new_buffer(cm);
@@ -1335,12 +1334,9 @@ int vp9_decode_frame(VP9Decoder *pbi,
   if (!first_partition_size) {
     // showing a frame directly
     *p_data_end = data + 1;
-    return 0;
+    return;
   }
 
-  if (!pbi->decoded_key_frame && !keyframe)
-    return -1;
-
   data += vp9_rb_bytes_read(&rb);
   if (!read_is_valid(data, first_partition_size, data_end))
     vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
@@ -1377,14 +1373,6 @@ int vp9_decode_frame(VP9Decoder *pbi,
 
   new_fb->corrupted |= xd->corrupted;
 
-  if (!pbi->decoded_key_frame) {
-    if (keyframe && !new_fb->corrupted)
-      pbi->decoded_key_frame = 1;
-    else
-      vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME,
-                         "A stream must start with a complete key frame");
-  }
-
   if (!new_fb->corrupted) {
     if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) {
       vp9_adapt_coef_probs(cm);
@@ -1400,6 +1388,4 @@ int vp9_decode_frame(VP9Decoder *pbi,
 
   if (cm->refresh_frame_context)
     cm->frame_contexts[cm->frame_context_idx] = cm->fc;
-
-  return 0;
 }
index 8a19dafc5faa160c7271dbf2d8c455f95e26544e..fb15645a9c24afe3b5316ecbc5067b023b15d896 100644 (file)
@@ -21,9 +21,9 @@ struct VP9Decoder;
 
 void vp9_init_dequantizer(struct VP9Common *cm);
 
-int vp9_decode_frame(struct VP9Decoder *pbi,
-                     const uint8_t *data, const uint8_t *data_end,
-                     const uint8_t **p_data_end);
+void vp9_decode_frame(struct VP9Decoder *pbi,
+                      const uint8_t *data, const uint8_t *data_end,
+                      const uint8_t **p_data_end);
 
 #ifdef __cplusplus
 }  // extern "C"
index 8902f179df81d7f2164a0662b3b6dcfa509ec9bf..13d79ff44b4e5a7e1f41c818a8725f73885cf261 100644 (file)
@@ -67,7 +67,6 @@ VP9Decoder *vp9_decoder_create() {
 
   cm->current_video_frame = 0;
   pbi->ready_for_new_data = 1;
-  pbi->decoded_key_frame = 0;
 
   // vp9_init_dequantizer() is first called here. Add check in
   // frame_init_dequantizer() to avoid unnecessary calling of
@@ -267,15 +266,7 @@ int vp9_receive_compressed_data(VP9Decoder *pbi,
 
   cm->error.setjmp = 1;
 
-  retcode = vp9_decode_frame(pbi, source, source + size, psource);
-
-  if (retcode < 0) {
-    cm->error.error_code = VPX_CODEC_ERROR;
-    cm->error.setjmp = 0;
-    if (cm->frame_bufs[cm->new_fb_idx].ref_count > 0)
-      cm->frame_bufs[cm->new_fb_idx].ref_count--;
-    return retcode;
-  }
+  vp9_decode_frame(pbi, source, source + size, psource);
 
   swap_frame_buffers(pbi);
 
index 1a5576e5a016ca43ef83b40d1bdd6b32133c1aea..a6edf0cbd7a255483f95bb4f1e7640d1255cb1b4 100644 (file)
@@ -43,8 +43,6 @@ typedef struct VP9Decoder {
 
   int refresh_frame_flags;
 
-  int decoded_key_frame;
-
   VP9Worker lf_worker;
   VP9Worker *tile_workers;
   int num_tile_workers;
index 328b98fee538e393a69c4f1e7f1bddc48fd7f6d7..9cf1735cbc4b8070954937ee8e339836c3609514 100644 (file)
@@ -260,6 +260,9 @@ static vpx_codec_err_t decode_one(vpx_codec_alg_priv_t *ctx,
                                  ctx->decrypt_state);
     if (res != VPX_CODEC_OK)
       return res;
+
+    if (!ctx->si.is_kf)
+      return VPX_CODEC_ERROR;
   }
 
   // Initialize the decoder instance on the first frame