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// A simple buffer to hold binary data 29e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kastenclass MediaAlbumArt 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaAlbumArt(): mSize(0), mData(0) {} 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project explicit MediaAlbumArt(const char* url) { 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = NULL; 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project FILE *in = fopen(url, "r"); 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!in) { 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return; 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project fseek(in, 0, SEEK_END); 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = ftell(in); // Allocating buffer of size equals to the external file size. 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mSize == 0 || (mData = new uint8_t[mSize]) == NULL) { 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project fclose(in); 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mSize != 0) { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return; 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project rewind(in); 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (fread(mData, 1, mSize, in) != mSize) { // Read failed. 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project delete[] mData; 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = NULL; 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return; 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project fclose(in); 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 60e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten MediaAlbumArt(const MediaAlbumArt& copy) { 61e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten mSize = copy.mSize; 62e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten mData = NULL; // initialize it first 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mSize > 0 && copy.mData != NULL) { 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = new uint8_t[copy.mSize]; 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != NULL) { 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project memcpy(mData, copy.mData, mSize); 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MediaAlbumArt() { 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != 0) { 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project delete[] mData; 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // Intentional public access modifier: 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // We have to know the internal structure in order to share it between 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // processes? 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mSize; // Number of bytes in mData 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t* mData; // Actual binary data 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Represents a color converted (RGB-based) video frame 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// with bitmap pixels stored in FrameBuffer 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass VideoFrame 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 9137007147edde731cd3dc74febd7bb7e093a35020Christer Fletcher VideoFrame(): mWidth(0), mHeight(0), mDisplayWidth(0), mDisplayHeight(0), mSize(0), mData(0), 9237007147edde731cd3dc74febd7bb7e093a35020Christer Fletcher mRotationAngle(0) {} 93e53b9ead781c36e96d6b6f012ddffc93a3d80f0dGlenn Kasten 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VideoFrame(const VideoFrame& copy) { 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mWidth = copy.mWidth; 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHeight = copy.mHeight; 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mDisplayWidth = copy.mDisplayWidth; 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mDisplayHeight = copy.mDisplayHeight; 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = copy.mSize; 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = NULL; // initialize it first 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mSize > 0 && copy.mData != NULL) { 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mData = new uint8_t[mSize]; 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != NULL) { 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project memcpy(mData, copy.mData, mSize); 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mSize = 0; 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10937007147edde731cd3dc74febd7bb7e093a35020Christer Fletcher mRotationAngle = copy.mRotationAngle; 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~VideoFrame() { 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mData != 0) { 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project delete[] mData; 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // Intentional public access modifier: 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mWidth; 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mHeight; 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mDisplayWidth; 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mDisplayHeight; 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint32_t mSize; // Number of bytes in mData 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project uint8_t* mData; // Actual binary data 125ce0febae177d1816ee7a6750ed9fba52472b9a71James Dong int32_t mRotationAngle; // rotation angle, clockwise 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_VIDEO_FRAME_H 131