shithub: libvpx

Download patch

ref: 639955f66e608734ef9cce57a985c1deb2270f90
parent: c2b8218ebad55ee72e5b149f6542816d80a7fd72
parent: 1f05b19e69a97e451380be011923cf7ed7eab4d5
author: Vignesh Venkatasubramanian <vigneshv@google.com>
date: Tue Mar 31 12:11:56 EDT 2015

Merge "webmdec: Fix read_frame return value for calls after EOS"

--- a/webmdec.cc
+++ b/webmdec.cc
@@ -63,6 +63,7 @@
                  struct VpxInputContext *vpx_ctx) {
   mkvparser::MkvReader *const reader = new mkvparser::MkvReader(vpx_ctx->file);
   webm_ctx->reader = reader;
+  webm_ctx->reached_eos = 0;
 
   mkvparser::EBMLHeader header;
   long long pos = 0;
@@ -121,6 +122,11 @@
                     uint8_t **buffer,
                     size_t *bytes_in_buffer,
                     size_t *buffer_size) {
+  // This check is needed for frame parallel decoding, in which case this
+  // function could be called even after it has reached end of input stream.
+  if (webm_ctx->reached_eos) {
+    return 1;
+  }
   mkvparser::Segment *const segment =
       reinterpret_cast<mkvparser::Segment*>(webm_ctx->segment);
   const mkvparser::Cluster* cluster =
@@ -140,6 +146,7 @@
       cluster = segment->GetNext(cluster);
       if (cluster == NULL || cluster->EOS()) {
         *bytes_in_buffer = 0;
+        webm_ctx->reached_eos = 1;
         return 1;
       }
       status = cluster->GetFirst(block_entry);
--- a/webmdec.h
+++ b/webmdec.h
@@ -29,6 +29,7 @@
   int video_track_index;
   uint64_t timestamp_ns;
   int is_key_frame;
+  int reached_eos;
 };
 
 // Checks if the input is a WebM file. If so, initializes WebMInputContext so