#include <cstring>
#include <cstdio>
-#include "third_party/libwebm/mkvparser.hpp"
-#include "third_party/libwebm/mkvreader.hpp"
+#include "third_party/libwebm/mkvparser/mkvparser.h"
+#include "third_party/libwebm/mkvparser/mkvreader.h"
namespace {
}
}
- if (video_track == NULL) {
+ if (video_track == NULL || video_track->GetCodecId() == NULL) {
rewind_and_reset(webm_ctx, vpx_ctx);
return 0;
}
vpx_ctx->fourcc = VP8_FOURCC;
} else if (!strncmp(video_track->GetCodecId(), "V_VP9", 5)) {
vpx_ctx->fourcc = VP9_FOURCC;
+ } else if (!strncmp(video_track->GetCodecId(), "V_VP10", 6)) {
+ vpx_ctx->fourcc = VP10_FOURCC;
} else {
rewind_and_reset(webm_ctx, vpx_ctx);
return 0;
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.
} else if (block_entry_eos || block_entry->EOS()) {
cluster = segment->GetNext(cluster);
if (cluster == NULL || cluster->EOS()) {
- *bytes_in_buffer = 0;
+ *buffer_size = 0;
webm_ctx->reached_eos = 1;
return 1;
}
}
get_new_block = true;
}
- if (status) {
+ if (status || block_entry == NULL) {
return -1;
}
if (get_new_block) {
if (*buffer == NULL) {
return -1;
}
- *buffer_size = frame.len;
webm_ctx->buffer = *buffer;
}
- *bytes_in_buffer = frame.len;
+ *buffer_size = frame.len;
webm_ctx->timestamp_ns = block->GetTime(cluster);
webm_ctx->is_key_frame = block->IsKey();
struct VpxInputContext *vpx_ctx) {
uint32_t i = 0;
uint8_t *buffer = NULL;
- size_t bytes_in_buffer = 0;
size_t buffer_size = 0;
while (webm_ctx->timestamp_ns < 1000000000 && i < 50) {
- if (webm_read_frame(webm_ctx, &buffer, &bytes_in_buffer, &buffer_size)) {
+ if (webm_read_frame(webm_ctx, &buffer, &buffer_size)) {
break;
}
++i;