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

Side by Side Diff: source/libvpx/vp8/vp8_dx_iface.c

Issue 478033002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp8/vp8_cx_iface.c ('k') | source/libvpx/vp9/common/vp9_alloccommon.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 #if CONFIG_POSTPROC_VISUALIZER 53 #if CONFIG_POSTPROC_VISUALIZER
54 unsigned int dbg_postproc_flag; 54 unsigned int dbg_postproc_flag;
55 int dbg_color_ref_frame_flag; 55 int dbg_color_ref_frame_flag;
56 int dbg_color_mb_modes_flag; 56 int dbg_color_mb_modes_flag;
57 int dbg_color_b_modes_flag; 57 int dbg_color_b_modes_flag;
58 int dbg_display_mv_flag; 58 int dbg_display_mv_flag;
59 #endif 59 #endif
60 vpx_decrypt_cb decrypt_cb; 60 vpx_decrypt_cb decrypt_cb;
61 void *decrypt_state; 61 void *decrypt_state;
62 vpx_image_t img; 62 vpx_image_t img;
63 int flushed;
63 int img_setup; 64 int img_setup;
64 struct frame_buffers yv12_frame_buffers; 65 struct frame_buffers yv12_frame_buffers;
65 void *user_priv; 66 void *user_priv;
66 FRAGMENT_DATA fragments; 67 FRAGMENT_DATA fragments;
67 }; 68 };
68 69
69 static unsigned long vp8_priv_sz(const vpx_codec_dec_cfg_t *si, vpx_codec_flags_ t flags) 70 static unsigned long vp8_priv_sz(const vpx_codec_dec_cfg_t *si, vpx_codec_flags_ t flags)
70 { 71 {
71 /* Although this declaration is constant, we can't use it in the requested 72 /* Although this declaration is constant, we can't use it in the requested
72 * segments list because we want to define the requested segments list 73 * segments list because we want to define the requested segments list
73 * before defining the private type (so that the number of memory maps is 74 * before defining the private type (so that the number of memory maps is
74 * known) 75 * known)
75 */ 76 */
76 (void)si; 77 (void)si;
77 return sizeof(vpx_codec_alg_priv_t); 78 return sizeof(vpx_codec_alg_priv_t);
78 } 79 }
79 80
80 static void vp8_init_ctx(vpx_codec_ctx_t *ctx) 81 static void vp8_init_ctx(vpx_codec_ctx_t *ctx)
81 { 82 {
82 ctx->priv = 83 ctx->priv =
83 (vpx_codec_priv_t *)vpx_memalign(8, sizeof(vpx_codec_alg_priv_t)); 84 (vpx_codec_priv_t *)vpx_memalign(8, sizeof(vpx_codec_alg_priv_t));
84 vpx_memset(ctx->priv, 0, sizeof(vpx_codec_alg_priv_t)); 85 vpx_memset(ctx->priv, 0, sizeof(vpx_codec_alg_priv_t));
85 ctx->priv->sz = sizeof(*ctx->priv); 86 ctx->priv->sz = sizeof(*ctx->priv);
86 ctx->priv->iface = ctx->iface; 87 ctx->priv->iface = ctx->iface;
87 ctx->priv->alg_priv = (vpx_codec_alg_priv_t *)ctx->priv; 88 ctx->priv->alg_priv = (vpx_codec_alg_priv_t *)ctx->priv;
88 ctx->priv->alg_priv->si.sz = sizeof(ctx->priv->alg_priv->si); 89 ctx->priv->alg_priv->si.sz = sizeof(ctx->priv->alg_priv->si);
89 ctx->priv->alg_priv->decrypt_cb = NULL; 90 ctx->priv->alg_priv->decrypt_cb = NULL;
90 ctx->priv->alg_priv->decrypt_state = NULL; 91 ctx->priv->alg_priv->decrypt_state = NULL;
92 ctx->priv->alg_priv->flushed = 0;
91 ctx->priv->init_flags = ctx->init_flags; 93 ctx->priv->init_flags = ctx->init_flags;
92 94
93 if (ctx->config.dec) 95 if (ctx->config.dec)
94 { 96 {
95 /* Update the reference to the config structure to an internal copy. */ 97 /* Update the reference to the config structure to an internal copy. */
96 ctx->priv->alg_priv->cfg = *ctx->config.dec; 98 ctx->priv->alg_priv->cfg = *ctx->config.dec;
97 ctx->config.dec = &ctx->priv->alg_priv->cfg; 99 ctx->config.dec = &ctx->priv->alg_priv->cfg;
98 } 100 }
99 } 101 }
100 102
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx, 323 static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
322 const uint8_t *data, 324 const uint8_t *data,
323 unsigned int data_sz, 325 unsigned int data_sz,
324 void *user_priv, 326 void *user_priv,
325 long deadline) 327 long deadline)
326 { 328 {
327 vpx_codec_err_t res = VPX_CODEC_OK; 329 vpx_codec_err_t res = VPX_CODEC_OK;
328 unsigned int resolution_change = 0; 330 unsigned int resolution_change = 0;
329 unsigned int w, h; 331 unsigned int w, h;
330 332
333 if (data == NULL && data_sz == 0) {
334 ctx->flushed = 1;
335 return VPX_CODEC_OK;
336 }
337
338 /* Reset flushed when receiving a valid frame */
339 ctx->flushed = 0;
331 340
332 /* Update the input fragment data */ 341 /* Update the input fragment data */
333 if(update_fragments(ctx, data, data_sz, &res) <= 0) 342 if(update_fragments(ctx, data, data_sz, &res) <= 0)
334 return res; 343 return res;
335 344
336 /* Determine the stream parameters. Note that we rely on peek_si to 345 /* Determine the stream parameters. Note that we rely on peek_si to
337 * validate that we have a buffer that does not wrap around the top 346 * validate that we have a buffer that does not wrap around the top
338 * of the heap. 347 * of the heap.
339 */ 348 */
340 w = ctx->si.w; 349 w = ctx->si.w;
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 *iter = img; 559 *iter = img;
551 } 560 }
552 } 561 }
553 562
554 return img; 563 return img;
555 } 564 }
556 565
557 static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img, 566 static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img,
558 YV12_BUFFER_CONFIG *yv12) 567 YV12_BUFFER_CONFIG *yv12)
559 { 568 {
569 const int y_w = img->d_w;
570 const int y_h = img->d_h;
571 const int uv_w = (img->d_w + 1) / 2;
572 const int uv_h = (img->d_h + 1) / 2;
560 vpx_codec_err_t res = VPX_CODEC_OK; 573 vpx_codec_err_t res = VPX_CODEC_OK;
561 yv12->y_buffer = img->planes[VPX_PLANE_Y]; 574 yv12->y_buffer = img->planes[VPX_PLANE_Y];
562 yv12->u_buffer = img->planes[VPX_PLANE_U]; 575 yv12->u_buffer = img->planes[VPX_PLANE_U];
563 yv12->v_buffer = img->planes[VPX_PLANE_V]; 576 yv12->v_buffer = img->planes[VPX_PLANE_V];
564 577
565 yv12->y_crop_width = img->d_w; 578 yv12->y_crop_width = y_w;
566 yv12->y_crop_height = img->d_h; 579 yv12->y_crop_height = y_h;
567 yv12->y_width = img->d_w; 580 yv12->y_width = y_w;
568 yv12->y_height = img->d_h; 581 yv12->y_height = y_h;
569 yv12->uv_width = yv12->y_width / 2; 582 yv12->uv_crop_width = uv_w;
570 yv12->uv_height = yv12->y_height / 2; 583 yv12->uv_crop_height = uv_h;
584 yv12->uv_width = uv_w;
585 yv12->uv_height = uv_h;
571 586
572 yv12->y_stride = img->stride[VPX_PLANE_Y]; 587 yv12->y_stride = img->stride[VPX_PLANE_Y];
573 yv12->uv_stride = img->stride[VPX_PLANE_U]; 588 yv12->uv_stride = img->stride[VPX_PLANE_U];
574 589
575 yv12->border = (img->stride[VPX_PLANE_Y] - img->d_w) / 2; 590 yv12->border = (img->stride[VPX_PLANE_Y] - img->d_w) / 2;
576 return res; 591 return res;
577 } 592 }
578 593
579 594
580 static vpx_codec_err_t vp8_set_reference(vpx_codec_alg_priv_t *ctx, 595 static vpx_codec_err_t vp8_set_reference(vpx_codec_alg_priv_t *ctx,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 745
731 static vpx_codec_err_t vp8_get_frame_corrupted(vpx_codec_alg_priv_t *ctx, 746 static vpx_codec_err_t vp8_get_frame_corrupted(vpx_codec_alg_priv_t *ctx,
732 va_list args) 747 va_list args)
733 { 748 {
734 749
735 int *corrupted = va_arg(args, int *); 750 int *corrupted = va_arg(args, int *);
736 VP8D_COMP *pbi = (VP8D_COMP *)ctx->yv12_frame_buffers.pbi[0]; 751 VP8D_COMP *pbi = (VP8D_COMP *)ctx->yv12_frame_buffers.pbi[0];
737 752
738 if (corrupted && pbi) 753 if (corrupted && pbi)
739 { 754 {
740 *corrupted = pbi->common.frame_to_show->corrupted; 755 const YV12_BUFFER_CONFIG *const frame = pbi->common.frame_to_show;
741 756 if (frame == NULL) return VPX_CODEC_ERROR;
757 *corrupted = frame->corrupted;
742 return VPX_CODEC_OK; 758 return VPX_CODEC_OK;
743 } 759 }
744 else 760 else
745 return VPX_CODEC_INVALID_PARAM; 761 return VPX_CODEC_INVALID_PARAM;
746 762
747 } 763 }
748 764
749 static vpx_codec_err_t vp8_set_decryptor(vpx_codec_alg_priv_t *ctx, 765 static vpx_codec_err_t vp8_set_decryptor(vpx_codec_alg_priv_t *ctx,
750 va_list args) 766 va_list args)
751 { 767 {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 CODEC_INTERFACE(vpx_codec_vp8_dx) = 803 CODEC_INTERFACE(vpx_codec_vp8_dx) =
788 { 804 {
789 "WebM Project VP8 Decoder" VERSION_STRING, 805 "WebM Project VP8 Decoder" VERSION_STRING,
790 VPX_CODEC_INTERNAL_ABI_VERSION, 806 VPX_CODEC_INTERNAL_ABI_VERSION,
791 VPX_CODEC_CAP_DECODER | VP8_CAP_POSTPROC | VP8_CAP_ERROR_CONCEALMENT | 807 VPX_CODEC_CAP_DECODER | VP8_CAP_POSTPROC | VP8_CAP_ERROR_CONCEALMENT |
792 VPX_CODEC_CAP_INPUT_FRAGMENTS, 808 VPX_CODEC_CAP_INPUT_FRAGMENTS,
793 /* vpx_codec_caps_t caps; */ 809 /* vpx_codec_caps_t caps; */
794 vp8_init, /* vpx_codec_init_fn_t init; */ 810 vp8_init, /* vpx_codec_init_fn_t init; */
795 vp8_destroy, /* vpx_codec_destroy_fn_t destroy; */ 811 vp8_destroy, /* vpx_codec_destroy_fn_t destroy; */
796 vp8_ctf_maps, /* vpx_codec_ctrl_fn_map_t *ctrl_maps; */ 812 vp8_ctf_maps, /* vpx_codec_ctrl_fn_map_t *ctrl_maps; */
797 NOT_IMPLEMENTED, /* vpx_codec_get_mmap_fn_t get_mmap; */
798 NOT_IMPLEMENTED, /* vpx_codec_set_mmap_fn_t set_mmap; */
799 { 813 {
800 vp8_peek_si, /* vpx_codec_peek_si_fn_t peek_si; */ 814 vp8_peek_si, /* vpx_codec_peek_si_fn_t peek_si; */
801 vp8_get_si, /* vpx_codec_get_si_fn_t get_si; */ 815 vp8_get_si, /* vpx_codec_get_si_fn_t get_si; */
802 vp8_decode, /* vpx_codec_decode_fn_t decode; */ 816 vp8_decode, /* vpx_codec_decode_fn_t decode; */
803 vp8_get_frame, /* vpx_codec_frame_get_fn_t frame_get; */ 817 vp8_get_frame, /* vpx_codec_frame_get_fn_t frame_get; */
804 NOT_IMPLEMENTED, 818 NOT_IMPLEMENTED,
805 }, 819 },
806 { /* encoder functions */ 820 { /* encoder functions */
821 0,
807 NOT_IMPLEMENTED, 822 NOT_IMPLEMENTED,
808 NOT_IMPLEMENTED, 823 NOT_IMPLEMENTED,
809 NOT_IMPLEMENTED, 824 NOT_IMPLEMENTED,
810 NOT_IMPLEMENTED, 825 NOT_IMPLEMENTED,
811 NOT_IMPLEMENTED, 826 NOT_IMPLEMENTED,
812 NOT_IMPLEMENTED 827 NOT_IMPLEMENTED
813 } 828 }
814 }; 829 };
OLDNEW
« no previous file with comments | « source/libvpx/vp8/vp8_cx_iface.c ('k') | source/libvpx/vp9/common/vp9_alloccommon.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698