typedef struct
{
- const char* pCodecName;
+ const wchar_t* pCodecName;
CodecType audioCodec;
CodecType videoCodec;
MediaContainerType container;
static const _CodecValTable _CODEC_VAL_TABLE[] =
{
- {"VIDEO_CODEC_NONE", CODEC_NONE, CODEC_NONE, MEDIA_CONTAINER_NONE},
- {"VIDEO_CODEC_H263", CODEC_AMR_NB, CODEC_H263, MEDIA_CONTAINER_3GP}, //TODO bug reported
-// {"VIDEO_CODEC_H263", CODEC_AAC, CODEC_H263, MEDIA_CONTAINER_3GP},
- {"VIDEO_CODEC_MPEG4SP", CODEC_AAC, CODEC_MPEG4, MEDIA_CONTAINER_MP4},
- {"VIDEO_CODEC_H264", CODEC_AAC, CODEC_H264, MEDIA_CONTAINER_MP4},
+ {L"VIDEO_CODEC_NONE", CODEC_NONE, CODEC_NONE, MEDIA_CONTAINER_NONE},
+ {L"VIDEO_CODEC_H263", CODEC_AMR_NB, CODEC_H263, MEDIA_CONTAINER_3GP}, //TODO bug reported
+// {L"VIDEO_CODEC_H263", CODEC_AAC, CODEC_H263, MEDIA_CONTAINER_3GP},
+ {L"VIDEO_CODEC_MPEG4SP", CODEC_AAC, CODEC_MPEG4, MEDIA_CONTAINER_MP4},
+ {L"VIDEO_CODEC_H264", CODEC_AAC, CODEC_H264, MEDIA_CONTAINER_MP4},
{null, CODEC_NONE, CODEC_NONE, MEDIA_CONTAINER_NONE}
};
, __stateChangeReason(_RECORDER_STATE_REASON_NORMAL)
, __pAudioStreamCoordinator(null)
, __audioStreamTimeDuration(0)
- , __audioStreamCallback(false)
+ , __audioStreamFilterState(_AUDIO_STREAM_FILTER_OFF)
{
__recordingResolution.width = 0;
__recordingResolution.height = 0;
err = recorder_unset_error_cb(__handle);
err = recorder_unset_recording_status_cb(__handle);
err = recorder_unset_interrupted_cb(__handle);
+ if (__audioStreamFilterState != _AUDIO_STREAM_FILTER_OFF)
+ {
+ err = recorder_unset_audio_stream_cb(__handle);
+ }
__handle = MM_INVALID_HANDLE;
}
if (__pCoordinator != null)
}
result
-_VideoRecorderImpl::AddAudioStreamFilter(IAudioStreamFilter& filter)
+_VideoRecorderImpl::ChangeAudioStreamFilterState(_AudioStreamFilterState nextState)
{
result r = E_SUCCESS;
+ int err = ::RECORDER_ERROR_NONE;
+ _AudioStreamFilterState currentState = __audioStreamFilterState;
- r = __pAudioStreamCoordinator->AddAudioStreamFilter(filter);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ SysTryReturn(NID_MEDIA, nextState >= _AUDIO_STREAM_FILTER_OFF && nextState <= _AUDIO_STREAM_FILTER_PLAYING, E_INVALID_ARG, E_INVALID_ARG
+ , "[E_INVALID_ARG] Invalid argument(AudioStreamFilterState) is used. nextState=%d.", nextState);
- if (__audioStreamCallback != true)
+ if (currentState == nextState)
{
- int err = ::RECORDER_ERROR_NONE;
- err = recorder_set_audio_stream_cb(__handle, AudioStreamCb, this);
+ SysLog(NID_MEDIA, "Current state(%d) is same next state(%d).", __audioStreamFilterState, nextState);
+ return r;
+ }
+
+ switch (nextState)
+ {
+ case _AUDIO_STREAM_FILTER_OFF:
+ err = recorder_unset_audio_stream_cb(__handle);
r = ConvertResult(err);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] audio recorder set audio stream callback failed.", GetErrorMessage(r));
- __audioStreamCallback = true;
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] video recorder unset recording status callback failed.", GetErrorMessage(r));
+ break;
+
+ case _AUDIO_STREAM_FILTER_HIBERNATION:
+ //fall through
+ case _AUDIO_STREAM_FILTER_PLAYING:
+ if (currentState == _AUDIO_STREAM_FILTER_OFF)
+ {
+ err = recorder_set_audio_stream_cb(__handle, AudioStreamCb, this);
+ r = ConvertResult(err);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] video recorder set audio stream callback failed.", GetErrorMessage(r));
+ }
+ break;
}
+ SysLog(NID_MEDIA, "current state : %d, next state : %d", __audioStreamFilterState, nextState);
+ __audioStreamFilterState = nextState;
+
+ return r;
+}
+
+result
+_VideoRecorderImpl::AddAudioStreamFilter(IAudioStreamFilter& filter)
+{
+ result r = E_SUCCESS;
+ SysLog(NID_MEDIA, "video recorder AddAudioStreamFilter");
+
+ r = __pAudioStreamCoordinator->AddAudioStreamFilter(filter);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = ChangeAudioStreamFilterState(_AUDIO_STREAM_FILTER_PLAYING);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] video recorder set audio stream callback failed.", GetErrorMessage(r));
+
return r;
}
_VideoRecorderImpl::RemoveAudioStreamFilter(IAudioStreamFilter& filter)
{
result r = E_SUCCESS;
+ SysLog(NID_MEDIA, "video recorder RemoveAudioStreamFilter");
r = __pAudioStreamCoordinator->RemoveAudioStreamFilter(filter);
SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
if (__pAudioStreamCoordinator->GetFilterListCount() == 0)
{
- int err = ::RECORDER_ERROR_NONE;
- err = recorder_unset_audio_stream_cb(__handle);
- r = ConvertResult(err);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] audio recorder unset recording status callback failed.", GetErrorMessage(r));
- __audioStreamCallback = false;
+ _AudioStreamFilterState state = (GetMmState() == ::RECORDER_STATE_RECORDING ? _AUDIO_STREAM_FILTER_HIBERNATION : _AUDIO_STREAM_FILTER_OFF);
+ r = ChangeAudioStreamFilterState(state);
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] video recorder unset audio stream callback failed.", GetErrorMessage(r));
}
return r;
SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
}
+ if (__audioStreamFilterState == _AUDIO_STREAM_FILTER_HIBERNATION)
+ {
+ r = ChangeAudioStreamFilterState(_AUDIO_STREAM_FILTER_OFF);
+ SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] video recorder unset audio stream callback failed.", GetErrorMessage(r));
+ }
+
mmState = GetMmState();
switch (mmState)
{
SysTryReturnVoidResult(NID_MEDIA, _CamRef::IsAlive(*pImpl), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The object was already destroyed.");
SysTryReturnVoidResult(NID_MEDIA, pStream != null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] void instance is not available. pStream is null.");
- if (pImpl->__audioStreamCallback == true)
+ if (pImpl->__audioStreamFilterState == _AUDIO_STREAM_FILTER_PLAYING)
{
samplingRate = _RecorderUtil::CalculateSampleRate(size, channel, pImpl->__audioStreamTimeDuration, _RecorderUtil::GetOspSampleType(format));
(pImpl->__pAudioStreamCoordinator)->ProcessAudioStreamData((byte*)pStream, size, samplingRate, _RecorderUtil::GetOspChannelType(channel), _RecorderUtil::GetOspSampleType(format));
{
r = E_SYSTEM;
}
- else if (err == ::RECORDER_ERROR_SOUND_POLICY)
+ else if (err == ::RECORDER_ERROR_SOUND_POLICY
+ || err == ::RECORDER_ERROR_SOUND_POLICY_BY_CALL
+ || err == ::RECORDER_ERROR_SOUND_POLICY_BY_ALARM)
{
r = E_DEVICE_BUSY;
}
_VideoRecorderImpl::GetMediaType(const Base::String& codec, CodecType& audioCodec, CodecType& videoCodec, MediaContainerType& container) const
{
int i = 0;
- std::unique_ptr<char[]> pCodecChars (Tizen::Base::_StringConverter::CopyToCharArrayN(codec));
-
while (_CODEC_VAL_TABLE[i].pCodecName != null)
{
- if (strcmp(_CODEC_VAL_TABLE[i].pCodecName, pCodecChars.get()) == 0)
+ if (String(_CODEC_VAL_TABLE[i].pCodecName).Equals(codec))
{
videoCodec = _CODEC_VAL_TABLE[i].videoCodec;
audioCodec = _CODEC_VAL_TABLE[i].audioCodec;