}
+void _mmcamcorder_set_encoder_bitrate(MMCamcorderEncoderType type, int codec, int bitrate, GstElement *element)
+{
+ int set_value = 0;
+
+ if (!element) {
+ _mmcam_dbg_warn("NULL element, will be applied later - type %d, bitrate %d", type, bitrate);
+ return;
+ }
+
+ if (bitrate <= 0) {
+ _mmcam_dbg_warn("[type %d, codec %d] too small bitrate[%d], use default",
+ type, codec, bitrate);
+ return;
+ }
+
+ if (type == MM_CAMCORDER_ENCODER_TYPE_AUDIO) {
+ /* audio encoder bitrate setting */
+ switch (codec) {
+ case MM_AUDIO_CODEC_AMR:
+ set_value = __mmcamcorder_get_amrnb_bitrate_mode(bitrate);
+ _mmcam_dbg_log("Set AMR encoder mode [%d]", set_value);
+ MMCAMCORDER_G_OBJECT_SET(element, "band-mode", set_value);
+ break;
+ case MM_AUDIO_CODEC_MP3:
+ set_value = bitrate / 1000;
+ _mmcam_dbg_log("Set MP3 encoder bitrate [%d] kbps", set_value);
+ MMCAMCORDER_G_OBJECT_SET(element, "bitrate", set_value);
+ break;
+ case MM_AUDIO_CODEC_AAC:
+ _mmcam_dbg_log("Set AAC encoder bitrate [%d] bps", bitrate);
+ MMCAMCORDER_G_OBJECT_SET(element, "bitrate", bitrate);
+ break;
+ default:
+ _mmcam_dbg_warn("Not AMR, MP3 and AAC codec, need to add code for audio bitrate");
+ break;
+ }
+ } else {
+ /* video encoder bitrate setting */
+ _mmcam_dbg_log("Set video encoder bitrate %d", bitrate);
+ MMCAMCORDER_G_OBJECT_SET(element, "bitrate", bitrate);
+ }
+
+ return;
+}
+
+
int _mmcamcorder_create_encodesink_bin(MMHandleType handle, MMCamcorderEncodebinProfile profile)
{
int err = MM_ERROR_NONE;
- int result = 0;
int channel = 0;
int audio_enc = 0;
int v_bitrate = 0;
}
if (profile == MM_CAMCORDER_ENCBIN_PROFILE_VIDEO) {
- /* video encoder attribute setting */
- if (v_bitrate > 0) {
- MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_VENC].gst, "bitrate", v_bitrate);
- } else {
- _mmcam_dbg_warn("video bitrate is too small[%d], so skip setting. Use DEFAULT value.", v_bitrate);
- }
-
+ /* property setting in ini */
_mmcamcorder_conf_set_value_element_property(sc->encode_element[_MMCAMCORDER_ENCSINK_VENC].gst, VideoencElement);
+
+ /* bitrate setting */
+ _mmcamcorder_set_encoder_bitrate(MM_CAMCORDER_ENCODER_TYPE_VIDEO, 0,
+ v_bitrate, sc->encode_element[_MMCAMCORDER_ENCSINK_VENC].gst);
}
if (sc->audio_disable == FALSE &&
profile != MM_CAMCORDER_ENCBIN_PROFILE_IMAGE) {
- /* audio encoder attribute setting */
- if (a_bitrate > 0) {
- switch (audio_enc) {
- case MM_AUDIO_CODEC_AMR:
- result = __mmcamcorder_get_amrnb_bitrate_mode(a_bitrate);
- _mmcam_dbg_log("Set AMR encoder[%s] mode [%d]", gst_element_aenc_name, result);
- MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst, "band-mode", result);
- break;
- case MM_AUDIO_CODEC_AAC:
- _mmcam_dbg_log("Set AAC encoder[%s] bitrate [%d]", gst_element_aenc_name, a_bitrate);
- MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst, "bitrate", a_bitrate);
- break;
- default:
- _mmcam_dbg_log("Audio codec is not AMR or AAC... you need to implement setting function for audio encoder bit-rate");
- break;
- }
- } else {
- _mmcam_dbg_warn("Setting bitrate is too small, so skip setting. Use DEFAULT value.");
- }
-
+ /* property setting in ini */
_mmcamcorder_conf_set_value_element_property(sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst, AudioencElement);
+
+ /* bitrate setting */
+ _mmcamcorder_set_encoder_bitrate(MM_CAMCORDER_ENCODER_TYPE_AUDIO, audio_enc,
+ a_bitrate, sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst);
}
_mmcam_dbg_log("Element creation complete");
}
+int _mmcamcorder_check_codec_fileformat_compatibility(const char *codec_type, int codec, int file_format)
+{
+ mmf_return_val_if_fail(codec_type, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ /* Check compatibility between codec and file format */
+ if (!strcmp(codec_type, MMCAM_AUDIO_ENCODER)) {
+ if (codec > MM_AUDIO_CODEC_INVALID && codec < MM_AUDIO_CODEC_NUM &&
+ file_format > MM_FILE_FORMAT_INVALID && file_format < MM_FILE_FORMAT_NUM) {
+ if (audiocodec_fileformat_compatibility_table[codec][file_format] == 0) {
+ _mmcam_dbg_err("Audio codec[%d] and file format[%d] compatibility FAILED.", codec, file_format);
+ return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
+ }
+
+ _mmcam_dbg_log("Audio codec[%d] and file format[%d] compatibility SUCCESS.", codec, file_format);
+ } else {
+ _mmcam_dbg_err("Audio codec[%d] or file format[%d] is INVALID.", codec, file_format);
+ return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
+ }
+ } else if (!strcmp(codec_type, MMCAM_VIDEO_ENCODER)) {
+ if (codec > MM_VIDEO_CODEC_INVALID && codec < MM_VIDEO_CODEC_NUM &&
+ file_format > MM_FILE_FORMAT_INVALID && file_format < MM_FILE_FORMAT_NUM) {
+ if (videocodec_fileformat_compatibility_table[ codec][file_format] == 0) {
+ _mmcam_dbg_err("Video codec[%d] and file format[%d] compatibility FAILED.", codec, file_format);
+ return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
+ }
+
+ _mmcam_dbg_log("Video codec[%d] and file format[%d] compatibility SUCCESS.", codec, file_format);
+ } else {
+ _mmcam_dbg_err("Video codec[%d] or file format[%d] is INVALID.", codec, file_format);
+ return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
+ }
+ }
+
+ return MM_ERROR_NONE;
+}
+
+
int _mmcamcorder_check_audiocodec_fileformat_compatibility(MMHandleType handle)
{
int err = MM_ERROR_NONE;
char *err_name = NULL;
err = mm_camcorder_get_attributes(handle, &err_name,
- MMCAM_AUDIO_ENCODER, &audio_codec,
- MMCAM_FILE_FORMAT, &file_format,
- NULL);
+ MMCAM_AUDIO_ENCODER, &audio_codec,
+ MMCAM_FILE_FORMAT, &file_format,
+ NULL);
if (err != MM_ERROR_NONE) {
_mmcam_dbg_warn("Get attrs fail. (%s:%x)", err_name, err);
SAFE_FREE(err_name);
}
/* Check compatibility between audio codec and file format */
- if (audio_codec > MM_AUDIO_CODEC_INVALID && audio_codec < MM_AUDIO_CODEC_NUM &&
- file_format > MM_FILE_FORMAT_INVALID && file_format < MM_FILE_FORMAT_NUM) {
- if (audiocodec_fileformat_compatibility_table[audio_codec][file_format] == 0) {
- _mmcam_dbg_err("Audio codec[%d] and file format[%d] compatibility FAILED.",
- audio_codec, file_format);
- return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
- }
-
- _mmcam_dbg_log("Audio codec[%d] and file format[%d] compatibility SUCCESS.",
- audio_codec, file_format);
- } else {
- _mmcam_dbg_err("Audio codec[%d] or file format[%d] is INVALID.",
- audio_codec, file_format);
- return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
- }
+ err = _mmcamcorder_check_codec_fileformat_compatibility(MMCAM_AUDIO_ENCODER, audio_codec, file_format);
- return MM_ERROR_NONE;
+ return err;
}
return err;
}
- /* Check compatibility between audio codec and file format */
- if (video_codec > MM_VIDEO_CODEC_INVALID && video_codec < MM_VIDEO_CODEC_NUM &&
- file_format > MM_FILE_FORMAT_INVALID && file_format < MM_FILE_FORMAT_NUM) {
- if (videocodec_fileformat_compatibility_table[video_codec][file_format] == 0) {
- _mmcam_dbg_err("Video codec[%d] and file format[%d] compatibility FAILED.",
- video_codec, file_format);
- return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
- }
+ /* Check compatibility between video codec and file format */
+ err = _mmcamcorder_check_codec_fileformat_compatibility(MMCAM_VIDEO_ENCODER, video_codec, file_format);
- _mmcam_dbg_log("Video codec[%d] and file format[%d] compatibility SUCCESS.",
- video_codec, file_format);
- } else {
- _mmcam_dbg_err("Video codec[%d] or file format[%d] is INVALID.",
- video_codec, file_format);
- return MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE;
- }
-
- return MM_ERROR_NONE;
+ return err;
}