Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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. #ifndef AVUTIL_STEREO3D_H
  22. #define AVUTIL_STEREO3D_H
  23.  
  24. #include <stdint.h>
  25.  
  26. #include "frame.h"
  27.  
  28. /**
  29.  * List of possible 3D Types
  30.  */
  31. enum AVStereo3DType {
  32.     /**
  33.      * Video is not stereoscopic (and metadata has to be there).
  34.      */
  35.     AV_STEREO3D_2D,
  36.  
  37.     /**
  38.      * Views are next to each other.
  39.      *
  40.      *    LLLLRRRR
  41.      *    LLLLRRRR
  42.      *    LLLLRRRR
  43.      *    ...
  44.      */
  45.     AV_STEREO3D_SIDEBYSIDE,
  46.  
  47.     /**
  48.      * Views are on top of each other.
  49.      *
  50.      *    LLLLLLLL
  51.      *    LLLLLLLL
  52.      *    RRRRRRRR
  53.      *    RRRRRRRR
  54.      */
  55.     AV_STEREO3D_TOPBOTTOM,
  56.  
  57.     /**
  58.      * Views are alternated temporally.
  59.      *
  60.      *     frame0   frame1   frame2   ...
  61.      *    LLLLLLLL RRRRRRRR LLLLLLLL
  62.      *    LLLLLLLL RRRRRRRR LLLLLLLL
  63.      *    LLLLLLLL RRRRRRRR LLLLLLLL
  64.      *    ...      ...      ...
  65.      */
  66.     AV_STEREO3D_FRAMESEQUENCE,
  67.  
  68.     /**
  69.      * Views are packed in a checkerboard-like structure per pixel.
  70.      *
  71.      *    LRLRLRLR
  72.      *    RLRLRLRL
  73.      *    LRLRLRLR
  74.      *    ...
  75.      */
  76.     AV_STEREO3D_CHECKERBOARD,
  77.  
  78.     /**
  79.      * Views are next to each other, but when upscaling
  80.      * apply a checkerboard pattern.
  81.      *
  82.      *     LLLLRRRR          L L L L    R R R R
  83.      *     LLLLRRRR    =>     L L L L  R R R R
  84.      *     LLLLRRRR          L L L L    R R R R
  85.      *     LLLLRRRR           L L L L  R R R R
  86.      */
  87.     AV_STEREO3D_SIDEBYSIDE_QUINCUNX,
  88.  
  89.     /**
  90.      * Views are packed per line, as if interlaced.
  91.      *
  92.      *    LLLLLLLL
  93.      *    RRRRRRRR
  94.      *    LLLLLLLL
  95.      *    ...
  96.      */
  97.     AV_STEREO3D_LINES,
  98.  
  99.     /**
  100.      * Views are packed per column.
  101.      *
  102.      *    LRLRLRLR
  103.      *    LRLRLRLR
  104.      *    LRLRLRLR
  105.      *    ...
  106.      */
  107.     AV_STEREO3D_COLUMNS,
  108. };
  109.  
  110.  
  111. /**
  112.  * Inverted views, Right/Bottom represents the left view.
  113.  */
  114. #define AV_STEREO3D_FLAG_INVERT     (1 << 0)
  115.  
  116. /**
  117.  * Stereo 3D type: this structure describes how two videos are packed
  118.  * within a single video surface, with additional information as needed.
  119.  *
  120.  * @note The struct must be allocated with av_stereo3d_alloc() and
  121.  *       its size is not a part of the public ABI.
  122.  */
  123. typedef struct AVStereo3D {
  124.     /**
  125.      * How views are packed within the video.
  126.      */
  127.     enum AVStereo3DType type;
  128.  
  129.     /**
  130.      * Additional information about the frame packing.
  131.      */
  132.     int flags;
  133. } AVStereo3D;
  134.  
  135. /**
  136.  * Allocate an AVStereo3D structure and set its fields to default values.
  137.  * The resulting struct can be freed using av_freep().
  138.  *
  139.  * @return An AVStereo3D filled with default values or NULL on failure.
  140.  */
  141. AVStereo3D *av_stereo3d_alloc(void);
  142.  
  143. /**
  144.  * Allocate a complete AVFrameSideData and add it to the frame.
  145.  *
  146.  * @param frame The frame which side data is added to.
  147.  *
  148.  * @return The AVStereo3D structure to be filled by caller.
  149.  */
  150. AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame);
  151.  
  152. #endif /* AVUTIL_STEREO3D_H */
  153.