~ppsspp/ppsspp/ffmpeg

« back to all changes in this revision

Viewing changes to libavutil/stereo3d.h

  • Committer: Henrik Rydgård
  • Date: 2014-01-03 10:44:32 UTC
  • Revision ID: git-v1:87c6c126784b1718bfa448ecf2e6a9fef781eb4e
Update our ffmpeg snapshot to a clone of the official repository.

This is because Maxim's at3plus support has been officially merged!

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
 
3
 *
 
4
 * This file is part of FFmpeg.
 
5
 *
 
6
 * FFmpeg is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU Lesser General Public
 
8
 * License as published by the Free Software Foundation; either
 
9
 * version 2.1 of the License, or (at your option) any later version.
 
10
 *
 
11
 * FFmpeg is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
 * Lesser General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU Lesser General Public
 
17
 * License along with FFmpeg; if not, write to the Free Software
 
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
19
 */
 
20
 
 
21
#include <stdint.h>
 
22
 
 
23
#include "frame.h"
 
24
 
 
25
/**
 
26
 * List of possible 3D Types
 
27
 */
 
28
enum AVStereo3DType {
 
29
    /**
 
30
     * Video is not stereoscopic (and metadata has to be there).
 
31
     */
 
32
    AV_STEREO3D_2D,
 
33
 
 
34
    /**
 
35
     * Views are next to each other.
 
36
     *
 
37
     *    LLLLRRRR
 
38
     *    LLLLRRRR
 
39
     *    LLLLRRRR
 
40
     *    ...
 
41
     */
 
42
    AV_STEREO3D_SIDEBYSIDE,
 
43
 
 
44
    /**
 
45
     * Views are on top of each other.
 
46
     *
 
47
     *    LLLLLLLL
 
48
     *    LLLLLLLL
 
49
     *    RRRRRRRR
 
50
     *    RRRRRRRR
 
51
     */
 
52
    AV_STEREO3D_TOPBOTTOM,
 
53
 
 
54
    /**
 
55
     * Views are alternated temporally.
 
56
     *
 
57
     *     frame0   frame1   frame2   ...
 
58
     *    LLLLLLLL RRRRRRRR LLLLLLLL
 
59
     *    LLLLLLLL RRRRRRRR LLLLLLLL
 
60
     *    LLLLLLLL RRRRRRRR LLLLLLLL
 
61
     *    ...      ...      ...
 
62
     */
 
63
    AV_STEREO3D_FRAMESEQUENCE,
 
64
 
 
65
    /**
 
66
     * Views are packed in a checkerboard-like structure per pixel.
 
67
     *
 
68
     *    LRLRLRLR
 
69
     *    RLRLRLRL
 
70
     *    LRLRLRLR
 
71
     *    ...
 
72
     */
 
73
    AV_STEREO3D_CHECKERBOARD,
 
74
 
 
75
    /**
 
76
     * Views are next to each other, but when upscaling
 
77
     * apply a checkerboard pattern.
 
78
     *
 
79
     *     LLLLRRRR          L L L L    R R R R
 
80
     *     LLLLRRRR    =>     L L L L  R R R R
 
81
     *     LLLLRRRR          L L L L    R R R R
 
82
     *     LLLLRRRR           L L L L  R R R R
 
83
     */
 
84
    AV_STEREO3D_SIDEBYSIDE_QUINCUNX,
 
85
 
 
86
    /**
 
87
     * Views are packed per line, as if interlaced.
 
88
     *
 
89
     *    LLLLLLLL
 
90
     *    RRRRRRRR
 
91
     *    LLLLLLLL
 
92
     *    ...
 
93
     */
 
94
    AV_STEREO3D_LINES,
 
95
 
 
96
    /**
 
97
     * Views are packed per column.
 
98
     *
 
99
     *    LRLRLRLR
 
100
     *    LRLRLRLR
 
101
     *    LRLRLRLR
 
102
     *    ...
 
103
     */
 
104
    AV_STEREO3D_COLUMNS,
 
105
};
 
106
 
 
107
 
 
108
/**
 
109
 * Inverted views, Right/Bottom represents the left view.
 
110
 */
 
111
#define AV_STEREO3D_FLAG_INVERT     (1 << 0)
 
112
 
 
113
/**
 
114
 * Stereo 3D type: this structure describes how two videos are packed
 
115
 * within a single video surface, with additional information as needed.
 
116
 *
 
117
 * @note The struct must be allocated with av_stereo3d_alloc() and
 
118
 *       its size is not a part of the public ABI.
 
119
 */
 
120
typedef struct AVStereo3D {
 
121
    /**
 
122
     * How views are packed within the video.
 
123
     */
 
124
    enum AVStereo3DType type;
 
125
 
 
126
    /**
 
127
     * Additional information about the frame packing.
 
128
     */
 
129
    int flags;
 
130
} AVStereo3D;
 
131
 
 
132
/**
 
133
 * Allocate an AVStereo3D structure and set its fields to default values.
 
134
 * The resulting struct can be freed using av_freep().
 
135
 *
 
136
 * @return An AVStereo3D filled with default values or NULL on failure.
 
137
 */
 
138
AVStereo3D *av_stereo3d_alloc(void);
 
139
 
 
140
/**
 
141
 * Allocate a complete AVFrameSideData and add it to the frame.
 
142
 *
 
143
 * @param frame The frame which side data is added to.
 
144
 *
 
145
 * @return The AVStereo3D structure to be filled by caller.
 
146
 */
 
147
AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame);