diff --git a/api/current.txt b/api/current.txt
index 854df47..de27da0 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -13650,14 +13650,14 @@
     field public static final int ALLOCATOR_HARDWARE = 3; // 0x3
     field public static final int ALLOCATOR_SHARED_MEMORY = 2; // 0x2
     field public static final int ALLOCATOR_SOFTWARE = 1; // 0x1
-    field public static final int ERROR_SOURCE_ERROR = 3; // 0x3
-    field public static final int ERROR_SOURCE_EXCEPTION = 1; // 0x1
-    field public static final int ERROR_SOURCE_INCOMPLETE = 2; // 0x2
   }
 
   public static final class ImageDecoder.DecodeException extends java.io.IOException {
     method public int getError();
     method public android.graphics.ImageDecoder.Source getSource();
+    field public static final int SOURCE_EXCEPTION = 1; // 0x1
+    field public static final int SOURCE_INCOMPLETE = 2; // 0x2
+    field public static final int SOURCE_MALFORMED_DATA = 3; // 0x3
   }
 
   public static class ImageDecoder.ImageInfo {
diff --git a/api/removed.txt b/api/removed.txt
index 7bbf376..1228fd1 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -155,6 +155,9 @@
   public final class ImageDecoder implements java.lang.AutoCloseable {
     method public deprecated boolean getAsAlphaMask();
     method public deprecated android.graphics.ImageDecoder setAsAlphaMask(boolean);
+    field public static final deprecated int ERROR_SOURCE_ERROR = 3; // 0x3
+    field public static final deprecated int ERROR_SOURCE_EXCEPTION = 1; // 0x1
+    field public static final deprecated int ERROR_SOURCE_INCOMPLETE = 2; // 0x2
   }
 
   public static deprecated class ImageDecoder.IncompleteException extends java.io.IOException {
diff --git a/core/jni/android/graphics/ImageDecoder.cpp b/core/jni/android/graphics/ImageDecoder.cpp
index f4fec76..726c450 100644
--- a/core/jni/android/graphics/ImageDecoder.cpp
+++ b/core/jni/android/graphics/ImageDecoder.cpp
@@ -79,7 +79,7 @@
 
 static jobject native_create(JNIEnv* env, std::unique_ptr<SkStream> stream, jobject source) {
     if (!stream.get()) {
-        return throw_exception(env, ImageDecoder::kSourceError, "Failed to create a stream",
+        return throw_exception(env, ImageDecoder::kSourceMalformedData, "Failed to create a stream",
                                nullptr, source);
     }
     std::unique_ptr<ImageDecoder> decoder(new ImageDecoder);
@@ -96,8 +96,8 @@
                 SkString msg;
                 msg.printf("Failed to create image decoder with message '%s'",
                            SkCodec::ResultToString(result));
-                return throw_exception(env, ImageDecoder::kSourceError,  msg.c_str(), nullptr,
-                                       source);
+                return throw_exception(env, ImageDecoder::kSourceMalformedData,  msg.c_str(),
+                                       nullptr, source);
 
         }
     }
@@ -110,7 +110,7 @@
     decoder->mCodec = SkAndroidCodec::MakeFromCodec(std::move(codec),
             SkAndroidCodec::ExifOrientationBehavior::kRespect);
     if (!decoder->mCodec.get()) {
-        return throw_exception(env, ImageDecoder::kSourceError, "", nullptr, source);
+        return throw_exception(env, ImageDecoder::kSourceMalformedData, "", nullptr, source);
     }
 
     const auto& info = decoder->mCodec->getInfo();
@@ -127,7 +127,7 @@
 
     struct stat fdStat;
     if (fstat(descriptor, &fdStat) == -1) {
-        return throw_exception(env, ImageDecoder::kSourceError,
+        return throw_exception(env, ImageDecoder::kSourceMalformedData,
                                "broken file descriptor; fstat returned -1", nullptr, source);
     }
 
@@ -135,8 +135,8 @@
     FILE* file = fdopen(dupDescriptor, "r");
     if (file == NULL) {
         close(dupDescriptor);
-        return throw_exception(env, ImageDecoder::kSourceError, "Could not open file", nullptr,
-                               source);
+        return throw_exception(env, ImageDecoder::kSourceMalformedData, "Could not open file",
+                               nullptr, source);
     }
     std::unique_ptr<SkFILEStream> fileStream(new SkFILEStream(file));
 
@@ -157,7 +157,7 @@
     std::unique_ptr<SkStream> stream(CreateJavaInputStreamAdaptor(env, is, storage, false));
 
     if (!stream.get()) {
-        return throw_exception(env, ImageDecoder::kSourceError, "Failed to create a stream",
+        return throw_exception(env, ImageDecoder::kSourceMalformedData, "Failed to create a stream",
                                nullptr, source);
     }
 
@@ -179,7 +179,7 @@
     std::unique_ptr<SkStream> stream = CreateByteBufferStreamAdaptor(env, jbyteBuffer,
                                                                      initialPosition, limit);
     if (!stream) {
-        return throw_exception(env, ImageDecoder::kSourceError, "Failed to read ByteBuffer",
+        return throw_exception(env, ImageDecoder::kSourceMalformedData, "Failed to read ByteBuffer",
                                nullptr, source);
     }
     return native_create(env, std::move(stream), source);
@@ -313,7 +313,7 @@
             break;
         case SkCodec::kErrorInInput:
             if (!jexception) {
-                onPartialImageError = ImageDecoder::kSourceError;
+                onPartialImageError = ImageDecoder::kSourceMalformedData;
             }
             break;
         default:
diff --git a/core/jni/android/graphics/ImageDecoder.h b/core/jni/android/graphics/ImageDecoder.h
index e6e4920..fd9827b 100644
--- a/core/jni/android/graphics/ImageDecoder.h
+++ b/core/jni/android/graphics/ImageDecoder.h
@@ -35,9 +35,9 @@
 
     // These need to stay in sync with ImageDecoder.java's Error constants.
     enum Error {
-        kSourceException  = 1,
-        kSourceIncomplete = 2,
-        kSourceError      = 3,
+        kSourceException     = 1,
+        kSourceIncomplete    = 2,
+        kSourceMalformedData = 3,
     };
 
     // These need to stay in sync with PixelFormat.java's Format constants.
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index fa26ffd..5ca0ad6 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -457,31 +457,49 @@
 
     };
 
-    /**
-     *  An Exception was thrown reading the {@link Source}.
+    /** @removed
+     * @deprecated Replaced by {@link #DecodeException#SOURCE_EXCEPTION}.
      */
+    @java.lang.Deprecated
     public static final int ERROR_SOURCE_EXCEPTION  = 1;
 
-    /**
-     *  The encoded data was incomplete.
+    /** @removed
+     * @deprecated Replaced by {@link #DecodeException#SOURCE_INCOMPLETE}.
      */
+    @java.lang.Deprecated
     public static final int ERROR_SOURCE_INCOMPLETE = 2;
 
-    /**
-     *  The encoded data contained an error.
+    /** @removed
+     * @deprecated Replaced by {@link #DecodeException#SOURCE_MALFORMED_DATA}.
      */
+    @java.lang.Deprecated
     public static final int ERROR_SOURCE_ERROR      = 3;
 
-    /** @hide **/
-    @Retention(SOURCE)
-    @IntDef(value = { ERROR_SOURCE_EXCEPTION, ERROR_SOURCE_INCOMPLETE, ERROR_SOURCE_ERROR },
-            prefix = {"ERROR_"})
-    public @interface Error {};
-
     /**
      *  Information about an interrupted decode.
      */
     public static final class DecodeException extends IOException {
+        /**
+         *  An Exception was thrown reading the {@link Source}.
+         */
+        public static final int SOURCE_EXCEPTION  = 1;
+
+        /**
+         *  The encoded data was incomplete.
+         */
+        public static final int SOURCE_INCOMPLETE = 2;
+
+        /**
+         *  The encoded data contained an error.
+         */
+        public static final int SOURCE_MALFORMED_DATA      = 3;
+
+        /** @hide **/
+        @Retention(SOURCE)
+        @IntDef(value = { SOURCE_EXCEPTION, SOURCE_INCOMPLETE, SOURCE_MALFORMED_DATA },
+                prefix = {"SOURCE_"})
+        public @interface Error {};
+
         @Error final int mError;
         @NonNull final Source mSource;
 
@@ -505,7 +523,7 @@
         /**
          *  Retrieve the reason that decoding was interrupted.
          *
-         *  <p>If the error is {@link #ERROR_SOURCE_EXCEPTION}, the underlying
+         *  <p>If the error is {@link #SOURCE_EXCEPTION}, the underlying
          *  {@link java.lang.Throwable} can be retrieved with
          *  {@link java.lang.Throwable#getCause}.</p>
          */
@@ -524,11 +542,11 @@
 
         private static String errorMessage(@Error int error, @Nullable Throwable cause) {
             switch (error) {
-                case ERROR_SOURCE_EXCEPTION:
+                case SOURCE_EXCEPTION:
                     return "Exception in input: " + cause;
-                case ERROR_SOURCE_INCOMPLETE:
+                case SOURCE_INCOMPLETE:
                     return "Input was incomplete.";
-                case ERROR_SOURCE_ERROR:
+                case SOURCE_MALFORMED_DATA:
                     return "Input contained an error.";
                 default:
                     return "";
@@ -1368,7 +1386,7 @@
      * Private method called by JNI.
      */
     @SuppressWarnings("unused")
-    private void onPartialImage(@Error int error, @Nullable Throwable cause)
+    private void onPartialImage(@DecodeException.Error int error, @Nullable Throwable cause)
             throws DecodeException {
         DecodeException exception = new DecodeException(error, cause, mSource);
         if (mOnPartialImageListener == null
