134 lines
5.8 KiB
C
134 lines
5.8 KiB
C
/* Simple Plugin API
|
|
*
|
|
* Copyright © 2018 Wim Taymans
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice (including the next
|
|
* paragraph) shall be included in all copies or substantial portions of the
|
|
* Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef SPA_VIDEO_MULTIVIEW_H
|
|
#define SPA_VIDEO_MULTIVIEW_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* \addtogroup spa_param
|
|
* \{
|
|
*/
|
|
|
|
/**
|
|
* All possible stereoscopic 3D and multiview representations.
|
|
* In conjunction with \ref spa_video_multiview_flags, describes how
|
|
* multiview content is being transported in the stream.
|
|
*/
|
|
enum spa_video_multiview_mode {
|
|
/** A special value indicating no multiview information. Used in spa_video_info and other
|
|
* places to indicate that no specific multiview handling has been requested or provided.
|
|
* This value is never carried on caps. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_NONE = -1,
|
|
SPA_VIDEO_MULTIVIEW_MODE_MONO = 0, /**< All frames are monoscopic */
|
|
/* Single view modes */
|
|
SPA_VIDEO_MULTIVIEW_MODE_LEFT, /**< All frames represent a left-eye view */
|
|
SPA_VIDEO_MULTIVIEW_MODE_RIGHT, /**< All frames represent a right-eye view */
|
|
/* Stereo view modes */
|
|
SPA_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, /**< Left and right eye views are provided
|
|
* in the left and right half of the frame
|
|
* respectively. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, /**< Left and right eye views are provided
|
|
* in the left and right half of the
|
|
* frame, but have been sampled using
|
|
* quincunx method, with half-pixel offset
|
|
* between the 2 views. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, /**< Alternating vertical columns of pixels
|
|
* represent the left and right eye view
|
|
* respectively. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, /**< Alternating horizontal rows of pixels
|
|
* represent the left and right eye view
|
|
* respectively. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, /**< The top half of the frame contains the
|
|
* left eye, and the bottom half the right
|
|
* eye. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_CHECKERBOARD, /**< Pixels are arranged with alternating
|
|
* pixels representing left and right eye
|
|
* views in a checkerboard fashion. */
|
|
/* Padding for new frame packing modes */
|
|
|
|
SPA_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME = 32, /**< Left and right eye views are provided
|
|
* in separate frames alternately. */
|
|
/* Multiview mode(s) */
|
|
SPA_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME, /**< Multipleindependent views are
|
|
* provided in separate frames in
|
|
* sequence. This method only applies to
|
|
* raw video buffers at the moment.
|
|
* Specific view identification is via
|
|
* \ref spa_video_multiview_meta on raw
|
|
* video buffers. */
|
|
SPA_VIDEO_MULTIVIEW_MODE_SEPARATED, /**< Multiple views are provided as separate
|
|
* \ref spa_data framebuffers attached
|
|
* to each \ref spa_buffer, described
|
|
* by the \ref spa_video_multiview_meta */
|
|
/* future expansion for annotated modes */
|
|
};
|
|
|
|
/**
|
|
* spa_video_multiview_flags are used to indicate extra properties of a
|
|
* stereo/multiview stream beyond the frame layout and buffer mapping
|
|
* that is conveyed in the \ref spa_video_multiview_mode.
|
|
*/
|
|
enum spa_video_multiview_flags {
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_NONE = 0, /**< No flags */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST = (1 << 0), /**< For stereo streams, the normal arrangement
|
|
* of left and right views is reversed */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED = (1 << 1), /**< The left view is vertically mirrored */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED = (1 << 2), /**< The left view is horizontally mirrored */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED = (1 << 3), /**< The right view is vertically mirrored */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED = (1 << 4), /**< The right view is horizontally mirrored */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT = (1 << 14), /**< For frame-packed multiview
|
|
* modes, indicates that the individual
|
|
* views have been encoded with half the true
|
|
* width or height and should be scaled back
|
|
* up for display. This flag is used for
|
|
* overriding input layout interpretation
|
|
* by adjusting pixel-aspect-ratio.
|
|
* For side-by-side, column interleaved or
|
|
* checkerboard packings, the
|
|
* pixel width will be doubled.
|
|
* For row interleaved and
|
|
* top-bottom encodings, pixel height will
|
|
* be doubled */
|
|
SPA_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO = (1 << 15), /**< The video stream contains both
|
|
* mono and multiview portions,
|
|
* signalled on each buffer by the
|
|
* absence or presence of the
|
|
* \ref SPA_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW
|
|
* buffer flag. */
|
|
};
|
|
|
|
|
|
/**
|
|
* \}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* SPA_VIDEO_MULTIVIEW_H */
|