int MediaProfiles::getCamcorderProfileParamByName(const char *name, int cameraId, camcorder_quality quality) const { ALOGV("getCamcorderProfileParamByName: %s for camera %d, quality %d", name, cameraId, quality); int index = getCamcorderProfileIndex(cameraId, quality); if (index == -1) { ALOGE("The given camcorder profile camera %d quality %d is not found", cameraId, quality); 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; if (!strcmp("vid.height", name)) return mCamcorderProfiles[index]->mVideoCodec->mFrameHeight; if (!strcmp("vid.bps", name)) return mCamcorderProfiles[index]->mVideoCodec->mBitRate; if (!strcmp("vid.fps", name)) return mCamcorderProfiles[index]->mVideoCodec->mFrameRate; if (!strcmp("aud.codec", name)) return mCamcorderProfiles[index]->mAudioCodec->mCodec; if (!strcmp("aud.bps", name)) return mCamcorderProfiles[index]->mAudioCodec->mBitRate; if (!strcmp("aud.ch", name)) return mCamcorderProfiles[index]->mAudioCodec->mChannels; if (!strcmp("aud.hz", name)) return mCamcorderProfiles[index]->mAudioCodec->mSampleRate; ALOGE("The given camcorder profile param id %d name %s is not found", cameraId, name); return -1; }
bool MediaProfiles::hasCamcorderProfile(int cameraId, camcorder_quality quality) { #if 1 initCamcorderProfiles(); #endif return (getCamcorderProfileIndex(cameraId, quality) != -1); }
void MediaProfiles::checkAndAddRequiredProfilesIfNecessary() { if (sIsInitialized) { return; } initRequiredProfileRefs(mCameraIds); for (size_t i = 0, n = mCamcorderProfiles.size(); i < n; ++i) { int product = mCamcorderProfiles[i]->mVideoCodec->mFrameWidth * mCamcorderProfiles[i]->mVideoCodec->mFrameHeight; camcorder_quality quality = mCamcorderProfiles[i]->mQuality; int cameraId = mCamcorderProfiles[i]->mCameraId; int index = -1; int refIndex = getRequiredProfileRefIndex(cameraId); CHECK(refIndex != -1); RequiredProfileRefInfo *info; camcorder_quality refQuality; // Check high and low from either camcorder profile, timelapse profile // or high speed profile, but not all of them. Default, check camcorder profile size_t j = 0; size_t o = 2; if (isTimelapseProfile(quality)) { // Check timelapse profile instead. j = 2; o = kNumRequiredProfiles; } else if (isHighSpeedProfile(quality)) { // Skip the check for high speed profile. continue; } else { // Must be camcorder profile. CHECK(isCamcorderProfile(quality)); } for (; j < o; ++j) { info = &(mRequiredProfileRefs[refIndex].mRefs[j]); if ((j % 2 == 0 && product > info->mResolutionProduct) || // low (j % 2 != 0 && product < info->mResolutionProduct)) { // high continue; } switch (j) { case 0: refQuality = CAMCORDER_QUALITY_LOW; break; case 1: refQuality = CAMCORDER_QUALITY_HIGH; break; case 2: refQuality = CAMCORDER_QUALITY_TIME_LAPSE_LOW; break; case 3: refQuality = CAMCORDER_QUALITY_TIME_LAPSE_HIGH; break; default: CHECK(!"Should never reach here"); } if (!info->mHasRefProfile) { index = getCamcorderProfileIndex(cameraId, refQuality); } if (index == -1) { // New high or low quality profile is found. // Update its reference. info->mHasRefProfile = true; info->mRefProfileIndex = i; info->mResolutionProduct = product; } } } for (size_t cameraId = 0; cameraId < mCameraIds.size(); ++cameraId) { for (size_t j = 0; j < kNumRequiredProfiles; ++j) { int refIndex = getRequiredProfileRefIndex(cameraId); CHECK(refIndex != -1); RequiredProfileRefInfo *info = &mRequiredProfileRefs[refIndex].mRefs[j]; if (info->mHasRefProfile) { CamcorderProfile *profile = new CamcorderProfile( *mCamcorderProfiles[info->mRefProfileIndex]); // Overwrite the quality switch (j % kNumRequiredProfiles) { case 0: profile->mQuality = CAMCORDER_QUALITY_LOW; break; case 1: profile->mQuality = CAMCORDER_QUALITY_HIGH; break; case 2: profile->mQuality = CAMCORDER_QUALITY_TIME_LAPSE_LOW; break; case 3: profile->mQuality = CAMCORDER_QUALITY_TIME_LAPSE_HIGH; break; default: CHECK(!"Should never come here"); } int index = getCamcorderProfileIndex(cameraId, profile->mQuality); if (index != -1) { ALOGV("Profile quality %d for camera %zu already exists", profile->mQuality, cameraId); CHECK(index == refIndex); continue; } // Insert the new profile ALOGV("Add a profile: quality %d=>%d for camera %zu", mCamcorderProfiles[info->mRefProfileIndex]->mQuality, profile->mQuality, cameraId); mCamcorderProfiles.add(profile); } } } }
bool MediaProfiles::hasCamcorderProfile(int cameraId, camcorder_quality quality) const { return (getCamcorderProfileIndex(cameraId, quality) != -1); }