1 /*
2 **
3 ** Copyright (C) 2008 The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef ANDROID_VIDEO_FRAME_H
19 #define ANDROID_VIDEO_FRAME_H
20 
21 #include <stdint.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <utils/Log.h>
25 
26 namespace android {
27 
28 // Represents a color converted (RGB-based) video frame
29 // with bitmap pixels stored in FrameBuffer
30 class VideoFrame
31 {
32 public:
VideoFrame()33     VideoFrame(): mWidth(0), mHeight(0), mDisplayWidth(0), mDisplayHeight(0), mSize(0), mData(0),
34             mRotationAngle(0) {}
35 
VideoFrame(const VideoFrame & copy)36     VideoFrame(const VideoFrame& copy) {
37         mWidth = copy.mWidth;
38         mHeight = copy.mHeight;
39         mDisplayWidth = copy.mDisplayWidth;
40         mDisplayHeight = copy.mDisplayHeight;
41         mSize = copy.mSize;
42         mData = NULL;  // initialize it first
43         if (mSize > 0 && copy.mData != NULL) {
44             mData = new uint8_t[mSize];
45             if (mData != NULL) {
46                 memcpy(mData, copy.mData, mSize);
47             } else {
48                 mSize = 0;
49             }
50         }
51         mRotationAngle = copy.mRotationAngle;
52     }
53 
~VideoFrame()54     ~VideoFrame() {
55         if (mData != 0) {
56             delete[] mData;
57         }
58     }
59 
60     // Intentional public access modifier:
61     uint32_t mWidth;
62     uint32_t mHeight;
63     uint32_t mDisplayWidth;
64     uint32_t mDisplayHeight;
65     uint32_t mSize;            // Number of bytes in mData
66     int32_t  mRotationAngle;   // rotation angle, clockwise, should be multiple of 90
67     // mData should be 64 bit aligned to prevent additional padding
68     uint8_t* mData;            // Actual binary data
69     // pad structure so it's the same size on 64 bit and 32 bit
70     char     mPadding[8 - sizeof(mData)];
71 };
72 
73 }; // namespace android
74 
75 #endif // ANDROID_VIDEO_FRAME_H
76