/* ** ** Copyright (C) 2008 The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef ANDROID_VIDEO_FRAME_H #define ANDROID_VIDEO_FRAME_H #include #include #include #include namespace android { // Represents a color converted (RGB-based) video frame // with bitmap pixels stored in FrameBuffer class VideoFrame { public: VideoFrame(): mWidth(0), mHeight(0), mDisplayWidth(0), mDisplayHeight(0), mSize(0), mData(0), mRotationAngle(0) {} VideoFrame(const VideoFrame& copy) { mWidth = copy.mWidth; mHeight = copy.mHeight; mDisplayWidth = copy.mDisplayWidth; mDisplayHeight = copy.mDisplayHeight; mSize = copy.mSize; mData = NULL; // initialize it first if (mSize > 0 && copy.mData != NULL) { mData = new uint8_t[mSize]; if (mData != NULL) { memcpy(mData, copy.mData, mSize); } else { mSize = 0; } } mRotationAngle = copy.mRotationAngle; } ~VideoFrame() { if (mData != 0) { delete[] mData; } } // Intentional public access modifier: uint32_t mWidth; uint32_t mHeight; uint32_t mDisplayWidth; uint32_t mDisplayHeight; uint32_t mSize; // Number of bytes in mData int32_t mRotationAngle; // rotation angle, clockwise, should be multiple of 90 // mData should be 64 bit aligned to prevent additional padding uint8_t* mData; // Actual binary data // pad structure so it's the same size on 64 bit and 32 bit char mPadding[8 - sizeof(mData)]; }; }; // namespace android #endif // ANDROID_VIDEO_FRAME_H