120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/*
220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2009 The Android Open Source Project
320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License.
620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at
720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *
1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software
1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and
1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License.
1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */
1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#ifndef MEDIA_ERRORS_H_
1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define MEDIA_ERRORS_H_
2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Errors.h>
2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android {
2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum {
26251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // status_t map for errors in the media framework
27251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // OK or NO_ERROR or 0 represents no error.
28251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
29251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // See system/core/include/utils/Errors.h
30251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // System standard errors from -1 through (possibly) -133
31251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    //
32251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // Errors with special meanings and side effects.
33251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // INVALID_OPERATION:  Operation attempted in an illegal state (will try to signal to app).
34251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // DEAD_OBJECT:        Signal from CodecBase to MediaCodec that MediaServer has died.
35251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // NAME_NOT_FOUND:     Signal from CodecBase to MediaCodec that the component was not found.
36251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
37251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // Media errors
3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    MEDIA_ERROR_BASE        = -1000,
3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_ALREADY_CONNECTED = MEDIA_ERROR_BASE,
4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_NOT_CONNECTED     = MEDIA_ERROR_BASE - 1,
4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_UNKNOWN_HOST      = MEDIA_ERROR_BASE - 2,
4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_CANNOT_CONNECT    = MEDIA_ERROR_BASE - 3,
4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_IO                = MEDIA_ERROR_BASE - 4,
4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_CONNECTION_LOST   = MEDIA_ERROR_BASE - 5,
4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_MALFORMED         = MEDIA_ERROR_BASE - 7,
4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_OUT_OF_RANGE      = MEDIA_ERROR_BASE - 8,
4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_BUFFER_TOO_SMALL  = MEDIA_ERROR_BASE - 9,
4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_UNSUPPORTED       = MEDIA_ERROR_BASE - 10,
5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber    ERROR_END_OF_STREAM     = MEDIA_ERROR_BASE - 11,
517f281f87670c63775ea1ae8b24af31822d5ad416Andreas Huber
527f281f87670c63775ea1ae8b24af31822d5ad416Andreas Huber    // Not technically an error.
537f281f87670c63775ea1ae8b24af31822d5ad416Andreas Huber    INFO_FORMAT_CHANGED    = MEDIA_ERROR_BASE - 12,
542a4d22d79e927f2245537921e10fc5fda1c47a29Andreas Huber    INFO_DISCONTINUITY     = MEDIA_ERROR_BASE - 13,
555778822d86b0337407514b9372562b86edfa91cdAndreas Huber    INFO_OUTPUT_BUFFERS_CHANGED = MEDIA_ERROR_BASE - 14,
56dcd25efb46c41c8d24a0a9cf61fb57f84149709eGloria Wang
577340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang    // The following constant values should be in sync with
587340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang    // drm/drm_framework_common.h
597340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang    DRM_ERROR_BASE = -2000,
607340743ce30766af6334bbd9acf813eb66dd5a60Gloria Wang
610671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_UNKNOWN                        = DRM_ERROR_BASE,
620671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_NO_LICENSE                     = DRM_ERROR_BASE - 1,
630671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_LICENSE_EXPIRED                = DRM_ERROR_BASE - 2,
640671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_SESSION_NOT_OPENED             = DRM_ERROR_BASE - 3,
650671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED   = DRM_ERROR_BASE - 4,
660671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_DECRYPT                        = DRM_ERROR_BASE - 5,
670671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_CANNOT_HANDLE                  = DRM_ERROR_BASE - 6,
680671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_TAMPER_DETECTED                = DRM_ERROR_BASE - 7,
690671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_NOT_PROVISIONED                = DRM_ERROR_BASE - 8,
700671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_DEVICE_REVOKED                 = DRM_ERROR_BASE - 9,
710671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_RESOURCE_BUSY                  = DRM_ERROR_BASE - 10,
720671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION = DRM_ERROR_BASE - 11,
730671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_LAST_USED_ERRORCODE            = DRM_ERROR_BASE - 11,
740671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker
750671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_VENDOR_MAX                     = DRM_ERROR_BASE - 500,
760671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    ERROR_DRM_VENDOR_MIN                     = DRM_ERROR_BASE - 999,
775b8987e7de9d04b09153f329c680d2316cdb44ecAndreas Huber
7884f64d2a48a267c6517df69dd757c1ead54db036Gloria Wang    // Heartbeat Error Codes
7984f64d2a48a267c6517df69dd757c1ead54db036Gloria Wang    HEARTBEAT_ERROR_BASE = -3000,
808f883be3bd1fffd4e30bc7298c34085a4055be2bJeff Tinker    ERROR_HEARTBEAT_TERMINATE_REQUESTED                     = HEARTBEAT_ERROR_BASE,
81251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
82251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // NDK Error codes
83251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // frameworks/av/include/ndk/NdkMediaError.h
84251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // from -10000 (0xFFFFD8F0 - 0xFFFFD8EC)
85251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // from -20000 (0xFFFFB1E0 - 0xFFFFB1D7)
86251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
87251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // Codec errors are permitted from 0x80001000 through 0x9000FFFF
88251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    ERROR_CODEC_MAX    = (signed)0x9000FFFF,
89251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    ERROR_CODEC_MIN    = (signed)0x80001000,
90251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
91251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // System unknown errors from 0x80000000 - 0x80000007 (INT32_MIN + 7)
92251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    // See system/core/include/utils/Errors.h
93251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung};
94251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
95251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung// action codes for MediaCodecs that tell the upper layer and application
96251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung// the severity of any error.
97251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hungenum ActionCode {
98251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    ACTION_CODE_FATAL,
99251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    ACTION_CODE_TRANSIENT,
100251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung    ACTION_CODE_RECOVERABLE,
10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber};
10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
103251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung// returns true if err is a recognized DRM error code
104251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hungstatic inline bool isCryptoError(status_t err) {
1050671947255321526cb1ba1ec3a20af9e8579c257Jeff Tinker    return (ERROR_DRM_LAST_USED_ERRORCODE <= err && err <= ERROR_DRM_UNKNOWN)
106251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung            || (ERROR_DRM_VENDOR_MIN <= err && err <= ERROR_DRM_VENDOR_MAX);
107251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung}
108251d4be8aa5ab80bc915a82a2420233bdc62018eAndy Hung
10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}  // namespace android
11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber
11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif  // MEDIA_ERRORS_H_
112