1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef MEDIA_ERRORS_H_
18
19#define MEDIA_ERRORS_H_
20
21#include <utils/Errors.h>
22
23namespace android {
24
25enum {
26    // status_t map for errors in the media framework
27    // OK or NO_ERROR or 0 represents no error.
28
29    // See system/core/include/utils/Errors.h
30    // System standard errors from -1 through (possibly) -133
31    //
32    // Errors with special meanings and side effects.
33    // INVALID_OPERATION:  Operation attempted in an illegal state (will try to signal to app).
34    // DEAD_OBJECT:        Signal from CodecBase to MediaCodec that MediaServer has died.
35    // NAME_NOT_FOUND:     Signal from CodecBase to MediaCodec that the component was not found.
36
37    // Media errors
38    MEDIA_ERROR_BASE        = -1000,
39
40    ERROR_ALREADY_CONNECTED = MEDIA_ERROR_BASE,
41    ERROR_NOT_CONNECTED     = MEDIA_ERROR_BASE - 1,
42    ERROR_UNKNOWN_HOST      = MEDIA_ERROR_BASE - 2,
43    ERROR_CANNOT_CONNECT    = MEDIA_ERROR_BASE - 3,
44    ERROR_IO                = MEDIA_ERROR_BASE - 4,
45    ERROR_CONNECTION_LOST   = MEDIA_ERROR_BASE - 5,
46    ERROR_MALFORMED         = MEDIA_ERROR_BASE - 7,
47    ERROR_OUT_OF_RANGE      = MEDIA_ERROR_BASE - 8,
48    ERROR_BUFFER_TOO_SMALL  = MEDIA_ERROR_BASE - 9,
49    ERROR_UNSUPPORTED       = MEDIA_ERROR_BASE - 10,
50    ERROR_END_OF_STREAM     = MEDIA_ERROR_BASE - 11,
51
52    // Not technically an error.
53    INFO_FORMAT_CHANGED    = MEDIA_ERROR_BASE - 12,
54    INFO_DISCONTINUITY     = MEDIA_ERROR_BASE - 13,
55    INFO_OUTPUT_BUFFERS_CHANGED = MEDIA_ERROR_BASE - 14,
56
57    // The following constant values should be in sync with
58    // drm/drm_framework_common.h
59    DRM_ERROR_BASE = -2000,
60
61    ERROR_DRM_UNKNOWN                        = DRM_ERROR_BASE,
62    ERROR_DRM_NO_LICENSE                     = DRM_ERROR_BASE - 1,
63    ERROR_DRM_LICENSE_EXPIRED                = DRM_ERROR_BASE - 2,
64    ERROR_DRM_SESSION_NOT_OPENED             = DRM_ERROR_BASE - 3,
65    ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED   = DRM_ERROR_BASE - 4,
66    ERROR_DRM_DECRYPT                        = DRM_ERROR_BASE - 5,
67    ERROR_DRM_CANNOT_HANDLE                  = DRM_ERROR_BASE - 6,
68    ERROR_DRM_TAMPER_DETECTED                = DRM_ERROR_BASE - 7,
69    ERROR_DRM_NOT_PROVISIONED                = DRM_ERROR_BASE - 8,
70    ERROR_DRM_DEVICE_REVOKED                 = DRM_ERROR_BASE - 9,
71    ERROR_DRM_RESOURCE_BUSY                  = DRM_ERROR_BASE - 10,
72    ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION = DRM_ERROR_BASE - 11,
73    ERROR_DRM_LAST_USED_ERRORCODE            = DRM_ERROR_BASE - 11,
74
75    ERROR_DRM_VENDOR_MAX                     = DRM_ERROR_BASE - 500,
76    ERROR_DRM_VENDOR_MIN                     = DRM_ERROR_BASE - 999,
77
78    // Heartbeat Error Codes
79    HEARTBEAT_ERROR_BASE = -3000,
80    ERROR_HEARTBEAT_TERMINATE_REQUESTED                     = HEARTBEAT_ERROR_BASE,
81
82    // CAS-related error codes
83    CAS_ERROR_BASE = -4000,
84
85    ERROR_CAS_UNKNOWN                        = CAS_ERROR_BASE,
86    ERROR_CAS_NO_LICENSE                     = CAS_ERROR_BASE - 1,
87    ERROR_CAS_LICENSE_EXPIRED                = CAS_ERROR_BASE - 2,
88    ERROR_CAS_SESSION_NOT_OPENED             = CAS_ERROR_BASE - 3,
89    ERROR_CAS_DECRYPT_UNIT_NOT_INITIALIZED   = CAS_ERROR_BASE - 4,
90    ERROR_CAS_DECRYPT                        = CAS_ERROR_BASE - 5,
91    ERROR_CAS_CANNOT_HANDLE                  = CAS_ERROR_BASE - 6,
92    ERROR_CAS_TAMPER_DETECTED                = CAS_ERROR_BASE - 7,
93    ERROR_CAS_NOT_PROVISIONED                = CAS_ERROR_BASE - 8,
94    ERROR_CAS_DEVICE_REVOKED                 = CAS_ERROR_BASE - 9,
95    ERROR_CAS_RESOURCE_BUSY                  = CAS_ERROR_BASE - 10,
96    ERROR_CAS_INSUFFICIENT_OUTPUT_PROTECTION = CAS_ERROR_BASE - 11,
97    ERROR_CAS_LAST_USED_ERRORCODE            = CAS_ERROR_BASE - 11,
98
99    ERROR_CAS_VENDOR_MAX                     = CAS_ERROR_BASE - 500,
100    ERROR_CAS_VENDOR_MIN                     = CAS_ERROR_BASE - 999,
101
102    // NDK Error codes
103    // frameworks/av/include/ndk/NdkMediaError.h
104    // from -10000 (0xFFFFD8F0 - 0xFFFFD8EC)
105    // from -20000 (0xFFFFB1E0 - 0xFFFFB1D7)
106
107    // Codec errors are permitted from 0x80001000 through 0x9000FFFF
108    ERROR_CODEC_MAX    = (signed)0x9000FFFF,
109    ERROR_CODEC_MIN    = (signed)0x80001000,
110
111    // System unknown errors from 0x80000000 - 0x80000007 (INT32_MIN + 7)
112    // See system/core/include/utils/Errors.h
113};
114
115// action codes for MediaCodecs that tell the upper layer and application
116// the severity of any error.
117enum ActionCode {
118    ACTION_CODE_FATAL,
119    ACTION_CODE_TRANSIENT,
120    ACTION_CODE_RECOVERABLE,
121};
122
123// returns true if err is a recognized DRM error code
124static inline bool isCryptoError(status_t err) {
125    return (ERROR_DRM_LAST_USED_ERRORCODE <= err && err <= ERROR_DRM_UNKNOWN)
126            || (ERROR_DRM_VENDOR_MIN <= err && err <= ERROR_DRM_VENDOR_MAX);
127}
128
129}  // namespace android
130
131#endif  // MEDIA_ERRORS_H_
132