Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: source/libvpx/vp9/decoder/vp9_onyxd_if.c

Issue 23600008: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_idct_blk.c ('k') | source/libvpx/vp9/decoder/vp9_onyxd_int.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp9/decoder/vp9_onyxd_if.c
===================================================================
--- source/libvpx/vp9/decoder/vp9_onyxd_if.c (revision 219822)
+++ source/libvpx/vp9/decoder/vp9_onyxd_if.c (working copy)
@@ -8,9 +8,9 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-
+#include <assert.h>
+#include <limits.h>
#include <stdio.h>
-#include <assert.h>
#include "vp9/common/vp9_onyxc_int.h"
#if CONFIG_POSTPROC
@@ -110,37 +110,48 @@
VP9D_PTR vp9_create_decompressor(VP9D_CONFIG *oxcf) {
VP9D_COMP *const pbi = vpx_memalign(32, sizeof(VP9D_COMP));
+ VP9_COMMON *const cm = pbi ? &pbi->common : NULL;
- if (!pbi)
+ if (!cm)
return NULL;
- vpx_memset(pbi, 0, sizeof(VP9D_COMP));
+ vp9_zero(*pbi);
- if (setjmp(pbi->common.error.jmp)) {
- pbi->common.error.setjmp = 0;
+ if (setjmp(cm->error.jmp)) {
+ cm->error.setjmp = 0;
vp9_remove_decompressor(pbi);
return NULL;
}
- pbi->common.error.setjmp = 1;
+ cm->error.setjmp = 1;
vp9_initialize_dec();
- vp9_create_common(&pbi->common);
+ vp9_create_common(cm);
pbi->oxcf = *oxcf;
- pbi->common.current_video_frame = 0;
pbi->ready_for_new_data = 1;
+ cm->current_video_frame = 0;
// vp9_init_dequantizer() is first called here. Add check in
// frame_init_dequantizer() to avoid unnecessary calling of
// vp9_init_dequantizer() for every frame.
- vp9_init_dequantizer(&pbi->common);
+ vp9_init_dequantizer(cm);
- vp9_loop_filter_init(&pbi->common, &pbi->mb.lf);
+ vp9_loop_filter_init(cm);
- pbi->common.error.setjmp = 0;
+ cm->error.setjmp = 0;
pbi->decoded_key_frame = 0;
+ if (pbi->oxcf.max_threads > 1) {
+ vp9_worker_init(&pbi->lf_worker);
+ pbi->lf_worker.data1 = vpx_malloc(sizeof(LFWorkerData));
+ pbi->lf_worker.hook = (VP9WorkerHook)vp9_loop_filter_worker;
+ if (pbi->lf_worker.data1 == NULL || !vp9_worker_reset(&pbi->lf_worker)) {
+ vp9_remove_decompressor(pbi);
+ return NULL;
+ }
+ }
+
return pbi;
}
@@ -150,10 +161,9 @@
if (!pbi)
return;
- if (pbi->common.last_frame_seg_map)
- vpx_free(pbi->common.last_frame_seg_map);
-
vp9_remove_common(&pbi->common);
+ vp9_worker_end(&pbi->lf_worker);
+ vpx_free(pbi->lf_worker.data1);
vpx_free(pbi);
}
@@ -175,21 +185,21 @@
* later commit that adds VP9-specific controls for this functionality.
*/
if (ref_frame_flag == VP9_LAST_FLAG) {
- ref_fb_idx = pbi->common.ref_frame_map[0];
+ ref_fb_idx = cm->ref_frame_map[0];
} else {
- vpx_internal_error(&pbi->common.error, VPX_CODEC_ERROR,
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
"Invalid reference frame");
- return pbi->common.error.error_code;
+ return cm->error.error_code;
}
if (!equal_dimensions(&cm->yv12_fb[ref_fb_idx], sd)) {
- vpx_internal_error(&pbi->common.error, VPX_CODEC_ERROR,
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
"Incorrect buffer dimensions");
} else {
vp8_yv12_copy_frame(&cm->yv12_fb[ref_fb_idx], sd);
}
- return pbi->common.error.error_code;
+ return cm->error.error_code;
}
@@ -249,22 +259,21 @@
/* If any buffer updating is signaled it should be done here. */
static void swap_frame_buffers(VP9D_COMP *pbi) {
int ref_index = 0, mask;
+ VP9_COMMON *const cm = &pbi->common;
for (mask = pbi->refresh_frame_flags; mask; mask >>= 1) {
- if (mask & 1) {
- ref_cnt_fb(pbi->common.fb_idx_ref_cnt,
- &pbi->common.ref_frame_map[ref_index],
- pbi->common.new_fb_idx);
- }
+ if (mask & 1)
+ ref_cnt_fb(cm->fb_idx_ref_cnt, &cm->ref_frame_map[ref_index],
+ cm->new_fb_idx);
++ref_index;
}
- pbi->common.frame_to_show = &pbi->common.yv12_fb[pbi->common.new_fb_idx];
- pbi->common.fb_idx_ref_cnt[pbi->common.new_fb_idx]--;
+ cm->frame_to_show = &cm->yv12_fb[cm->new_fb_idx];
+ cm->fb_idx_ref_cnt[cm->new_fb_idx]--;
- /* Invalidate these references until the next frame starts. */
+ // Invalidate these references until the next frame starts.
for (ref_index = 0; ref_index < 3; ref_index++)
- pbi->common.active_ref_idx[ref_index] = INT_MAX;
+ cm->active_ref_idx[ref_index] = INT_MAX;
}
int vp9_receive_compressed_data(VP9D_PTR ptr,
@@ -281,7 +290,7 @@
if (ptr == 0)
return -1;
- pbi->common.error.error_code = VPX_CODEC_OK;
+ cm->error.error_code = VPX_CODEC_OK;
pbi->source = source;
pbi->source_sz = size;
@@ -302,8 +311,8 @@
cm->new_fb_idx = get_free_fb(cm);
- if (setjmp(pbi->common.error.jmp)) {
- pbi->common.error.setjmp = 0;
+ if (setjmp(cm->error.jmp)) {
+ cm->error.setjmp = 0;
/* We do not know if the missing frame(s) was supposed to update
* any of the reference buffers, but we act conservative and
@@ -322,13 +331,13 @@
return -1;
}
- pbi->common.error.setjmp = 1;
+ cm->error.setjmp = 1;
retcode = vp9_decode_frame(pbi, psource);
if (retcode < 0) {
- pbi->common.error.error_code = VPX_CODEC_ERROR;
- pbi->common.error.setjmp = 0;
+ cm->error.error_code = VPX_CODEC_ERROR;
+ cm->error.setjmp = 0;
if (cm->fb_idx_ref_cnt[cm->new_fb_idx] > 0)
cm->fb_idx_ref_cnt[cm->new_fb_idx]--;
return retcode;
@@ -348,7 +357,7 @@
if (!pbi->do_loopfilter_inline) {
/* Apply the loop filter if appropriate. */
- vp9_loop_filter_frame(cm, &pbi->mb, pbi->mb.lf.filter_level, 0);
+ vp9_loop_filter_frame(cm, &pbi->mb, pbi->common.lf.filter_level, 0, 0);
}
#if WRITE_RECON_BUFFER == 2
@@ -391,7 +400,7 @@
pbi->last_time_stamp = time_stamp;
pbi->source_sz = 0;
- pbi->common.error.setjmp = 0;
+ cm->error.setjmp = 0;
return retcode;
}
@@ -413,7 +422,7 @@
*time_end_stamp = 0;
#if CONFIG_POSTPROC
- ret = vp9_post_proc_frame(&pbi->common, &pbi->mb.lf, sd, flags);
+ ret = vp9_post_proc_frame(&pbi->common, sd, flags);
#else
if (pbi->common.frame_to_show) {
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_idct_blk.c ('k') | source/libvpx/vp9/decoder/vp9_onyxd_int.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698