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
--
⑨