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);