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

Commit cf09e292 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android Git Automerger
Browse files

am 2d9ded1d: am d607e5a5: Merge "Fixes for GSM decoder"

* commit '2d9ded1d':
  Fixes for GSM decoder
parents a7c1df10 2d9ded1d
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ static void InitOMXParams(T *params) {
    params->nVersion.s.nStep = 0;
}

// Microsoft WAV GSM encoding packs two GSM frames into 65 bytes.
static const int kMSGSMFrameSize = 65;

SoftGSM::SoftGSM(
        const char *name,
        const OMX_CALLBACKTYPE *callbacks,
@@ -64,7 +67,7 @@ void SoftGSM::initPorts() {
    def.eDir = OMX_DirInput;
    def.nBufferCountMin = kNumBuffers;
    def.nBufferCountActual = def.nBufferCountMin;
    def.nBufferSize = sizeof(gsm_frame);
    def.nBufferSize = 1024 / kMSGSMFrameSize * kMSGSMFrameSize;
    def.bEnabled = OMX_TRUE;
    def.bPopulated = OMX_FALSE;
    def.eDomain = OMX_PortDomainAudio;
@@ -207,8 +210,8 @@ void SoftGSM::onQueueFilled(OMX_U32 /* portIndex */) {
            mSignalledError = true;
        }

        if(((inHeader->nFilledLen / 65) * 65) != inHeader->nFilledLen) {
            ALOGE("input buffer not multiple of 65 (%d).", inHeader->nFilledLen);
        if(((inHeader->nFilledLen / kMSGSMFrameSize) * kMSGSMFrameSize) != inHeader->nFilledLen) {
            ALOGE("input buffer not multiple of %d (%d).", kMSGSMFrameSize, inHeader->nFilledLen);
            notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
            mSignalledError = true;
        }
@@ -258,6 +261,25 @@ int SoftGSM::DecodeGSM(gsm handle,
    return ret;
}

void SoftGSM::onPortFlushCompleted(OMX_U32 portIndex) {
    if (portIndex == 0) {
        gsm_destroy(mGsm);
        mGsm = gsm_create();
        int msopt = 1;
        gsm_option(mGsm, GSM_OPT_WAV49, &msopt);
    }
}

void SoftGSM::onReset() {
    gsm_destroy(mGsm);
    mGsm = gsm_create();
    int msopt = 1;
    gsm_option(mGsm, GSM_OPT_WAV49, &msopt);
    mSignalledError = false;
}




}  // namespace android

+3 −0
Original line number Diff line number Diff line
@@ -43,6 +43,9 @@ protected:

    virtual void onQueueFilled(OMX_U32 portIndex);

    virtual void onPortFlushCompleted(OMX_U32 portIndex);
    virtual void onReset();

private:
    enum {
        kNumBuffers = 4,