am 5264f600: Merge "Bail out after kMaxColorFormatSupported calls to OMX_GetParameter(). Avoid infinite loop in querying omx component about the supported color format." into ics-mr0

* commit '5264f6003bbcb8ca70df034379154914260cc322':
  Bail out after kMaxColorFormatSupported calls to OMX_GetParameter(). Avoid infinite loop in querying omx component about the supported color format.
This commit is contained in:
James Dong
2011-10-18 22:17:34 -07:00
committed by Android Git Automerger

View File

@@ -52,6 +52,13 @@ namespace android {
// buffers after 3 seconds. // buffers after 3 seconds.
const static int64_t kBufferFilledEventTimeOutNs = 3000000000LL; const static int64_t kBufferFilledEventTimeOutNs = 3000000000LL;
// OMX Spec defines less than 50 color formats. If the query for
// color format is executed for more than kMaxColorFormatSupported,
// the query will fail to avoid looping forever.
// 1000 is more than enough for us to tell whether the omx
// component in question is buggy or not.
const static uint32_t kMaxColorFormatSupported = 1000;
struct CodecInfo { struct CodecInfo {
const char *mime; const char *mime;
const char *codec; const char *codec;
@@ -819,6 +826,11 @@ status_t OMXCodec::setVideoPortFormatType(
} }
++index; ++index;
if (index >= kMaxColorFormatSupported) {
CODEC_LOGE("color format %d or compression format %d is not supported",
colorFormat, compressionFormat);
return UNKNOWN_ERROR;
}
} }
if (!found) { if (!found) {
@@ -902,22 +914,19 @@ status_t OMXCodec::isColorFormatSupported(
// the incremented index (bug 2897413). // the incremented index (bug 2897413).
CHECK_EQ(index, portFormat.nIndex); CHECK_EQ(index, portFormat.nIndex);
if (portFormat.eColorFormat == colorFormat) { if (portFormat.eColorFormat == colorFormat) {
LOGV("Found supported color format: %d", portFormat.eColorFormat); CODEC_LOGV("Found supported color format: %d", portFormat.eColorFormat);
return OK; // colorFormat is supported! return OK; // colorFormat is supported!
} }
++index; ++index;
portFormat.nIndex = index; portFormat.nIndex = index;
// OMX Spec defines less than 50 color formats if (index >= kMaxColorFormatSupported) {
// 1000 is more than enough for us to tell whether the omx CODEC_LOGE("More than %ld color formats are supported???", index);
// component in question is buggy or not.
if (index >= 1000) {
LOGE("More than %ld color formats are supported???", index);
break; break;
} }
} }
LOGE("color format %d is not supported", colorFormat); CODEC_LOGE("color format %d is not supported", colorFormat);
return UNKNOWN_ERROR; return UNKNOWN_ERROR;
} }