]> git.sesse.net Git - x264/blobdiff - input/input.h
Bump dates to 2016
[x264] / input / input.h
index 220a414e0cb813c9df98a45d32464c91e7d2ac84..9e72bab8afa7108e126722474a7716feca252676 100644 (file)
@@ -1,10 +1,11 @@
 /*****************************************************************************
- * input.h: x264 file input modules
+ * input.h: file input
  *****************************************************************************
- * Copyright (C) 2003-2009 x264 project
+ * Copyright (C) 2003-2016 x264 project
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Loren Merritt <lorenm@u.washington.edu>
+ *          Steven Walters <kemuri9@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
+ *
+ * This program is also available under a commercial proprietary license.
+ * For more information, contact us at licensing@x264.com.
  *****************************************************************************/
 
 #ifndef X264_INPUT_H
 #define X264_INPUT_H
 
+#include "x264cli.h"
+
+/* options that are used by only some demuxers */
+typedef struct
+{
+    char *index_file;
+    char *format;
+    char *resolution;
+    char *colorspace;
+    int bit_depth;
+    char *timebase;
+    int seek;
+    int progress;
+    int output_csp; /* convert to this csp, if applicable */
+    int output_range; /* user desired output range */
+    int input_range; /* user override input range */
+} cli_input_opt_t;
+
+/* properties of the source given by the demuxer */
+typedef struct
+{
+    int csp;         /* colorspace of the input */
+    uint32_t fps_num;
+    uint32_t fps_den;
+    int fullrange;   /* has 2^bit_depth-1 instead of 219*2^(bit_depth-8) ranges (YUV only) */
+    int width;
+    int height;
+    int interlaced;
+    int num_frames;
+    uint32_t sar_width;
+    uint32_t sar_height;
+    int tff;
+    int thread_safe; /* demuxer is thread_input safe */
+    uint32_t timebase_num;
+    uint32_t timebase_den;
+    int vfr;
+} video_info_t;
+
+/* image data type used by x264cli */
+typedef struct
+{
+    int     csp;       /* colorspace */
+    int     width;     /* width of the picture */
+    int     height;    /* height of the picture */
+    int     planes;    /* number of planes */
+    uint8_t *plane[4]; /* pointers for each plane */
+    int     stride[4]; /* strides for each plane */
+} cli_image_t;
+
+typedef struct
+{
+    cli_image_t img;
+    int64_t pts;       /* input pts */
+    int64_t duration;  /* frame duration - used for vfr */
+    void    *opaque;   /* opaque handle */
+} cli_pic_t;
+
 typedef struct
 {
-    int (*open_file)( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param );
-    int (*get_frame_total)( hnd_t handle );
-    int (*picture_alloc)( x264_picture_t *pic, int i_csp, int i_width, int i_height );
-    int (*read_frame)( x264_picture_t *p_pic, hnd_t handle, int i_frame );
-    int (*release_frame)( x264_picture_t *pic, hnd_t handle );
-    void (*picture_clean)( x264_picture_t *pic );
+    int (*open_file)( char *psz_filename, hnd_t *p_handle, video_info_t *info, cli_input_opt_t *opt );
+    int (*picture_alloc)( cli_pic_t *pic, hnd_t handle, int csp, int width, int height );
+    int (*read_frame)( cli_pic_t *pic, hnd_t handle, int i_frame );
+    int (*release_frame)( cli_pic_t *pic, hnd_t handle );
+    void (*picture_clean)( cli_pic_t *pic, hnd_t handle );
     int (*close_file)( hnd_t handle );
 } cli_input_t;
 
-extern cli_input_t yuv_input;
-extern cli_input_t y4m_input;
-extern cli_input_t avs_input;
-extern cli_input_t thread_input;
+extern const cli_input_t raw_input;
+extern const cli_input_t y4m_input;
+extern const cli_input_t avs_input;
+extern const cli_input_t thread_input;
+extern const cli_input_t lavf_input;
+extern const cli_input_t ffms_input;
+extern const cli_input_t timecode_input;
+
+extern cli_input_t cli_input;
+
+/* extended colorspace list that isn't supported by libx264 but by the cli */
+#define X264_CSP_CLI_MAX        X264_CSP_MAX     /* end of list         */
+#define X264_CSP_OTHER          0x4000           /* non x264 colorspace */
+
+typedef struct
+{
+    const char *name;
+    int planes;
+    float width[4];
+    float height[4];
+    int mod_width;
+    int mod_height;
+} x264_cli_csp_t;
+
+extern const x264_cli_csp_t x264_cli_csps[];
+
+int      x264_cli_csp_is_invalid( int csp );
+int      x264_cli_csp_depth_factor( int csp );
+int      x264_cli_pic_alloc( cli_pic_t *pic, int csp, int width, int height );
+int      x264_cli_pic_alloc_aligned( cli_pic_t *pic, int csp, int width, int height );
+int      x264_cli_pic_init_noalloc( cli_pic_t *pic, int csp, int width, int height );
+void     x264_cli_pic_clean( cli_pic_t *pic );
+uint64_t x264_cli_pic_plane_size( int csp, int width, int height, int plane );
+uint64_t x264_cli_pic_size( int csp, int width, int height );
+const x264_cli_csp_t *x264_cli_get_csp( int csp );
+
+typedef struct
+{
+    int align_mask;
+#ifdef _WIN32
+    void *map_handle;
+#elif HAVE_MMAP
+    int fd;
+#endif
+} cli_mmap_t;
+
+int x264_cli_mmap_init( cli_mmap_t *h, FILE *fh );
+void *x264_cli_mmap( cli_mmap_t *h, int64_t offset, size_t size );
+int x264_cli_munmap( cli_mmap_t *h, void *addr, size_t size );
+void x264_cli_mmap_close( cli_mmap_t *h );
 
 #endif