Image encoding settings java API through xml configuration file

- I decided to completely remove jpeg decoding related stuff from this change
  I think that setting is better off if it is specified by the system properties.
  We don't have to include MediaProfiles.h header in skia files
diff --git a/include/media/MediaProfiles.h b/include/media/MediaProfiles.h
index 3f253f9..eb96d20 100644
--- a/include/media/MediaProfiles.h
+++ b/include/media/MediaProfiles.h
@@ -52,6 +52,7 @@
      * or -1 if error.
      *
      * Supported param name are:
+     * duration - the recording duration.
      * file.format - output file format. see mediarecorder.h for details
      * vid.codec - video encoder. see mediarecorder.h for details.
      * aud.codec - audio encoder. see mediarecorder.h for details.
@@ -120,6 +121,16 @@
       */
     Vector<audio_decoder> getAudioDecoders() const;
 
+    /**
+     * Returns the number of image encoding quality levels supported.
+     */
+    Vector<int> getImageEncodingQualityLevels() const;
+
+    /**
+     * Returns the maximum amount of memory in bytes we can use for decoding a JPEG file.
+     */
+    int getImageDecodingMaxMemory() const;
+
 private:
     MediaProfiles& operator=(const MediaProfiles&);  // Don't call me
     MediaProfiles(const MediaProfiles&);             // Don't call me
@@ -257,6 +268,8 @@
     static VideoEncoderCap* createVideoEncoderCap(const char **atts);
     static AudioEncoderCap* createAudioEncoderCap(const char **atts);
     static CamcorderProfile* createCamcorderProfile(const char **atts);
+    static int getImageEncodingQualityLevel(const char **atts);
+    static int getImageDecodingMaxMemory(const char **atts);
 
     // Customized element tag handler for parsing the xml configuration file.
     static void startElementHandler(void *userData, const char *name, const char **atts);
@@ -271,6 +284,8 @@
     static void createDefaultVideoDecoders(MediaProfiles *profiles);
     static void createDefaultAudioDecoders(MediaProfiles *profiles);
     static void createDefaultEncoderOutputFileFormats(MediaProfiles *profiles);
+    static void createDefaultImageEncodingQualityLevels(MediaProfiles *profiles);
+    static void createDefaultImageDecodingMaxMemory(MediaProfiles *profiles);
     static VideoEncoderCap* createDefaultH263VideoEncoderCap();
     static VideoEncoderCap* createDefaultM4vVideoEncoderCap();
     static AudioEncoderCap* createDefaultAmrNBEncoderCap();
@@ -295,6 +310,8 @@
     Vector<AudioDecoderCap*>  mAudioDecoders;
     Vector<VideoDecoderCap*>  mVideoDecoders;
     Vector<output_format>     mEncoderOutputFileFormats;
+    Vector<int>               mImageEncodingQualityLevels;
+    int                       mImageDecodingMaxMemory;
 };
 
 }; // namespace android
diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp
index 0efade1..1263373 100644
--- a/media/libmedia/MediaProfiles.cpp
+++ b/media/libmedia/MediaProfiles.cpp
@@ -293,6 +293,13 @@
     return profile;
 }
 
+/*static*/ int
+MediaProfiles::getImageEncodingQualityLevel(const char** atts)
+{
+    CHECK(!strcmp("quality", atts[0]));
+    return atoi(atts[1]);
+}
+
 /*static*/ void
 MediaProfiles::startElementHandler(void *userData, const char *name, const char **atts)
 {
@@ -317,6 +324,8 @@
         profiles->mEncoderOutputFileFormats.add(createEncoderOutputFileFormat(atts));
     } else if (strcmp("EncoderProfile", name) == 0) {
         profiles->mCamcorderProfiles.add(createCamcorderProfile(atts));
+    } else if (strcmp("ImageEncoding", name) == 0) {
+        profiles->mImageEncodingQualityLevels.add(getImageEncodingQualityLevel(atts));
     }
 }
 
@@ -446,6 +455,14 @@
         AUDIO_ENCODER_AMR_NB, 5525, 12200, 8000, 8000, 1, 1);
 }
 
+/*static*/ void
+MediaProfiles::createDefaultImageEncodingQualityLevels(MediaProfiles *profiles)
+{
+    profiles->mImageEncodingQualityLevels.add(70);
+    profiles->mImageEncodingQualityLevels.add(80);
+    profiles->mImageEncodingQualityLevels.add(90);
+}
+
 /*static*/ MediaProfiles*
 MediaProfiles::createDefaultInstance()
 {
@@ -456,6 +473,7 @@
     createDefaultVideoDecoders(profiles);
     createDefaultAudioDecoders(profiles);
     createDefaultEncoderOutputFileFormats(profiles);
+    createDefaultImageEncodingQualityLevels(profiles);
     sIsInitialized = true;
     return profiles;
 }
@@ -627,6 +645,7 @@
         return -1;
     }
 
+    if (!strcmp("duration", name)) return mCamcorderProfiles[index]->mDuration;
     if (!strcmp("file.format", name)) return mCamcorderProfiles[index]->mFileFormat;
     if (!strcmp("vid.codec", name)) return mCamcorderProfiles[index]->mVideoCodec->mCodec;
     if (!strcmp("vid.width", name)) return mCamcorderProfiles[index]->mVideoCodec->mFrameWidth;
@@ -642,6 +661,11 @@
     return -1;
 }
 
+Vector<int> MediaProfiles::getImageEncodingQualityLevels() const
+{
+    return mImageEncodingQualityLevels;  // copy out
+}
+
 MediaProfiles::~MediaProfiles()
 {
     CHECK("destructor should never be called" == 0);