| Index: source/libvpx/webmdec.cc
|
| diff --git a/source/libvpx/webmdec.cc b/source/libvpx/webmdec.cc
|
| index d591f3e3d7413f9b12b9f609eb31c79e958a95f8..e152f5ee03a7275cabd0d7453cf5b4a1fa26ca31 100644
|
| --- a/source/libvpx/webmdec.cc
|
| +++ b/source/libvpx/webmdec.cc
|
| @@ -63,6 +63,7 @@ int file_is_webm(struct WebmInputContext *webm_ctx,
|
| 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 @@ int webm_read_frame(struct WebmInputContext *webm_ctx,
|
| 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 @@ int webm_read_frame(struct WebmInputContext *webm_ctx,
|
| 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);
|
| @@ -212,6 +219,7 @@ int webm_guess_framerate(struct WebmInputContext *webm_ctx,
|
| webm_ctx->block_entry = NULL;
|
| webm_ctx->block_frame_index = 0;
|
| webm_ctx->timestamp_ns = 0;
|
| + webm_ctx->reached_eos = 0;
|
|
|
| return 0;
|
| }
|
|
|