213 lines
7.0 KiB
C++
213 lines
7.0 KiB
C++
/*
|
|
* Copyright (C) 2021 Amlogic Corporation.
|
|
*
|
|
* 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 __RENDER_PLUGIN_H__
|
|
#define __RENDER_PLUGIN_H__
|
|
#include "render_common.h"
|
|
|
|
typedef void (*pluginMsgCallback)(void *handle, int msg, void *detail);
|
|
typedef void (*pluginBufferReleaseCallback)(void *handle,void *data);
|
|
typedef void (*pluginBufferDisplayedCallback)(void *handle,void *data);
|
|
typedef void (*pluginBufferDroppedCallback)(void *handle,void *data);
|
|
|
|
typedef struct _PluginCallback {
|
|
pluginMsgCallback doMsgCallback;
|
|
pluginBufferReleaseCallback doBufferReleaseCallback;
|
|
pluginBufferDisplayedCallback doBufferDisplayedCallback;
|
|
pluginBufferDroppedCallback doBufferDroppedCallback;
|
|
} PluginCallback;
|
|
|
|
/**
|
|
* @brief plugin key type
|
|
* it is used by set/get function
|
|
*
|
|
*/
|
|
typedef enum _PluginKey {
|
|
PLUGIN_KEY_WINDOW_SIZE, //value type is PluginRect point
|
|
PLUGIN_KEY_FRAME_SIZE, //value type is PluginFrameSize point
|
|
PLUGIN_KEY_VIDEO_FORMAT, //value type is uint32_t,detail see RenderVideoFormat that is in render_lib.h
|
|
PLUGIN_KEY_VIDEO_PIP, //is pip window, int type of value
|
|
PLUGIN_KEY_VIDEOTUNNEL_ID,//set/get videotunnel instance id when videotunnel plugin is selected
|
|
PLUGIN_KEY_KEEP_LAST_FRAME, //set/get keep last frame when play end ,value type is int, 0 not keep, 1 keep
|
|
PLUGIN_KEY_HIDE_VIDEO, //set/get hide video,it effect immediatialy,value type is int, 0 not hide, 1 hide
|
|
PLUGIN_KEY_FORCE_ASPECT_RATIO, //set/get force pixel aspect ratio,value type is int, 1 is force,0 is not force
|
|
PLUGIN_KEY_SELECT_DISPLAY_OUTPUT,//set/get selected displayt output,value type is int,0 is primary output, 1 is extend output
|
|
PLUGIN_KEY_IMMEDIATELY_OUTPUT, //set/get immediately output video frame to display, 0 is default value off, 1 is on
|
|
PLUGIN_KEY_CROP_FRAME_SIZE, //set/get crop frame size,value type is PluginRect
|
|
PLUGIN_KEY_PIXEL_ASPECT_RATIO, //set/get pixel aspect ratio,value type is double
|
|
PLUGIN_KEY_CURRENT_OUTPUT, //set/get signal output,value type is int
|
|
PLUGIN_KEY_VIDEO_FRAME_RATE, //set/get video frame rate,value type is RenderFraction
|
|
PLUGIN_KEY_KEEP_LAST_FRAME_ON_FLUSH, //set/get keep last frame when seeking,value type is int, 0 not keep, 1 keep
|
|
PLUGIN_KEY_ZORDER, //set/get zorder of video plane,value type is int
|
|
PLUGIN_KEY_ROTATE_VIDEO, //set/get video rotate,value type is int,rotate from 0 to 360
|
|
PLUGIN_KEY_VIDEO_HWC_LATENCY, //get video hwc latency from plugin
|
|
PLUGIN_KEY_VIDEO_STEP_DISPLAY_FRAME, //show step frame,value type is int,1 on, 0 off
|
|
PLUGIN_KEY_VIDEO_ON_OSD, //display video on osd,value type is int,1:osd, 0:video plane,default 0
|
|
PLUGIN_KEY_PROVIDE_VSYNC,//check if plugin provides vsync,return 1 if provided,otherwise return 0
|
|
} PluginKey;
|
|
|
|
/**
|
|
* render plugin interface
|
|
* api sequence:
|
|
* 1.new RenderPlugin
|
|
* 2.plugin->init
|
|
* 3.plugin->setuserData
|
|
* 4.plugin->openDisplay
|
|
* 5.plugin->openWindow
|
|
* 6.plugin->set
|
|
* 7.plugin->displayFrame
|
|
* ......
|
|
* after running ,stop plugin
|
|
* 8.plugin->closeWindow
|
|
* 9.plugin->closeDisplay
|
|
* 10.plugin->release
|
|
* 11.delete RenderPlugin
|
|
*
|
|
*/
|
|
class RenderPlugin {
|
|
public:
|
|
RenderPlugin() {};
|
|
virtual ~RenderPlugin() {};
|
|
/**
|
|
* @brief init render plugin
|
|
*
|
|
*/
|
|
virtual void init() = 0;
|
|
/**
|
|
* @brief release render plugin
|
|
*
|
|
*/
|
|
virtual void release() = 0;
|
|
/**
|
|
* @brief register callback to plugin
|
|
*
|
|
* @param userData user data
|
|
* @param callback user callback function
|
|
*/
|
|
virtual void setCallback(void *userData, PluginCallback *callback) = 0;
|
|
/**
|
|
* @brief open display from compositor
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int openDisplay() = 0;
|
|
/**
|
|
* @brief open window from compositor
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int openWindow() = 0;
|
|
/**
|
|
* @brief prepare RenderBuffer before displaying frame
|
|
*
|
|
* @param buffer video frame buffer
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int prepareFrame(RenderBuffer *buffer) = 0;
|
|
/**
|
|
* @brief sending a video frame to compositor
|
|
*
|
|
* @param buffer video frame buffer
|
|
* @param displayTime the frame render realtime
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int displayFrame(RenderBuffer *buffer, int64_t displayTime) = 0;
|
|
/**
|
|
* @brief flush buffers those obtained by plugin
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int flush() = 0;
|
|
/**
|
|
* @brief pause plugin
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int pause() = 0;
|
|
/**
|
|
* @brief resume plugin
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int resume() = 0;
|
|
/**
|
|
* @brief close display
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int closeDisplay() = 0;
|
|
/**
|
|
* @brief close window
|
|
*
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int closeWindow() = 0;
|
|
/**
|
|
* @brief get property from plugin
|
|
* the value must map the key type,the detail please see
|
|
* enum _PluginKey
|
|
*
|
|
* @param key property key
|
|
* @param value property value
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int getValue(PluginKey key, void *value) = 0;
|
|
/**
|
|
* @brief set property to plugin
|
|
* the value must map the key type,refer to PluginKey
|
|
*
|
|
* @param key property key
|
|
* @param value property value
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int setValue(PluginKey key, void *value) = 0;
|
|
|
|
/**
|
|
* @brief notify plugin that frame released by render core
|
|
*
|
|
* @param buffer video frame buffer
|
|
* @return 0 success,other value if failure
|
|
*/
|
|
virtual int unexpectReleaseFrame(RenderBuffer *buffer) = 0;
|
|
|
|
/**
|
|
* @brief get vsync from plugin if plugin can provide vsync
|
|
*
|
|
* @return true success, false if failure
|
|
*/
|
|
virtual bool getDisplayVsyncAndPeriod(uint64_t *vsyncTimestamp, uint64_t *vsyncPeriod) = 0;
|
|
};
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* make a render lib plugin instance
|
|
* @param id instance id
|
|
* @return the pointer to render lib plugin instance
|
|
*/
|
|
void *makePluginInstance(int id);
|
|
|
|
/**
|
|
* destroy render lib plugin instance that created by makePluginInstance
|
|
* @param the handle point of video render plugin instance
|
|
*/
|
|
void destroyPluginInstance(void *);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /*__RENDER_PLUGIN_H__*/ |