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

Side by Side Diff: source/libvpx/vpx/src/vpx_codec.c

Issue 11555023: libvpx: Add VP9 decoder. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 8 years 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
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
11 11
12 /*!\file 12 /*!\file
13 * \brief Provides the high level interface to wrap decoder algorithms. 13 * \brief Provides the high level interface to wrap decoder algorithms.
14 * 14 *
15 */ 15 */
16 #include <stdarg.h> 16 #include <stdarg.h>
17 #include "vpx/vpx_integer.h" 17 #include "vpx/vpx_integer.h"
18 #include "vpx/internal/vpx_codec_internal.h" 18 #include "vpx/internal/vpx_codec_internal.h"
19 #include "vpx_version.h" 19 #include "vpx_version.h"
20 20
21 #define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var) 21 #define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
22 22
23 int vpx_codec_version(void) 23 int vpx_codec_version(void) {
24 { 24 return VERSION_PACKED;
25 return VERSION_PACKED;
26 } 25 }
27 26
28 27
29 const char *vpx_codec_version_str(void) 28 const char *vpx_codec_version_str(void) {
30 { 29 return VERSION_STRING_NOSP;
31 return VERSION_STRING_NOSP;
32 } 30 }
33 31
34 32
35 const char *vpx_codec_version_extra_str(void) 33 const char *vpx_codec_version_extra_str(void) {
36 { 34 return VERSION_EXTRA;
37 return VERSION_EXTRA;
38 } 35 }
39 36
40 37
41 const char *vpx_codec_iface_name(vpx_codec_iface_t *iface) 38 const char *vpx_codec_iface_name(vpx_codec_iface_t *iface) {
42 { 39 return iface ? iface->name : "<invalid interface>";
43 return iface ? iface->name : "<invalid interface>";
44 } 40 }
45 41
46 const char *vpx_codec_err_to_string(vpx_codec_err_t err) 42 const char *vpx_codec_err_to_string(vpx_codec_err_t err) {
47 { 43 switch (err) {
48 switch (err)
49 {
50 case VPX_CODEC_OK: 44 case VPX_CODEC_OK:
51 return "Success"; 45 return "Success";
52 case VPX_CODEC_ERROR: 46 case VPX_CODEC_ERROR:
53 return "Unspecified internal error"; 47 return "Unspecified internal error";
54 case VPX_CODEC_MEM_ERROR: 48 case VPX_CODEC_MEM_ERROR:
55 return "Memory allocation error"; 49 return "Memory allocation error";
56 case VPX_CODEC_ABI_MISMATCH: 50 case VPX_CODEC_ABI_MISMATCH:
57 return "ABI version mismatch"; 51 return "ABI version mismatch";
58 case VPX_CODEC_INCAPABLE: 52 case VPX_CODEC_INCAPABLE:
59 return "Codec does not implement requested capability"; 53 return "Codec does not implement requested capability";
60 case VPX_CODEC_UNSUP_BITSTREAM: 54 case VPX_CODEC_UNSUP_BITSTREAM:
61 return "Bitstream not supported by this decoder"; 55 return "Bitstream not supported by this decoder";
62 case VPX_CODEC_UNSUP_FEATURE: 56 case VPX_CODEC_UNSUP_FEATURE:
63 return "Bitstream required feature not supported by this decoder"; 57 return "Bitstream required feature not supported by this decoder";
64 case VPX_CODEC_CORRUPT_FRAME: 58 case VPX_CODEC_CORRUPT_FRAME:
65 return "Corrupt frame detected"; 59 return "Corrupt frame detected";
66 case VPX_CODEC_INVALID_PARAM: 60 case VPX_CODEC_INVALID_PARAM:
67 return "Invalid parameter"; 61 return "Invalid parameter";
68 case VPX_CODEC_LIST_END: 62 case VPX_CODEC_LIST_END:
69 return "End of iterated list"; 63 return "End of iterated list";
70 } 64 }
71 65
72 return "Unrecognized error code"; 66 return "Unrecognized error code";
73 } 67 }
74 68
75 const char *vpx_codec_error(vpx_codec_ctx_t *ctx) 69 const char *vpx_codec_error(vpx_codec_ctx_t *ctx) {
76 { 70 return (ctx) ? vpx_codec_err_to_string(ctx->err)
77 return (ctx) ? vpx_codec_err_to_string(ctx->err) 71 : vpx_codec_err_to_string(VPX_CODEC_INVALID_PARAM);
78 : vpx_codec_err_to_string(VPX_CODEC_INVALID_PARAM);
79 } 72 }
80 73
81 const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx) 74 const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx) {
82 { 75 if (ctx && ctx->err)
83 if (ctx && ctx->err) 76 return ctx->priv ? ctx->priv->err_detail : ctx->err_detail;
84 return ctx->priv ? ctx->priv->err_detail : ctx->err_detail;
85 77
86 return NULL; 78 return NULL;
87 } 79 }
88 80
89 81
90 vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx) 82 vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx) {
91 { 83 vpx_codec_err_t res;
92 vpx_codec_err_t res;
93 84
94 if (!ctx) 85 if (!ctx)
95 res = VPX_CODEC_INVALID_PARAM; 86 res = VPX_CODEC_INVALID_PARAM;
96 else if (!ctx->iface || !ctx->priv) 87 else if (!ctx->iface || !ctx->priv)
97 res = VPX_CODEC_ERROR; 88 res = VPX_CODEC_ERROR;
98 else 89 else {
99 { 90 if (ctx->priv->alg_priv)
100 if (ctx->priv->alg_priv) 91 ctx->iface->destroy(ctx->priv->alg_priv);
101 ctx->iface->destroy(ctx->priv->alg_priv);
102 92
103 ctx->iface = NULL; 93 ctx->iface = NULL;
104 ctx->name = NULL; 94 ctx->name = NULL;
105 ctx->priv = NULL; 95 ctx->priv = NULL;
106 res = VPX_CODEC_OK; 96 res = VPX_CODEC_OK;
107 } 97 }
108 98
109 return SAVE_STATUS(ctx, res); 99 return SAVE_STATUS(ctx, res);
110 } 100 }
111 101
112 102
113 vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface) 103 vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface) {
114 { 104 return (iface) ? iface->caps : 0;
115 return (iface) ? iface->caps : 0;
116 } 105 }
117 106
118 107
119 vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, 108 vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx,
120 int ctrl_id, 109 int ctrl_id,
121 ...) 110 ...) {
122 { 111 vpx_codec_err_t res;
123 vpx_codec_err_t res;
124 112
125 if (!ctx || !ctrl_id) 113 if (!ctx || !ctrl_id)
126 res = VPX_CODEC_INVALID_PARAM; 114 res = VPX_CODEC_INVALID_PARAM;
127 else if (!ctx->iface || !ctx->priv || !ctx->iface->ctrl_maps) 115 else if (!ctx->iface || !ctx->priv || !ctx->iface->ctrl_maps)
128 res = VPX_CODEC_ERROR; 116 res = VPX_CODEC_ERROR;
129 else 117 else {
130 { 118 vpx_codec_ctrl_fn_map_t *entry;
131 vpx_codec_ctrl_fn_map_t *entry;
132 119
133 res = VPX_CODEC_ERROR; 120 res = VPX_CODEC_ERROR;
134 121
135 for (entry = ctx->iface->ctrl_maps; entry && entry->fn; entry++) 122 for (entry = ctx->iface->ctrl_maps; entry && entry->fn; entry++) {
136 { 123 if (!entry->ctrl_id || entry->ctrl_id == ctrl_id) {
137 if (!entry->ctrl_id || entry->ctrl_id == ctrl_id) 124 va_list ap;
138 {
139 va_list ap;
140 125
141 va_start(ap, ctrl_id); 126 va_start(ap, ctrl_id);
142 res = entry->fn(ctx->priv->alg_priv, ctrl_id, ap); 127 res = entry->fn(ctx->priv->alg_priv, ctrl_id, ap);
143 va_end(ap); 128 va_end(ap);
144 break; 129 break;
145 } 130 }
146 }
147 } 131 }
132 }
148 133
149 return SAVE_STATUS(ctx, res); 134 return SAVE_STATUS(ctx, res);
150 } 135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698