ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers baidu_recorder.h Source File

baidu_recorder.h

00001 // Copyright 2017 Baidu Inc. All Rights Reserved.
00002 // Author: tai xiurong (taixiurong@baidu.com)
00003 //
00004 // Description:
00005 
00006 #ifndef BAIDU_IOT_TINYDU_IOT_OS_SRC_RECORDER_BAIDU_OS_RECORDER_H
00007 #define BAIDU_IOT_TINYDU_IOT_OS_SRC_RECORDER_BAIDU_OS_RECORDER_H
00008 
00009 #include <mbed.h>
00010 
00011 #include "baidu_ca_adapter.h"
00012 
00013 // #define O_BUFFER_LEN        (800)
00014 // #define I_BUFFER_LEN        ((O_BUFFER_LEN - 1) / 4 * 3)
00015 
00016 //#define REC_LOG(_fmt, ...)      //LOG("[REC]"_fmt, ##__VA_ARGS__)
00017 
00018 namespace duer {
00019 static const unsigned int s_o_buffer_len = 800;
00020 static const unsigned int s_i_buffer_len = (s_o_buffer_len -1)/4 *3;
00021 class Recorder {
00022 public:
00023 
00024     class IPlugin {
00025     public:
00026 
00027         virtual int start_record() = 0;
00028 
00029         virtual size_t read(void* data, size_t size) = 0;
00030 
00031         virtual int stop_record() = 0;
00032 
00033         virtual ~IPlugin() = 0;
00034 
00035     };
00036 
00037     class IListener {
00038     public:
00039 
00040         virtual int on_start() = 0;
00041 
00042         virtual int on_resume() = 0;
00043 
00044         virtual int on_data(const void* data, size_t size) = 0;
00045 
00046         virtual int on_pause() = 0;
00047 
00048         virtual int on_stop() = 0;
00049 
00050         virtual ~IListener() = 0;
00051 
00052     };
00053 
00054     class MiddleWare: public IListener {
00055     public:
00056 
00057         MiddleWare();
00058 
00059         virtual ~MiddleWare();
00060 
00061         int set_listener(IListener* listener);
00062 
00063     protected:
00064 
00065         int process_start();
00066 
00067         int process_resume();
00068 
00069         int process_data(const void* data, size_t size);
00070 
00071         int process_pause();
00072 
00073         int process_stop();
00074 
00075     private:
00076 
00077         IListener* _listener;
00078     };
00079 
00080     Recorder(IPlugin* plugin, size_t  size, void* data);
00081     Recorder(IPlugin* plugin, size_t  size);
00082     Recorder(IPlugin* plugin);
00083 
00084     virtual ~Recorder();
00085 
00086     int start();
00087 
00088     int resume();
00089 
00090     int pause();
00091 
00092     int stop();
00093 
00094     int set_listener(IListener* listener);
00095 
00096     static void add_drop_invalid_record();
00097 
00098 private:
00099     void run();
00100     IPlugin*            _plugin;
00101     IListener*          _listener;
00102     rtos::Thread        _thread;
00103     int                 _state;
00104     size_t              _capacity;
00105     void*               _buff;
00106 
00107 };
00108 
00109 }//duer
00110 
00111 #endif // BAIDU_IOT_TINYDU_IOT_OS_SRC_RECORDER_BAIDU_OS_RECORDER_H