be6aeadaf4
In frame parallel decode, libvpx decoder decodes several frames on all
cpus in parallel fashion. If not being flushed, it will only return frame
when all the cpus are busy. If getting flushed, it will return all the
frames in the decoder. Compare with current serial decode mode in which
libvpx decoder is idle between decode calls, libvpx decoder is busy
between decode calls.
Current frame parallel decode will only speed up the decoding for frame
parallel encoded videos. For non frame parallel encoded videos, frame
parallel decode is slower than serial decode due to lack of loopfilter
worker thread.
There are still some known issues that need to be addressed. For example:
decode frame parallel videos with segmentation enabled is not right sometimes.
* frame-parallel:
Add error handling for frame parallel decode and unit test for that.
Fix a bug in frame parallel decode and add a unit test for that.
Add two test vectors to test frame parallel decode.
Add key frame seeking to webmdec and webm_video_source.
Implement frame parallel decode for VP9.
Increase the thread test range to cover 5, 6, 7, 8 threads.
Fix a bug in adding frame parallel unit test.
Add VP9 frame-parallel unit test.
Manually pick "Make the api behavior conform to api spec." from master branch.
Move vp9_dec_build_inter_predictors_* to decoder folder.
Add segmentation map array for current and last frame segmentation.
Include the right header for VP9 worker thread.
Move vp9_thread.* to common.
ctrl_get_reference does not need user_priv.
Seperate the frame buffers from VP9 encoder/decoder structure.
Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:"""
Conflicts:
test/codec_factory.h
test/decode_test_driver.cc
test/decode_test_driver.h
test/invalid_file_test.cc
test/test-data.sha1
test/test.mk
test/test_vectors.cc
vp8/vp8_dx_iface.c
vp9/common/vp9_alloccommon.c
vp9/common/vp9_entropymode.c
vp9/common/vp9_loopfilter_thread.c
vp9/common/vp9_loopfilter_thread.h
vp9/common/vp9_mvref_common.c
vp9/common/vp9_onyxc_int.h
vp9/common/vp9_reconinter.c
vp9/decoder/vp9_decodeframe.c
vp9/decoder/vp9_decodeframe.h
vp9/decoder/vp9_decodemv.c
vp9/decoder/vp9_decoder.c
vp9/decoder/vp9_decoder.h
vp9/encoder/vp9_encoder.c
vp9/encoder/vp9_pickmode.c
vp9/encoder/vp9_rdopt.c
vp9/vp9_cx_iface.c
vp9/vp9_dx_iface.c
This reverts commit a18da9760a
.
Change-Id: I361442ffec1586d036ea2e0ee97ce4f077585f02
74 lines
2.4 KiB
C
74 lines
2.4 KiB
C
/*
|
|
* Copyright (c) 2013 The WebM project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
#ifndef WEBMDEC_H_
|
|
#define WEBMDEC_H_
|
|
|
|
#include "./tools_common.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct VpxInputContext;
|
|
|
|
struct WebmInputContext {
|
|
void *reader;
|
|
void *segment;
|
|
uint8_t *buffer;
|
|
const void *cluster;
|
|
const void *block_entry;
|
|
const void *block;
|
|
int block_frame_index;
|
|
int video_track_index;
|
|
uint64_t timestamp_ns;
|
|
int is_key_frame;
|
|
};
|
|
|
|
// Checks if the input is a WebM file. If so, initializes WebMInputContext so
|
|
// that webm_read_frame can be called to retrieve a video frame.
|
|
// Returns 1 on success and 0 on failure or input is not WebM file.
|
|
// TODO(vigneshv): Refactor this function into two smaller functions specific
|
|
// to their task.
|
|
int file_is_webm(struct WebmInputContext *webm_ctx,
|
|
struct VpxInputContext *vpx_ctx);
|
|
|
|
// Reads a WebM Video Frame. Memory for the buffer is created, owned and managed
|
|
// by this function. For the first call, |buffer| should be NULL and
|
|
// |*bytes_in_buffer| should be 0. Once all the frames are read and used,
|
|
// webm_free() should be called, otherwise there will be a leak.
|
|
// Parameters:
|
|
// webm_ctx - WebmInputContext object
|
|
// buffer - pointer where the frame data will be filled.
|
|
// bytes_in_buffer - pointer to buffer size.
|
|
// buffer_size - unused TODO(vigneshv): remove this
|
|
// Return values:
|
|
// 0 - Success
|
|
// 1 - End of Stream
|
|
// -1 - Error
|
|
// TODO(vigneshv): Make the return values consistent across all functions in
|
|
// this file.
|
|
int webm_read_frame(struct WebmInputContext *webm_ctx,
|
|
uint8_t **buffer,
|
|
size_t *bytes_in_buffer,
|
|
size_t *buffer_size);
|
|
|
|
// Guesses the frame rate of the input file based on the container timestamps.
|
|
int webm_guess_framerate(struct WebmInputContext *webm_ctx,
|
|
struct VpxInputContext *vpx_ctx);
|
|
|
|
// Resets the WebMInputContext.
|
|
void webm_free(struct WebmInputContext *webm_ctx);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // WEBMDEC_H_
|