/***************************************************************************************
 *
 *  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 *
 *  By downloading, copying, installing or using the software you agree to this license.
 *  If you do not agree to this license, do not download, install, 
 *  copy or use the software.
 *
 *  Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
 *
 *  Redistribution and use in binary forms, with or without modification, are permitted.
 *
 *  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 _GLES_INPUT_H_
#define _GLES_INPUT_H_

#include "sys_inc.h"
#include <SLES/OpenSLES.h>
#ifdef ANDROID
#include <SLES/OpenSLES_Android.h>
#endif

#define NUM_BUFFERS 2

typedef void (*GlesInputCB)(uint8 * pdata, int len, void * puser);


class GlesInput
{
public:
	GlesInput();
	~GlesInput();

	bool start(int samplerete);
	void stop();
	void setCallback(GlesInputCB cb, void * puser);
	
	void setBufferSize(int value);
	int  bufferSize() const;	
	void processBuffer();
	
private:
	bool startRecording(int samplerete);
	void stopRecording();
	

private:
	SLObjectItf m_recorderObject;
    SLRecordItf m_recorder;
#ifdef ANDROID
    SLuint32 	m_recorderPreset;
    SLAndroidSimpleBufferQueueItf m_bufferQueue;
#else
    SLBufferQueueItf m_bufferQueue;
#endif

	int 	    m_bufferSize;
	uint8     * m_buffers[NUM_BUFFERS];
	int 	    m_currentBuffer;

	GlesInputCB m_pCallback;
	void      * m_pUserdata;
};

#endif

