Imported Debian version 1.0~trusty
[deb_vid.stab.git] / src / frameinfo.h
CommitLineData
80f575fc
DM
1/*
2 * frameinfo.h
3 *
4 * Copyright (C) Georg Martius - June 2007 - 2011
5 * georg dot martius at web dot de
6 *
7 * This file is part of vid.stab video stabilization library
8 *
9 * vid.stab is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License,
11 * as published by the Free Software Foundation; either version 2, or
12 * (at your option) any later version.
13 *
14 * vid.stab is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Make; see the file COPYING. If not, write to
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 */
24#ifndef FRAMEINFO_H
25#define FRAMEINFO_H
26
27#include <stddef.h>
28#include <stdlib.h>
29#include <inttypes.h>
30
31/// pixel formats
32typedef enum {PF_NONE = -1,
33 PF_GRAY8, ///< Y , 8bpp
34 PF_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
35 PF_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
36 PF_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
37 PF_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
38 PF_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
39 PF_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
40 PF_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
41 PF_PACKED, ///< dummy: packed formats start here
42 PF_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB...
43 PF_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
44 PF_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
45 PF_NUMBER ///< number of pixel formats
46} VSPixelFormat;
47
48/** frame information for deshaking lib
49 This only works for planar image formats
50 */
51typedef struct vsframeinfo {
52 int width, height;
53 int planes; // number of planes (1 luma, 2,3 chroma, 4 alpha)
54 int log2ChromaW; // subsampling of width in chroma planes
55 int log2ChromaH; // subsampling of height in chroma planes
56 VSPixelFormat pFormat;
57 int bytesPerPixel; // number of bytes per pixel (for packed formats)
58} VSFrameInfo;
59
60/** frame data according to frameinfo
61 */
62typedef struct vsframe {
63 uint8_t* data[4]; // data in planes. For packed data everthing is in plane 0
64 int linesize[4]; // line size of each line in a the planes
65} VSFrame;
66
67// use it to calculate the CHROMA sizes (rounding is correct)
68#define CHROMA_SIZE(width,log2sub) (-(-(width) >> (log2sub)))
69
70/// initializes the frameinfo for the given format
71int vsFrameInfoInit(VSFrameInfo* fi, int width, int height, VSPixelFormat pFormat);
72
73
74/// returns the subsampling shift amount, horizonatally for the given plane
75int vsGetPlaneWidthSubS(const VSFrameInfo* fi, int plane);
76
77/// returns the subsampling shift amount, vertically for the given plane
78int vsGetPlaneHeightSubS(const VSFrameInfo* fi, int plane);
79
80/// zero initialization
81void vsFrameNull(VSFrame* frame);
82
83/// returns true if frame is null (data[0]==0)
84int vsFrameIsNull(const VSFrame* frame);
85
86/// compares two frames for identity (based in data[0])
87int vsFramesEqual(const VSFrame* frame1,const VSFrame* frame2);
88
89/// allocates memory for a frame
90void vsFrameAllocate(VSFrame* frame, const VSFrameInfo* fi);
91
92
93/// copies the given plane number from src to dest
94void vsFrameCopyPlane(VSFrame* dest, const VSFrame* src,
95 const VSFrameInfo* fi, int plane);
96
97/// copies src to dest
98void vsFrameCopy(VSFrame* dest, const VSFrame* src, const VSFrameInfo* fi);
99
100/** fills the data pointer so that it corresponds to the img saved in the linear buffer.
101 No copying is performed.
102 Do not call vsFrameFree() on it.
103 */
104void vsFrameFillFromBuffer(VSFrame* frame, uint8_t* img, const VSFrameInfo* fi);
105
106/// frees memory
107void vsFrameFree(VSFrame* frame);
108
109#endif /* FRAMEINFO_H */
110
111/*
112 * Local variables:
113 * c-file-style: "stroustrup"
114 * c-file-offsets: ((case-label . *) (statement-case-intro . *))
115 * indent-tabs-mode: nil
116 * c-basic-offset: 2 t
117 * End:
118 *
119 * vim: expandtab shiftwidth=2:
120 */