Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cc7de2b authored by Ray Essick's avatar Ray Essick Committed by Android (Google) Code Review
Browse files

Merge "Plumbing for OPUS encoding."

parents 59c920b7 df27b04b
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -48,7 +48,8 @@ const MediaProfiles::NameToTagMap MediaProfiles::sAudioEncoderNameMap[] = {
    {"amrwb",  AUDIO_ENCODER_AMR_WB},
    {"amrwb",  AUDIO_ENCODER_AMR_WB},
    {"aac",    AUDIO_ENCODER_AAC},
    {"aac",    AUDIO_ENCODER_AAC},
    {"heaac",  AUDIO_ENCODER_HE_AAC},
    {"heaac",  AUDIO_ENCODER_HE_AAC},
    {"aaceld", AUDIO_ENCODER_AAC_ELD}
    {"aaceld", AUDIO_ENCODER_AAC_ELD}, 
    {"opus",   AUDIO_ENCODER_OPUS}
};
};


const MediaProfiles::NameToTagMap MediaProfiles::sFileFormatMap[] = {
const MediaProfiles::NameToTagMap MediaProfiles::sFileFormatMap[] = {
+5 −1
Original line number Original line Diff line number Diff line
@@ -81,6 +81,9 @@ enum output_format {
    /* HEIC data in a HEIF container */
    /* HEIC data in a HEIF container */
    OUTPUT_FORMAT_HEIF = 10,
    OUTPUT_FORMAT_HEIF = 10,


    /* Opus data in a OGG container */
    OUTPUT_FORMAT_OGG = 11,

    OUTPUT_FORMAT_LIST_END // must be last - used to validate format type
    OUTPUT_FORMAT_LIST_END // must be last - used to validate format type
};
};


@@ -92,6 +95,7 @@ enum audio_encoder {
    AUDIO_ENCODER_HE_AAC = 4,
    AUDIO_ENCODER_HE_AAC = 4,
    AUDIO_ENCODER_AAC_ELD = 5,
    AUDIO_ENCODER_AAC_ELD = 5,
    AUDIO_ENCODER_VORBIS = 6,
    AUDIO_ENCODER_VORBIS = 6,
    AUDIO_ENCODER_OPUS = 7,


    AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type
    AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type
};
};
+28 −12
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MediaCodecSource.h>
#include <media/stagefright/MediaCodecSource.h>
#include <media/stagefright/OggWriter.h>
#include <media/stagefright/PersistentSurface.h>
#include <media/stagefright/PersistentSurface.h>
#include <media/MediaProfiles.h>
#include <media/MediaProfiles.h>
#include <camera/CameraParameters.h>
#include <camera/CameraParameters.h>
@@ -948,6 +949,10 @@ status_t StagefrightRecorder::prepareInternal() {
            status = setupMPEG2TSRecording();
            status = setupMPEG2TSRecording();
            break;
            break;


        case OUTPUT_FORMAT_OGG:
            status = setupOggRecording();
            break;

        default:
        default:
            ALOGE("Unsupported output file format: %d", mOutputFormat);
            ALOGE("Unsupported output file format: %d", mOutputFormat);
            status = UNKNOWN_ERROR;
            status = UNKNOWN_ERROR;
@@ -1013,6 +1018,7 @@ status_t StagefrightRecorder::start() {
        case OUTPUT_FORMAT_AAC_ADTS:
        case OUTPUT_FORMAT_AAC_ADTS:
        case OUTPUT_FORMAT_RTP_AVP:
        case OUTPUT_FORMAT_RTP_AVP:
        case OUTPUT_FORMAT_MPEG2TS:
        case OUTPUT_FORMAT_MPEG2TS:
        case OUTPUT_FORMAT_OGG:
        {
        {
            sp<MetaData> meta = new MetaData;
            sp<MetaData> meta = new MetaData;
            int64_t startTimeUs = systemTime() / 1000;
            int64_t startTimeUs = systemTime() / 1000;
@@ -1113,6 +1119,9 @@ sp<MediaCodecSource> StagefrightRecorder::createAudioSource() {
            format->setString("mime", MEDIA_MIMETYPE_AUDIO_AAC);
            format->setString("mime", MEDIA_MIMETYPE_AUDIO_AAC);
            format->setInt32("aac-profile", OMX_AUDIO_AACObjectELD);
            format->setInt32("aac-profile", OMX_AUDIO_AACObjectELD);
            break;
            break;
        case AUDIO_ENCODER_OPUS:
            format->setString("mime", MEDIA_MIMETYPE_AUDIO_OPUS);
            break;


        default:
        default:
            ALOGE("Unknown audio encoder: %d", mAudioEncoder);
            ALOGE("Unknown audio encoder: %d", mAudioEncoder);
@@ -1169,6 +1178,13 @@ status_t StagefrightRecorder::setupAACRecording() {
    return setupRawAudioRecording();
    return setupRawAudioRecording();
}
}


status_t StagefrightRecorder::setupOggRecording() {
    CHECK_EQ(mOutputFormat, OUTPUT_FORMAT_OGG);

    mWriter = new OggWriter(mOutputFd);
    return setupRawAudioRecording();
}

status_t StagefrightRecorder::setupAMRRecording() {
status_t StagefrightRecorder::setupAMRRecording() {
    CHECK(mOutputFormat == OUTPUT_FORMAT_AMR_NB ||
    CHECK(mOutputFormat == OUTPUT_FORMAT_AMR_NB ||
          mOutputFormat == OUTPUT_FORMAT_AMR_WB);
          mOutputFormat == OUTPUT_FORMAT_AMR_WB);
@@ -1813,6 +1829,7 @@ status_t StagefrightRecorder::setupAudioEncoder(const sp<MediaWriter>& writer) {
        case AUDIO_ENCODER_AAC:
        case AUDIO_ENCODER_AAC:
        case AUDIO_ENCODER_HE_AAC:
        case AUDIO_ENCODER_HE_AAC:
        case AUDIO_ENCODER_AAC_ELD:
        case AUDIO_ENCODER_AAC_ELD:
        case AUDIO_ENCODER_OPUS:
            break;
            break;


        default:
        default:
@@ -1863,19 +1880,18 @@ status_t StagefrightRecorder::setupMPEG4orWEBMRecording() {
        mTotalBitRate += mVideoBitRate;
        mTotalBitRate += mVideoBitRate;
    }
    }


    if (mOutputFormat != OUTPUT_FORMAT_WEBM) {
    // Audio source is added at the end if it exists.
    // Audio source is added at the end if it exists.
    // This help make sure that the "recoding" sound is suppressed for
    // This help make sure that the "recoding" sound is suppressed for
    // camcorder applications in the recorded files.
    // camcorder applications in the recorded files.
        // TODO Audio source is currently unsupported for webm output; vorbis encoder needed.
    // disable audio for time lapse recording
    // disable audio for time lapse recording
        bool disableAudio = mCaptureFpsEnable && mCaptureFps < mFrameRate;
    const bool disableAudio = mCaptureFpsEnable && mCaptureFps < mFrameRate;
    if (!disableAudio && mAudioSource != AUDIO_SOURCE_CNT) {
    if (!disableAudio && mAudioSource != AUDIO_SOURCE_CNT) {
        err = setupAudioEncoder(writer);
        err = setupAudioEncoder(writer);
        if (err != OK) return err;
        if (err != OK) return err;
        mTotalBitRate += mAudioBitRate;
        mTotalBitRate += mAudioBitRate;
    }
    }


    if (mOutputFormat != OUTPUT_FORMAT_WEBM) {
        if (mCaptureFpsEnable) {
        if (mCaptureFpsEnable) {
            mp4writer->setCaptureRate(mCaptureFps);
            mp4writer->setCaptureRate(mCaptureFps);
        }
        }
+1 −0
Original line number Original line Diff line number Diff line
@@ -166,6 +166,7 @@ private:
    void setupMPEG4orWEBMMetaData(sp<MetaData> *meta);
    void setupMPEG4orWEBMMetaData(sp<MetaData> *meta);
    status_t setupAMRRecording();
    status_t setupAMRRecording();
    status_t setupAACRecording();
    status_t setupAACRecording();
    status_t setupOggRecording();
    status_t setupRawAudioRecording();
    status_t setupRawAudioRecording();
    status_t setupRTPRecording();
    status_t setupRTPRecording();
    status_t setupMPEG2TSRecording();
    status_t setupMPEG2TSRecording();
+3 −0
Original line number Original line Diff line number Diff line
@@ -120,6 +120,7 @@ cc_library_shared {
        "MediaMuxer.cpp",
        "MediaMuxer.cpp",
        "NuCachedSource2.cpp",
        "NuCachedSource2.cpp",
        "NuMediaExtractor.cpp",
        "NuMediaExtractor.cpp",
        "OggWriter.cpp",
        "OMXClient.cpp",
        "OMXClient.cpp",
        "OmxInfoBuilder.cpp",
        "OmxInfoBuilder.cpp",
        "RemoteMediaExtractor.cpp",
        "RemoteMediaExtractor.cpp",
@@ -159,6 +160,7 @@ cc_library_shared {
        "libstagefright_codecbase",
        "libstagefright_codecbase",
        "libstagefright_foundation",
        "libstagefright_foundation",
        "libstagefright_omx_utils",
        "libstagefright_omx_utils",
        "libstagefright_opus_common",
        "libstagefright_xmlparser",
        "libstagefright_xmlparser",
        "libRScpp",
        "libRScpp",
        "libhidlallocatorutils",
        "libhidlallocatorutils",
@@ -179,6 +181,7 @@ cc_library_shared {
        "libstagefright_webm",
        "libstagefright_webm",
        "libstagefright_timedtext",
        "libstagefright_timedtext",
        "libvpx",
        "libvpx",
        "libogg",
        "libwebm",
        "libwebm",
        "libstagefright_esds",
        "libstagefright_esds",
        "libstagefright_id3",
        "libstagefright_id3",
Loading