webmdec: Fix read_frame return value for calls after EOS
webm_read_frame assumes that it won't be called once end of file is reached. But for frame parallel mode that turns out to be not true. this patch fixes that behavior by checking for EOS and returning the appropriate value for subsequent calls. Change-Id: Ie2fddbe00493a0f96c4172c67be1eb719f0fe8ed
This commit is contained in:
parent
bf7def9a43
commit
1f05b19e69
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user