Blame include/freerdp/channels/video.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * Video Optimized Remoting Virtual Channel Extension
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2018 David Fort <contact@hardening-consulting.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_CHANNEL_VIDEO_H
Packit 1fb8d4
#define FREERDP_CHANNEL_VIDEO_H
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/wtypes.h>
Packit 1fb8d4
#include <freerdp/types.h>
Packit 1fb8d4
Packit 1fb8d4
#define VIDEO_CONTROL_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::Video::Control::v08.01"
Packit 1fb8d4
#define VIDEO_DATA_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::Video::Data::v08.01"
Packit 1fb8d4
Packit 1fb8d4
/** @brief TSNM packet type */
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	TSMM_PACKET_TYPE_PRESENTATION_REQUEST	= 1,
Packit 1fb8d4
	TSMM_PACKET_TYPE_PRESENTATION_RESPONSE	= 2,
Packit 1fb8d4
	TSMM_PACKET_TYPE_CLIENT_NOTIFICATION	= 3,
Packit 1fb8d4
	TSMM_PACKET_TYPE_VIDEO_DATA				= 4
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief TSMM_PRESENTATION_REQUEST commands */
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	TSMM_START_PRESENTATION = 1,
Packit 1fb8d4
	TSMM_STOP_PRESENTATION	= 2
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief presentation request struct */
Packit 1fb8d4
struct _TSMM_PRESENTATION_REQUEST
Packit 1fb8d4
{
Packit 1fb8d4
	BYTE PresentationId;
Packit 1fb8d4
	BYTE Version;
Packit 1fb8d4
	BYTE Command;
Packit 1fb8d4
	BYTE FrameRate;
Packit 1fb8d4
	UINT32 SourceWidth, SourceHeight;
Packit 1fb8d4
	UINT32 ScaledWidth, ScaledHeight;
Packit 1fb8d4
	UINT64 hnsTimestampOffset;
Packit 1fb8d4
	UINT64 GeometryMappingId;
Packit 1fb8d4
	BYTE VideoSubtypeId[16];
Packit 1fb8d4
	UINT32 cbExtra;
Packit 1fb8d4
	BYTE *pExtraData;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _TSMM_PRESENTATION_REQUEST TSMM_PRESENTATION_REQUEST;
Packit 1fb8d4
Packit 1fb8d4
/** @brief response to a TSMM_PRESENTATION_REQUEST */
Packit 1fb8d4
struct _TSMM_PRESENTATION_RESPONSE
Packit 1fb8d4
{
Packit 1fb8d4
	BYTE PresentationId;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _TSMM_PRESENTATION_RESPONSE TSMM_PRESENTATION_RESPONSE;
Packit 1fb8d4
Packit 1fb8d4
/** @brief TSMM_VIDEO_DATA flags */
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	TSMM_VIDEO_DATA_FLAG_HAS_TIMESTAMPS	= 0x01,
Packit 1fb8d4
	TSMM_VIDEO_DATA_FLAG_KEYFRAME		= 0x02,
Packit 1fb8d4
	TSMM_VIDEO_DATA_FLAG_NEW_FRAMERATE	= 0x04
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief a video data packet */
Packit 1fb8d4
struct _TSMM_VIDEO_DATA
Packit 1fb8d4
{
Packit 1fb8d4
	BYTE PresentationId;
Packit 1fb8d4
	BYTE Version;
Packit 1fb8d4
	BYTE Flags;
Packit 1fb8d4
	UINT64 hnsTimestamp;
Packit 1fb8d4
	UINT64 hnsDuration;
Packit 1fb8d4
	UINT16 CurrentPacketIndex;
Packit 1fb8d4
	UINT16 PacketsInSample;
Packit 1fb8d4
	UINT32 SampleNumber;
Packit 1fb8d4
	UINT32 cbSample;
Packit 1fb8d4
	BYTE *pSample;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _TSMM_VIDEO_DATA TSMM_VIDEO_DATA;
Packit 1fb8d4
Packit 1fb8d4
/** @brief values for NotificationType in TSMM_CLIENT_NOTIFICATION */
Packit 1fb8d4
enum
Packit 1fb8d4
{
Packit 1fb8d4
	TSMM_CLIENT_NOTIFICATION_TYPE_NETWORK_ERROR = 1,
Packit 1fb8d4
	TSMM_CLIENT_NOTIFICATION_TYPE_FRAMERATE_OVERRIDE = 2
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief struct used when NotificationType is FRAMERATE_OVERRIDE */
Packit 1fb8d4
struct _TSMM_CLIENT_NOTIFICATION_FRAMERATE_OVERRIDE
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 Flags;
Packit 1fb8d4
	UINT32 DesiredFrameRate;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _TSMM_CLIENT_NOTIFICATION_FRAMERATE_OVERRIDE TSMM_CLIENT_NOTIFICATION_FRAMERATE_OVERRIDE;
Packit 1fb8d4
Packit 1fb8d4
/** @brief a client to server notification struct */
Packit 1fb8d4
struct _TSMM_CLIENT_NOTIFICATION
Packit 1fb8d4
{
Packit 1fb8d4
	BYTE PresentationId;
Packit 1fb8d4
	BYTE NotificationType;
Packit 1fb8d4
	TSMM_CLIENT_NOTIFICATION_FRAMERATE_OVERRIDE FramerateOverride;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _TSMM_CLIENT_NOTIFICATION TSMM_CLIENT_NOTIFICATION;
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_CHANNEL_VIDEO_H */