Unity получает SDL и собирает необработанные данные RGB.C#

Место общения программистов C#
Ответить
Anonymous
 Unity получает SDL и собирает необработанные данные RGB.

Сообщение Anonymous »

При повторной разработке с Unity я столкнулся с проблемой. Мне нужно было собрать видеопотоки с микроскопа, и я использовал библиотеку SDL для получения данныхframeData. Однако я не знал, как анализировать данные видеопотока в FrameData, чтобы создавать видео, которые можно было бы использовать в Unity.
открытый класс CameraStreamManager : MonoBehaviour
{

Код: Выделить всё

private Thread cameraThread;
private bool isRunning = false;
private SLcamNet.NetCamera _camera;
private Texture2D videoTexture;

public RawImage videoImage;

private List _infos;
private CameraInfo _cameraInfo;
private SDLPanel sdlPanel;
private Task _task;

private int width = 1920;
private int height = 1080;
private bool frameReady = false;
public void InitializeCamera()
{
SLcamNet.NetCamera.InitNet();
_infos = SLcamNet.NetCamera.SearchAvailableCameras();
if (_infos.Count < 1)
{
Thread.Sleep(100);
_infos = SLcamNet.NetCamera.SearchAvailableCameras();
}

}

public void OpenCamera()
{
sdlPanel?.Dispose();
sdlPanel = new SDLPanel
{
Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right
};

Debug.LogError("_infos>>>>  " + _infos.Count);
if (_infos.Count < 1)
{
Thread.Sleep(100);
_infos = SLcamNet.NetCamera.SearchAvailableCameras();
return;
}

CameraSettings settings = new CameraSettings
{
netInfo = _infos[0],
resolution = new CameraResolution(1920, 1080),
streamFormat = StreamFormat.kMJPEG,
pixFormat = PixFormat.kRGBA8888,
rcMode = "cbr",
quality = "high",
frameRate = 25,
bitrate = 86000,
keyFrameInterval = 90
};
settings.netInfo.Username = "admin";
settings.netInfo.Password = "123456";

_camera = SLcamNet.NetCamera.Create(settings.netInfo.Model);
_camera.SetCameraSettings(settings);
_camera.Login();
_cameraInfo = _camera.GetNetCameraAllInfo();
_camera.Open();

isRunning = true;
_task = Task.Run(() => StartCameraCapture());
}

private void StartCameraCapture()
{
Task.Run(() =>
{
Thread.Sleep(500);
IntPtr frameDataPtr = IntPtr.Zero;

while (isRunning)
{
try
{
if (!_camera.GetVideoFrameData(ref frameDataPtr))
continue;

SLcamNet.l_md_data_t frameData = SLcamNet.l_md_data_t.FromIntPtr(frameDataPtr);
Debug.LogError("frameData>>>>>" + frameData.p_rgb);

}
catch (Exception ex)
{
Debug.LogError($"Error in StartCameraCapture: {ex.Message}");
}
}
});
}

private void OnApplicationQuit()
{
isRunning = false;
_task = null;

if (sdlPanel != null)
{
sdlPanel.Dispose(true);
sdlPanel = null;
}

_camera?.Close();
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... b-raw-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»