Home | History | Annotate | Download | only in media
      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:
     33     VideoFrame(): mWidth(0), mHeight(0), mDisplayWidth(0), mDisplayHeight(0), mSize(0), mData(0),
     34             mRotationAngle(0) {}
     35 
     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 
     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