VirtualBox

source: vbox/trunk/src/VBox/Main/src-client/RecordingInternals.cpp@ 102493

Last change on this file since 102493 was 99739, checked in by vboxsync, 19 months ago

*: doxygen corrections (mostly about removing @returns from functions returning void).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1/* $Id: RecordingInternals.cpp 99739 2023-05-11 01:01:08Z vboxsync $ */
2/** @file
3 * Recording internals code.
4 */
5
6/*
7 * Copyright (C) 2012-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#include "RecordingInternals.h"
29
30#include <iprt/assert.h>
31#include <iprt/mem.h>
32
33#ifdef VBOX_WITH_AUDIO_RECORDING
34
35/**
36 * Initializes a recording frame.
37 *
38 * @param pFrame Pointer to video frame to initialize.
39 * @param w Width (in pixel) of video frame.
40 * @param h Height (in pixel) of video frame.
41 * @param uBPP Bits per pixel (BPP).
42 * @param enmPixelFmt Pixel format to use.
43 */
44int RecordingVideoFrameInit(PRECORDINGVIDEOFRAME pFrame, int w, int h, uint8_t uBPP, RECORDINGPIXELFMT enmPixelFmt)
45{
46 /* Calculate bytes per pixel and set pixel format. */
47 const unsigned uBytesPerPixel = uBPP / 8;
48 const size_t cbRGBBuf = w * h * uBytesPerPixel;
49 AssertReturn(cbRGBBuf, VERR_INVALID_PARAMETER);
50
51 pFrame->pu8RGBBuf = (uint8_t *)RTMemAlloc(cbRGBBuf);
52 AssertPtrReturn(pFrame->pu8RGBBuf, VERR_NO_MEMORY);
53 pFrame->cbRGBBuf = cbRGBBuf;
54
55 pFrame->uX = 0;
56 pFrame->uY = 0;
57 pFrame->uWidth = w;
58 pFrame->uHeight = h;
59 pFrame->enmPixelFmt = enmPixelFmt;
60 pFrame->uBPP = uBPP;
61 pFrame->uBytesPerLine = w * uBytesPerPixel;
62
63 return VINF_SUCCESS;
64}
65
66/**
67 * Destroys a recording audio frame.
68 *
69 * @param pFrame Pointer to audio frame to destroy.
70 */
71static void recordingAudioFrameDestroy(PRECORDINGAUDIOFRAME pFrame)
72{
73 if (pFrame->pvBuf)
74 {
75 Assert(pFrame->cbBuf);
76 RTMemFree(pFrame->pvBuf);
77 pFrame->cbBuf = 0;
78 }
79}
80
81/**
82 * Frees a previously allocated recording audio frame.
83 *
84 * @param pFrame Audio frame to free. The pointer will be invalid after return.
85 */
86void RecordingAudioFrameFree(PRECORDINGAUDIOFRAME pFrame)
87{
88 if (!pFrame)
89 return;
90
91 recordingAudioFrameDestroy(pFrame);
92
93 RTMemFree(pFrame);
94 pFrame = NULL;
95}
96
97#endif /* VBOX_WITH_AUDIO_RECORDING */
98
99/**
100 * Destroys a recording video frame.
101 *
102 * @param pFrame Pointer to video frame to destroy.
103 */
104void RecordingVideoFrameDestroy(PRECORDINGVIDEOFRAME pFrame)
105{
106 if (pFrame->pu8RGBBuf)
107 {
108 Assert(pFrame->cbRGBBuf);
109 RTMemFree(pFrame->pu8RGBBuf);
110 pFrame->cbRGBBuf = 0;
111 }
112}
113
114/**
115 * Frees a recording video frame.
116 *
117 * @param pFrame Pointer to video frame to free. The pointer will be invalid after return.
118 */
119void RecordingVideoFrameFree(PRECORDINGVIDEOFRAME pFrame)
120{
121 if (!pFrame)
122 return;
123
124 RecordingVideoFrameDestroy(pFrame);
125
126 RTMemFree(pFrame);
127}
128
129/**
130 * Frees a recording frame.
131 *
132 * @param pFrame Pointer to recording frame to free. The pointer will be invalid after return.
133 */
134void RecordingFrameFree(PRECORDINGFRAME pFrame)
135{
136 if (!pFrame)
137 return;
138
139 switch (pFrame->enmType)
140 {
141#ifdef VBOX_WITH_AUDIO_RECORDING
142 case RECORDINGFRAME_TYPE_AUDIO:
143 recordingAudioFrameDestroy(&pFrame->Audio);
144 break;
145#endif
146 case RECORDINGFRAME_TYPE_VIDEO:
147 RecordingVideoFrameDestroy(&pFrame->Video);
148 break;
149
150 default:
151 AssertFailed();
152 break;
153 }
154
155 RTMemFree(pFrame);
156 pFrame = NULL;
157}
158
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette