diff options
Diffstat (limited to 'media')
| -rw-r--r-- | media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp | 71 | ||||
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 2 | ||||
| -rw-r--r-- | media/libstagefright/CameraSourceTimeLapse.cpp | 6 | 
3 files changed, 52 insertions, 27 deletions
diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp index efa1c45..5a1e93a 100644 --- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp +++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp @@ -49,6 +49,16 @@ extern "C" const struct effect_interface_s gLvmEffectInterface;          }\      } + +static inline int16_t clamp16(int32_t sample) +{ +    // check overflow for both positive and negative values: +    // all bits above short range must me equal to sign bit +    if ((sample>>15) ^ (sample>>31)) +        sample = 0x7FFF ^ (sample>>31); +    return sample; +} +  // Namespaces  namespace android {  namespace { @@ -707,13 +717,6 @@ int LvmBundle_init(EffectContext *pContext){  }   /* end LvmBundle_init */ -static inline int16_t clamp16(int32_t sample) -{ -    if ((sample>>15) ^ (sample>>31)) -        sample = 0x7FFF ^ (sample>>31); -    return sample; -} -  //----------------------------------------------------------------------------  // LvmBundle_process()  //---------------------------------------------------------------------------- @@ -2459,6 +2462,9 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)      LOGV("\tEffect_setEnabled() type %d, enabled %d", pContext->EffectType, enabled);      if (enabled) { +        // Bass boost or Virtualizer can be temporarily disabled if playing over device speaker due +        // to their nature. +        bool tempDisabled = false;          switch (pContext->EffectType) {              case LVM_BASS_BOOST:                  if (pContext->pBundledContext->bBassEnabled == LVM_TRUE) { @@ -2471,6 +2477,7 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)                  pContext->pBundledContext->SamplesToExitCountBb =                       (LVM_INT32)(pContext->pBundledContext->SamplesPerSecond*0.1);                  pContext->pBundledContext->bBassEnabled = LVM_TRUE; +                tempDisabled = pContext->pBundledContext->bBassTempDisabled;                  break;              case LVM_EQUALIZER:                  if (pContext->pBundledContext->bEqualizerEnabled == LVM_TRUE) { @@ -2495,6 +2502,7 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)                  pContext->pBundledContext->SamplesToExitCountVirt =                       (LVM_INT32)(pContext->pBundledContext->SamplesPerSecond*0.1);                  pContext->pBundledContext->bVirtualizerEnabled = LVM_TRUE; +                tempDisabled = pContext->pBundledContext->bVirtualizerTempDisabled;                  break;              case LVM_VOLUME:                  if (pContext->pBundledContext->bVolumeEnabled == LVM_TRUE) { @@ -2508,7 +2516,9 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)                  LOGV("\tEffect_setEnabled() invalid effect type");                  return -EINVAL;          } -        LvmEffect_enable(pContext); +        if (!tempDisabled) { +            LvmEffect_enable(pContext); +        }      } else {          switch (pContext->EffectType) {              case LVM_BASS_BOOST: @@ -2683,12 +2693,19 @@ int Effect_process(effect_handle_t     self,              LOGV("\tLVM_ERROR : LvmBundle_process returned error %d", lvmStatus);              return lvmStatus;          } -    }else{ +    } else {          //LOGV("\tEffect_process Not Calling process with %d effects enabled, %d called: Effect %d",          //pContext->pBundledContext->NumberEffectsEnabled,          //pContext->pBundledContext->NumberEffectsCalled, pContext->EffectType);          // 2 is for stereo input -        memcpy(outBuffer->raw, inBuffer->raw, outBuffer->frameCount*sizeof(LVM_INT16)*2); +        if (pContext->config.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { +            for (size_t i=0; i < outBuffer->frameCount*2; i++){ +                outBuffer->s16[i] = +                        clamp16((LVM_INT32)outBuffer->s16[i] + (LVM_INT32)inBuffer->s16[i]); +            } +        } else { +            memcpy(outBuffer->raw, inBuffer->raw, outBuffer->frameCount*sizeof(LVM_INT16)*2); +        }      }      return status; @@ -3047,9 +3064,10 @@ int Effect_command(effect_handle_t  self,              LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_SET_DEVICE start");              uint32_t device = *(uint32_t *)pCmdData; -            if(pContext->EffectType == LVM_BASS_BOOST){ -                if((device == AUDIO_DEVICE_OUT_SPEAKER)||(device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)|| -                   (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){ +            if (pContext->EffectType == LVM_BASS_BOOST) { +                if((device == AUDIO_DEVICE_OUT_SPEAKER) || +                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) || +                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){                      LOGV("\tEFFECT_CMD_SET_DEVICE device is invalid for LVM_BASS_BOOST %d",                            *(int32_t *)pCmdData);                      LOGV("\tEFFECT_CMD_SET_DEVICE temporary disable LVM_BAS_BOOST"); @@ -3058,30 +3076,31 @@ int Effect_command(effect_handle_t  self,                      // the effect must still report its original state as this can only be changed                      // by the ENABLE/DISABLE command -                    if(pContext->pBundledContext->bBassEnabled == LVM_TRUE){ +                    if (pContext->pBundledContext->bBassEnabled == LVM_TRUE) {                          LOGV("\tEFFECT_CMD_SET_DEVICE disable LVM_BASS_BOOST %d",                               *(int32_t *)pCmdData);                          android::LvmEffect_disable(pContext); -                        pContext->pBundledContext->bBassTempDisabled = LVM_TRUE;                      } -                }else{ +                    pContext->pBundledContext->bBassTempDisabled = LVM_TRUE; +                } else {                      LOGV("\tEFFECT_CMD_SET_DEVICE device is valid for LVM_BASS_BOOST %d",                           *(int32_t *)pCmdData);                      // If a device supports bassboost and the effect has been temporarily disabled                      // previously then re-enable it -                    if(pContext->pBundledContext->bBassTempDisabled == LVM_TRUE){ +                    if (pContext->pBundledContext->bBassEnabled == LVM_TRUE) {                          LOGV("\tEFFECT_CMD_SET_DEVICE re-enable LVM_BASS_BOOST %d",                               *(int32_t *)pCmdData);                          android::LvmEffect_enable(pContext); -                        pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;                      } +                    pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;                  }              } -            if(pContext->EffectType == LVM_VIRTUALIZER){ -                if((device == AUDIO_DEVICE_OUT_SPEAKER)||(device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)|| -                   (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){ +            if (pContext->EffectType == LVM_VIRTUALIZER) { +                if((device == AUDIO_DEVICE_OUT_SPEAKER)|| +                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)|| +                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){                      LOGV("\tEFFECT_CMD_SET_DEVICE device is invalid for LVM_VIRTUALIZER %d",                            *(int32_t *)pCmdData);                      LOGV("\tEFFECT_CMD_SET_DEVICE temporary disable LVM_VIRTUALIZER"); @@ -3090,25 +3109,25 @@ int Effect_command(effect_handle_t  self,                      // the effect must still report its original state as this can only be changed                      // by the ENABLE/DISABLE command -                    if(pContext->pBundledContext->bVirtualizerEnabled == LVM_TRUE){ +                    if (pContext->pBundledContext->bVirtualizerEnabled == LVM_TRUE) {                          LOGV("\tEFFECT_CMD_SET_DEVICE disable LVM_VIRTUALIZER %d",                                *(int32_t *)pCmdData);                          android::LvmEffect_disable(pContext); -                        pContext->pBundledContext->bVirtualizerTempDisabled = LVM_TRUE;                      } -                }else{ +                    pContext->pBundledContext->bVirtualizerTempDisabled = LVM_TRUE; +                } else {                      LOGV("\tEFFECT_CMD_SET_DEVICE device is valid for LVM_VIRTUALIZER %d",                            *(int32_t *)pCmdData);                      // If a device supports virtualizer and the effect has been temporarily disabled                      // previously then re-enable it -                    if(pContext->pBundledContext->bVirtualizerTempDisabled == LVM_TRUE){ +                    if(pContext->pBundledContext->bVirtualizerEnabled == LVM_TRUE){                          LOGV("\tEFFECT_CMD_SET_DEVICE re-enable LVM_VIRTUALIZER %d",                                *(int32_t *)pCmdData);                          android::LvmEffect_enable(pContext); -                        pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;                      } +                    pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;                  }              }              LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_SET_DEVICE end"); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 249dc4e..2a5c0a6 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -276,7 +276,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {                  if (err == -EWOULDBLOCK) {                      if (mSource->feedMoreTSData() == OK) { -                        msg->post(); +                        msg->post(10000ll);                      }                  }              } else if (what == ACodec::kWhatEOS) { diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp index 1ba79e5..e4de20a 100644 --- a/media/libstagefright/CameraSourceTimeLapse.cpp +++ b/media/libstagefright/CameraSourceTimeLapse.cpp @@ -257,6 +257,12 @@ bool CameraSourceTimeLapse::skipFrameAndModifyTimeStamp(int64_t *timestampUs) {              mForceRead = false;              *timestampUs =                  mLastFrameTimestampUs + mTimeBetweenTimeLapseVideoFramesUs; + +            // Really make sure that this video recording frame will not be dropped. +            if (*timestampUs < mStartTimeUs) { +                LOGI("set timestampUs to start time stamp %lld us", mStartTimeUs); +                *timestampUs = mStartTimeUs; +            }              return false;          }      }  | 
