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