MAME.Core/MAME.Unity/Assets/Script/UMAME/UniInterface/UniVideoPlayer.cs

78 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using MAME.Core.run_interface;
using System;
using UnityEngine;
using UnityEngine.UI;
public class UniVideoPlayer : MonoBehaviour, IVideoPlayer
{
[SerializeField]
private int mWidth;
[SerializeField]
private int mHeight;
[SerializeField]
private int mDataLenght;
[SerializeField]
private Texture2D m_rawBufferWarper;
[SerializeField]
private RawImage m_drawCanvas;
[SerializeField]
private RectTransform m_drawCanvasrect;
int[] mFrameData;
IntPtr mFrameDataPtr;
private TimeSpan lastElapsed;
public double videoFPS { get; private set; }
bool bInit = false;
private void Awake()
{
m_drawCanvas = GameObject.Find("GameRawImage").GetComponent<RawImage>();
m_drawCanvasrect = m_drawCanvas.GetComponent<RectTransform>();
}
public void Initialize(int width, int height,IntPtr framePtr)
{
m_drawCanvas.color = Color.white;
if (m_rawBufferWarper == null || mWidth != width || mHeight != height)
{
mWidth = width;
mHeight = height;
mDataLenght = width * height * 4;
mFrameData = new int[mWidth * mHeight];
//MAMEÀ´µÄÊÇBGRA32£¬ºÃºÃºÃ
m_rawBufferWarper = new Texture2D(mWidth, mHeight, TextureFormat.BGRA32, false);
m_rawBufferWarper.filterMode = FilterMode.Point;
}
mFrameDataPtr = framePtr;
m_drawCanvas.texture = m_rawBufferWarper;
bInit = true;
float targetWidth = ((float)mWidth / mHeight) * m_drawCanvasrect.rect.height ;
m_drawCanvasrect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, targetWidth);
}
public void StopVideo()
{
bInit = false;
m_drawCanvas.color = new Color(0,0,0,0);
}
void Update()
{
if (!bInit) return;
m_rawBufferWarper.LoadRawTextureData(mFrameDataPtr, mDataLenght);
m_rawBufferWarper.Apply();
}
public void SubmitVideo(int[] data)
{
var current = UMAME.sw.Elapsed;
var delta = current - lastElapsed;
lastElapsed = current;
videoFPS = 1d / delta.TotalSeconds;
mFrameData = data;
}
}