/***************************************************************************
 *
 * Copyright (c) 2019 Baidu.com, Inc. All Rights Reserved
 *
 * @author: sunjian
 *
 ***************************************************************************/

#pragma once
#include <stdint.h>
#include "BaiduRtcCommonDefine.h"


/*
 * 视频数据Observer接口定义
 *
 * @discuss 当enable 外部渲染后，需要开发者实现该视频帧监听接口，视频数据会通过onFrame接口抛出来；
 *          sdk 会通过getInputBuffer获取用户分配的buffer, 获取buffer后会把视频数据copy进buffer,
 *          并通过onFrame callback 给用户
 *
 **/
class BAIDU_RTC_EXPORT_API IVideoFrameObserver {
public:
	/*
	 * 视频数据到达接
	 *
	 * @param img, 视频数据
	 * @discuss 当有视频数据到来时，该接口会Callback, img 中携带的是视频数据；
	 *
	 **/
	virtual void onFrame(uint8_t* img) = 0;

	/*
	 * 获取用户分配的buffer
	 * 
	 * @param width, 视频宽；
	 * @param height, 视频高；
	 * @param format, 视频format, 目前支持ARGB/YUV420p(I420)
	 *
	 **/
	virtual uint8_t* getInputBuffer(int width, int height, VideoColorFormat format) = 0;

    /*
     * 获取observer id
     *
     * @return observer id
     * @discuss 获取observer id ,  observer id 与 streaming id 建立一一对应
     *
     **/
    virtual long long getObserverId() = 0;

	virtual ~IVideoFrameObserver() {}
};