C++程序  |  94行  |  2.79 KB

/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */


#ifndef CTSAUDIO_TASKPROCESS_H
#define CTSAUDIO_TASKPROCESS_H

#include <vector>

#include <UniquePtr.h>
#include <utils/StrongPointer.h>

#include "audio/Buffer.h"
#include "TaskGeneric.h"
#include "TaskCase.h"
#include "BuiltinProcessing.h"
#include "SignalProcessingInterface.h"

class TaskProcess: public TaskGeneric {
public:
    TaskProcess();
    virtual ~TaskProcess();
    virtual TaskGeneric::ExecutionResult run();
    virtual bool parseAttribute(const android::String8& name, const android::String8& value);
private:
    TaskGeneric::ExecutionResult doRun(bool builtin);

    class Param;
    bool parseParams(std::vector<Param>& list, const char* str, bool isInput);
    //typedef necessary to prevent compiler's confusion
    typedef void* void_ptr;
    typedef UniquePtr<TaskCase::Value> UniqueValue;
    typedef UniquePtr<android::sp<Buffer> > UniqueBuffer;
    /// construct Buffers and Values for calling builtin functions.
    /// all constructed stuffs automatically deleted by the passed UniquePtrs
    bool prepareParams(std::vector<TaskProcess::Param>& list,
            const bool* inputTypes,
            UniquePtr<void_ptr, DefaultDelete<void_ptr[]> > & ptrs,
            UniquePtr<UniqueValue, DefaultDelete<UniqueValue[]> > & values,
            UniquePtr<UniqueBuffer, DefaultDelete<UniqueBuffer[]> > & buffers,
            bool isInput);

private:
    enum ProcessType {
        EBuiltin,
        EScript
    };
    ProcessType mType;
    android::String8 mName; // buit-in function or script name

    enum ParamType {
        EId,
        EVal,
        EConst
    };
    class Param {
    public:
        Param(ParamType type, android::String8& string);
        Param(TaskCase::Value& val);
        ParamType getType();
        android::String8& getParamString();
        TaskCase::Value& getValue();
        TaskCase::Value* getValuePtr();
        inline bool isIdType() {
            return (mType == EId);
        }
    private:
        ParamType mType;
        android::String8 mString;
        TaskCase::Value mValue;
    };

    std::vector<Param> mInput;
    std::vector<Param> mOutput;
    BuiltinProcessing mBuiltin;
    UniquePtr<SignalProcessingInterface> mSp;
};


#endif // CTSAUDIO_TASKPROCESS_H