Loading include/media/stagefright/ACodec.h +3 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,9 @@ private: status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); status_t setupG711Codec(bool encoder, int32_t numChannels); status_t setupFlacCodec( bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); status_t setupRawAudioFormat( OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); Loading media/libstagefright/ACodec.cpp +54 −1 Original line number Diff line number Diff line Loading @@ -774,6 +774,8 @@ status_t ACodec::setComponentRole( "video_decoder.vpx", "video_encoder.vpx" }, { MEDIA_MIMETYPE_AUDIO_RAW, "audio_decoder.raw", "audio_encoder.raw" }, { MEDIA_MIMETYPE_AUDIO_FLAC, "audio_decoder.flac", "audio_encoder.flac" }, }; static const size_t kNumMimeToRole = Loading Loading @@ -834,7 +836,9 @@ status_t ACodec::configureCodec( } int32_t bitRate = 0; if (encoder && !msg->findInt32("bitrate", &bitRate)) { // FLAC encoder doesn't need a bitrate, other encoders do if (encoder && strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC) && !msg->findInt32("bitrate", &bitRate)) { return INVALID_OPERATION; } Loading Loading @@ -882,6 +886,27 @@ status_t ACodec::configureCodec( } else { err = setupG711Codec(encoder, numChannels); } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC)) { int32_t numChannels, sampleRate, compressionLevel = -1; if (encoder && (!msg->findInt32("channel-count", &numChannels) || !msg->findInt32("sample-rate", &sampleRate))) { ALOGE("missing channel count or sample rate for FLAC encoder"); err = INVALID_OPERATION; } else { if (encoder) { if (!msg->findInt32("flac-compression-level", &compressionLevel)) { compressionLevel = 5;// default FLAC compression level } else if (compressionLevel < 0) { ALOGW("compression level %d outside [0..8] range, using 0", compressionLevel); compressionLevel = 0; } else if (compressionLevel > 8) { ALOGW("compression level %d outside [0..8] range, using 8", compressionLevel); compressionLevel = 8; } } err = setupFlacCodec(encoder, numChannels, sampleRate, compressionLevel); } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_RAW)) { int32_t numChannels, sampleRate; if (encoder Loading Loading @@ -1163,6 +1188,34 @@ status_t ACodec::setupG711Codec(bool encoder, int32_t numChannels) { kPortIndexInput, 8000 /* sampleRate */, numChannels); } status_t ACodec::setupFlacCodec( bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel) { if (encoder) { OMX_AUDIO_PARAM_FLACTYPE def; InitOMXParams(&def); def.nPortIndex = kPortIndexOutput; // configure compression level status_t err = mOMX->getParameter(mNode, OMX_IndexParamAudioFlac, &def, sizeof(def)); if (err != OK) { ALOGE("setupFlacCodec(): Error %d getting OMX_IndexParamAudioFlac parameter", err); return err; } def.nCompressionLevel = compressionLevel; err = mOMX->setParameter(mNode, OMX_IndexParamAudioFlac, &def, sizeof(def)); if (err != OK) { ALOGE("setupFlacCodec(): Error %d setting OMX_IndexParamAudioFlac parameter", err); return err; } } return setupRawAudioFormat( encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, numChannels); } status_t ACodec::setupRawAudioFormat( OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels) { OMX_PARAM_PORTDEFINITIONTYPE def; Loading media/libstagefright/OMXCodec.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -1364,6 +1364,8 @@ void OMXCodec::setComponentRole( "video_decoder.vpx", "video_encoder.vpx" }, { MEDIA_MIMETYPE_AUDIO_RAW, "audio_decoder.raw", "audio_encoder.raw" }, { MEDIA_MIMETYPE_AUDIO_FLAC, "audio_decoder.flac", "audio_encoder.flac" }, }; static const size_t kNumMimeToRole = Loading media/libstagefright/codecs/flac/Android.mk 0 → 100644 +4 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) include $(call all-makefiles-under,$(LOCAL_PATH)) media/libstagefright/codecs/flac/enc/Android.mk 0 → 100644 +21 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ SoftFlacEncoder.cpp LOCAL_C_INCLUDES := \ frameworks/av/media/libstagefright/include \ frameworks/native/include/media/openmax \ external/flac/include LOCAL_SHARED_LIBRARIES := \ libstagefright libstagefright_omx libstagefright_foundation libutils LOCAL_STATIC_LIBRARIES := \ libFLAC \ LOCAL_MODULE := libstagefright_soft_flacenc LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY) Loading
include/media/stagefright/ACodec.h +3 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,9 @@ private: status_t setupAMRCodec(bool encoder, bool isWAMR, int32_t bitRate); status_t setupG711Codec(bool encoder, int32_t numChannels); status_t setupFlacCodec( bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel); status_t setupRawAudioFormat( OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels); Loading
media/libstagefright/ACodec.cpp +54 −1 Original line number Diff line number Diff line Loading @@ -774,6 +774,8 @@ status_t ACodec::setComponentRole( "video_decoder.vpx", "video_encoder.vpx" }, { MEDIA_MIMETYPE_AUDIO_RAW, "audio_decoder.raw", "audio_encoder.raw" }, { MEDIA_MIMETYPE_AUDIO_FLAC, "audio_decoder.flac", "audio_encoder.flac" }, }; static const size_t kNumMimeToRole = Loading Loading @@ -834,7 +836,9 @@ status_t ACodec::configureCodec( } int32_t bitRate = 0; if (encoder && !msg->findInt32("bitrate", &bitRate)) { // FLAC encoder doesn't need a bitrate, other encoders do if (encoder && strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC) && !msg->findInt32("bitrate", &bitRate)) { return INVALID_OPERATION; } Loading Loading @@ -882,6 +886,27 @@ status_t ACodec::configureCodec( } else { err = setupG711Codec(encoder, numChannels); } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC)) { int32_t numChannels, sampleRate, compressionLevel = -1; if (encoder && (!msg->findInt32("channel-count", &numChannels) || !msg->findInt32("sample-rate", &sampleRate))) { ALOGE("missing channel count or sample rate for FLAC encoder"); err = INVALID_OPERATION; } else { if (encoder) { if (!msg->findInt32("flac-compression-level", &compressionLevel)) { compressionLevel = 5;// default FLAC compression level } else if (compressionLevel < 0) { ALOGW("compression level %d outside [0..8] range, using 0", compressionLevel); compressionLevel = 0; } else if (compressionLevel > 8) { ALOGW("compression level %d outside [0..8] range, using 8", compressionLevel); compressionLevel = 8; } } err = setupFlacCodec(encoder, numChannels, sampleRate, compressionLevel); } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_RAW)) { int32_t numChannels, sampleRate; if (encoder Loading Loading @@ -1163,6 +1188,34 @@ status_t ACodec::setupG711Codec(bool encoder, int32_t numChannels) { kPortIndexInput, 8000 /* sampleRate */, numChannels); } status_t ACodec::setupFlacCodec( bool encoder, int32_t numChannels, int32_t sampleRate, int32_t compressionLevel) { if (encoder) { OMX_AUDIO_PARAM_FLACTYPE def; InitOMXParams(&def); def.nPortIndex = kPortIndexOutput; // configure compression level status_t err = mOMX->getParameter(mNode, OMX_IndexParamAudioFlac, &def, sizeof(def)); if (err != OK) { ALOGE("setupFlacCodec(): Error %d getting OMX_IndexParamAudioFlac parameter", err); return err; } def.nCompressionLevel = compressionLevel; err = mOMX->setParameter(mNode, OMX_IndexParamAudioFlac, &def, sizeof(def)); if (err != OK) { ALOGE("setupFlacCodec(): Error %d setting OMX_IndexParamAudioFlac parameter", err); return err; } } return setupRawAudioFormat( encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, numChannels); } status_t ACodec::setupRawAudioFormat( OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels) { OMX_PARAM_PORTDEFINITIONTYPE def; Loading
media/libstagefright/OMXCodec.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -1364,6 +1364,8 @@ void OMXCodec::setComponentRole( "video_decoder.vpx", "video_encoder.vpx" }, { MEDIA_MIMETYPE_AUDIO_RAW, "audio_decoder.raw", "audio_encoder.raw" }, { MEDIA_MIMETYPE_AUDIO_FLAC, "audio_decoder.flac", "audio_encoder.flac" }, }; static const size_t kNumMimeToRole = Loading
media/libstagefright/codecs/flac/Android.mk 0 → 100644 +4 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) include $(call all-makefiles-under,$(LOCAL_PATH))
media/libstagefright/codecs/flac/enc/Android.mk 0 → 100644 +21 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ SoftFlacEncoder.cpp LOCAL_C_INCLUDES := \ frameworks/av/media/libstagefright/include \ frameworks/native/include/media/openmax \ external/flac/include LOCAL_SHARED_LIBRARIES := \ libstagefright libstagefright_omx libstagefright_foundation libutils LOCAL_STATIC_LIBRARIES := \ libFLAC \ LOCAL_MODULE := libstagefright_soft_flacenc LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY)