VirtualBox

source: vbox/trunk/src/VBox/Main/src-client/VideoRec.h@ 73768

Last change on this file since 73768 was 72015, checked in by vboxsync, 6 years ago

VideoRec/Main: Simplified recoding state checking by only using the IMachine::VideoCaptureEnabled getter (nit).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mergeinfo set to (toggle deleted branches)
    /branches/VBox-3.0/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h58652,​70973
    /branches/VBox-3.2/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h66309,​66318
    /branches/VBox-4.0/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h70873
    /branches/VBox-4.1/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h74233
    /branches/VBox-4.2/src/VBox/Main/src-client/VideoRec.h91503-91504,​91506-91508,​91510,​91514-91515,​91521
    /branches/VBox-4.3/src/VBox/Main/src-client/VideoRec.h91223
    /branches/VBox-4.3/trunk/src/VBox/Main/src-client/VideoRec.h91223
    /branches/dsen/gui/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h79076-79078,​79089,​79109-79110,​79112-79113,​79127-79130,​79134,​79141,​79151,​79155,​79157-79159,​79193,​79197
    /branches/dsen/gui2/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h79224,​79228,​79233,​79235,​79258,​79262-79263,​79273,​79341,​79345,​79354,​79357,​79387-79388,​79559-79569,​79572-79573,​79578,​79581-79582,​79590-79591,​79598-79599,​79602-79603,​79605-79606,​79632,​79635,​79637,​79644
    /branches/dsen/gui3/src/VBox/Frontends/VBoxHeadless/VideoCapture/EncodeAndWrite.h79645-79692
File size: 5.4 KB
RevLine 
[45841]1/* $Id: VideoRec.h 72015 2018-04-25 13:31:43Z vboxsync $ */
2/** @file
3 * Encodes the screen content in VPX format.
4 */
5
6/*
[65173]7 * Copyright (C) 2012-2017 Oracle Corporation
[45841]8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ____H_VIDEOREC
19#define ____H_VIDEOREC
20
[68798]21#include <VBox/com/array.h>
22
[45841]23struct VIDEORECCONTEXT;
24typedef struct VIDEORECCONTEXT *PVIDEORECCONTEXT;
25
[45950]26struct VIDEORECSTREAM;
27typedef struct VIDEORECSTREAM *PVIDEORECSTREAM;
28
[68798]29/**
30 * Enumeration for video recording destinations.
31 */
32typedef enum VIDEORECDEST
33{
34 /** Invalid destination, do not use. */
35 VIDEORECDEST_INVALID = 0,
36 /** Write to a file. */
37 VIDEORECDEST_FILE = 1
38} VIDEORECDEST;
39
40/**
41 * Enumeration for definining a video / audio
42 * profile setting.
43 */
44typedef enum VIDEORECPROFILE
45{
46 VIDEORECPROFILE_NONE = 0,
47 VIDEORECPROFILE_LOW,
48 VIDEORECPROFILE_MEDIUM,
49 VIDEORECPROFILE_HIGH,
50 VIDEORECPROFILE_BEST,
51 VIDEORECPROFILE_REALTIME
52} VIDEORECPROFILE;
53
54/**
55 * Structure for keeping a video recording configuration.
56 */
57typedef struct VIDEORECCFG
58{
[68981]59 VIDEORECCFG(void)
[72014]60 : enmDst(VIDEORECDEST_INVALID)
[68981]61 , uMaxTimeS(0)
62 {
63#ifdef VBOX_WITH_AUDIO_VIDEOREC
64 RT_ZERO(Audio);
65#endif
66 RT_ZERO(Video);
67 }
68
[68803]69 /** Array of all screens containing whether they're enabled
70 * for recording or not. */
[68798]71 com::SafeArray<BOOL> aScreens;
72 /** Destination where to write the stream to. */
73 VIDEORECDEST enmDst;
[68990]74
75 /**
76 * Structure for keeping recording parameters if
77 * destination is a file.
78 */
79 struct
[68798]80 {
[68990]81 /** File name (as absolute path). */
82 com::Bstr strName;
83 /** Maximum file size (in MB) to record. */
84 uint32_t uMaxSizeMB;
85 } File;
[68798]86
87#ifdef VBOX_WITH_AUDIO_VIDEOREC
88 /**
89 * Structure for keeping the audio recording parameters.
90 */
91 struct
92 {
[68990]93 /** Whether audio recording is enabled or not. */
[68798]94 bool fEnabled;
[70035]95 /** The device LUN the audio driver is attached / configured to. */
96 unsigned uLUN;
[68990]97 /** Hertz (Hz) rate. */
[68798]98 uint16_t uHz;
[68990]99 /** Bits per sample. */
[68798]100 uint8_t cBits;
[68990]101 /** Number of audio channels. */
[68798]102 uint8_t cChannels;
[68990]103 /** Audio profile which is being used. */
[68798]104 VIDEORECPROFILE enmProfile;
105 } Audio;
106#endif
107
108 /**
109 * Structure for keeping the video recording parameters.
110 */
111 struct
112 {
[68990]113 /** Whether video recording is enabled or not. */
[68798]114 bool fEnabled;
[68990]115 /** Target width (in pixels). */
[68798]116 uint32_t uWidth;
[68990]117 /** Target height (in pixels). */
[68798]118 uint32_t uHeight;
[68990]119 /** Target encoding rate. */
[68798]120 uint32_t uRate;
[68990]121 /** Target FPS. */
[68798]122 uint32_t uFPS;
123
124#ifdef VBOX_WITH_LIBVPX
125 union
126 {
127 struct
128 {
129 /** Encoder deadline. */
130 unsigned int uEncoderDeadline;
131 } VPX;
132 } Codec;
133#endif
134
135 } Video;
136 /** Maximum time (in s) to record.
137 * Specify 0 to disable this check. */
138 uint32_t uMaxTimeS;
139
140 VIDEORECCFG& operator=(const VIDEORECCFG &that)
141 {
[68803]142 aScreens.resize(that.aScreens.size());
143 for (size_t i = 0; i < that.aScreens.size(); ++i)
144 aScreens[i] = that.aScreens[i];
145
[68798]146 enmDst = that.enmDst;
147
[68990]148 File.strName = that.File.strName;
[68798]149 File.uMaxSizeMB = that.File.uMaxSizeMB;
150#ifdef VBOX_WITH_AUDIO_VIDEOREC
151 Audio = that.Audio;
152#endif
153 Video = that.Video;
154 uMaxTimeS = that.uMaxTimeS;
155 return *this;
156 }
157
158} VIDEORECCFG, *PVIDEORECCFG;
159
160/** Stores video recording features. */
161typedef uint32_t VIDEORECFEATURES;
162
163/** Video recording is disabled completely. */
164#define VIDEORECFEATURE_NONE 0
165/** Capturing video is enabled. */
166#define VIDEORECFEATURE_VIDEO RT_BIT(0)
167/** Capturing audio is enabled. */
168#define VIDEORECFEATURE_AUDIO RT_BIT(1)
169
170int VideoRecContextCreate(uint32_t cScreens, PVIDEORECCFG pVideoRecCfg, PVIDEORECCONTEXT *ppCtx);
[65435]171int VideoRecContextDestroy(PVIDEORECCONTEXT pCtx);
[65173]172
[68798]173int VideoRecStreamInit(PVIDEORECCONTEXT pCtx, uint32_t uScreen);
174int VideoRecStreamUninit(PVIDEORECCONTEXT pCtx, uint32_t uScreen);
[65173]175
[72014]176VIDEORECFEATURES VideoRecGetFeatures(PVIDEORECCFG pCfg);
[68798]177
178int VideoRecSendAudioFrame(PVIDEORECCONTEXT pCtx, const void *pvData, size_t cbData, uint64_t uTimestampMs);
179int VideoRecSendVideoFrame(PVIDEORECCONTEXT pCtx, uint32_t uScreen,
[65429]180 uint32_t x, uint32_t y, uint32_t uPixelFormat, uint32_t uBPP,
181 uint32_t uBytesPerLine, uint32_t uSrcWidth, uint32_t uSrcHeight,
182 uint8_t *puSrcData, uint64_t uTimeStampMs);
183bool VideoRecIsReady(PVIDEORECCONTEXT pCtx, uint32_t uScreen, uint64_t uTimeStampMs);
[72014]184bool VideoRecIsStarted(PVIDEORECCONTEXT pCtx);
[65429]185bool VideoRecIsLimitReached(PVIDEORECCONTEXT pCtx, uint32_t uScreen, uint64_t tsNowMs);
[45841]186
187#endif /* !____H_VIDEOREC */
188
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use