/*
 *
 *    Copyright (c) 2016 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    This document is the property of Nest. It is considered
 *    confidential and proprietary information.
 *
 *    This document may not be reproduced or transmitted in any form,
 *    in whole or in part, without the express written permission of
 *    Nest.
 *
 */

#ifndef NEST_WATERMARK_H_
#define NEST_WATERMARK_H_

#include <stdint.h>
#include <utils/Errors.h>
#include <utils/RefBase.h>

struct ANativeWindowBuffer;

namespace ipcamOverlay {
    class QIPCamOverlay;
    enum class BufferFormat;
}

namespace android {

namespace nest {

class Overlay : public RefBase {
public:
    Overlay(int width, int height);
    ~Overlay();
    status_t enableWatermark();
    status_t disableWatermark();
    void applyOverlay(ANativeWindowBuffer *buf);

private:
    int mWidth;
    int mHeight;
    ipcamOverlay::BufferFormat mFormat;
    ipcamOverlay::QIPCamOverlay *mOverlay;
    uint8_t mWatermarkOverlayId;

    status_t configureWatermark();
};

} // namespace nest

} // namespace android

#endif // NEST_WATERMARK_H_
