189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Copyright (C) 2008 The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project*/ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_VIDEO_FRAME_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_VIDEO_FRAME_H 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdint.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdio.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <stdlib.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Represents a color converted (RGB-based) video frame 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// with bitmap pixels stored in FrameBuffer 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass VideoFrame 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 3310db45259545989a80fae0cd6fd6a252f3c9924aChrister Fletcher VideoFrame(): mWidth(0), mHeight(0), mDisplayWidth(0), mDisplayHeight(0), mSize(0), mData(0), 3410db45259545989a80fae0cd6fd6a252f3c9924aChrister Fletcher mRotationAngle(0) {} 35e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VideoFrame(const VideoFrame& copy) { 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mWidth = copy.mWidth; 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHeight = copy.mHeight; 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mDisplayWidth = copy.mDisplayWidth; 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mDisplayHeight = copy.mDisplayHeight; 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = copy.mSize; 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = NULL; // initialize it first 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mSize > 0 && copy.mData != NULL) { 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = new uint8_t[mSize]; 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != NULL) { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project memcpy(mData, copy.mData, mSize); 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5110db45259545989a80fae0cd6fd6a252f3c9924aChrister Fletcher mRotationAngle = copy.mRotationAngle; 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~VideoFrame() { 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != 0) { 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project delete[] mData; 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // Intentional public access modifier: 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mWidth; 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mHeight; 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mDisplayWidth; 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mDisplayHeight; 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mSize; // Number of bytes in mData 6604906863a1fa7f296ac11f07e62aa688da39c3adMarco Nelissen int32_t mRotationAngle; // rotation angle, clockwise, should be multiple of 90 6704906863a1fa7f296ac11f07e62aa688da39c3adMarco Nelissen // mData should be 64 bit aligned to prevent additional padding 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t* mData; // Actual binary data 6904906863a1fa7f296ac11f07e62aa688da39c3adMarco Nelissen // pad structure so it's the same size on 64 bit and 32 bit 7004906863a1fa7f296ac11f07e62aa688da39c3adMarco Nelissen char mPadding[8 - sizeof(mData)]; 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_VIDEO_FRAME_H 76