8ff823f74132bdb5991a8eb43edd446f1fe0283d
[x262.git] / vfw / x264vfw.h
1 #ifndef _X264_VFW_H
2 #define _X264_VFW_H
3
4 #include <stdlib.h>
5 #include <string.h>
6 #include <stdint.h>
7
8 #include <windows.h>
9 #include <vfw.h>
10
11 #include <x264.h>
12
13 #include "resource.h"
14
15 /* Name */
16 #define X264_NAME_L     L"x264"
17 #define X264_DESC_L     L"x264 - H264/AVC encoder"
18
19 /* Codec fcc */
20 #define FOURCC_X264 mmioFOURCC('X','2','6','4')
21
22 /* yuv 4:2:0 planar */
23 #define FOURCC_I420 mmioFOURCC('I','4','2','0')
24 #define FOURCC_IYUV mmioFOURCC('I','Y','U','V')
25 #define FOURCC_YV12 mmioFOURCC('Y','V','1','2')
26
27 /* yuv 4:2:2 packed */
28 #define FOURCC_YUY2 mmioFOURCC('Y','U','Y','2')
29 #define FOURCC_YUYV mmioFOURCC('Y','U','Y','V')
30
31 #define X264_WEBSITE    "http://videolan.org/x264.html"
32
33 /* CONFIG: vfw config
34  */
35 typedef struct
36 {
37     /********** ATTENTION **********/
38     int mode;                   /* Vidomi directly accesses these vars */
39     int bitrate;
40     int desired_size;           /* please try to avoid modifications here */
41     char stats[MAX_PATH];
42     /*******************************/
43     int i_2passbitrate;
44     int i_pass;
45
46     int b_fast1pass;    /* turns off some flags during 1st pass */    
47
48     /* Our config */
49     int i_refmax;
50     int i_keyint_max;
51     int i_keyint_min;
52
53     int i_qp;
54     int b_filter;
55
56     int b_cabac;
57
58     int b_i4x4;
59     int b_psub16x16;
60     int b_psub8x8;
61     int b_bsub16x16;
62
63     int i_bframe;
64     int i_subpel_refine;
65     int i_direct_mv_pred;
66
67     int i_inloop_a;
68     int i_inloop_b;
69     
70     int i_key_boost;
71     int i_b_red;
72     int i_curve_comp;
73
74     /* vfw interface */
75     int b_save;
76     /* fourcc used */
77     char fcc[4+1];
78     int  i_encoding_type;
79 } CONFIG;
80
81 /* CODEC: vfw codec instance
82  */
83 typedef struct
84 {
85     CONFIG config;
86
87     /* handle */
88     x264_t *h;
89
90     /* XXX: needed ? */
91     unsigned int fincr;
92     unsigned int fbase;
93 } CODEC;
94
95 /* Compress functions */
96 LRESULT compress_query(CODEC *, BITMAPINFO *, BITMAPINFO *);
97 LRESULT compress_get_format(CODEC *, BITMAPINFO *, BITMAPINFO *);
98 LRESULT compress_get_size(CODEC *, BITMAPINFO *, BITMAPINFO *);
99 LRESULT compress_frames_info(CODEC *, ICCOMPRESSFRAMES *);
100 LRESULT compress_begin(CODEC *, BITMAPINFO *, BITMAPINFO *);
101 LRESULT compress_end(CODEC *);
102 LRESULT compress(CODEC *, ICCOMPRESS *);
103
104
105 /* config functions */
106 void config_reg_load( CONFIG * config );
107 void config_reg_save( CONFIG * config );
108
109
110 /* Dialog callbacks */
111 BOOL CALLBACK callback_about( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
112 BOOL CALLBACK callback_main ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
113 BOOL CALLBACK callback_advanced( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
114
115 /* Dll instance */
116 extern HINSTANCE g_hInst;
117
118 #if defined(_DEBUG)
119 #include <stdio.h> /* vsprintf */
120 #define DPRINTF_BUF_SZ  1024
121 static __inline void DPRINTF(char *fmt, ...)
122 {
123     va_list args;
124     char buf[DPRINTF_BUF_SZ];
125
126     va_start(args, fmt);
127     vsprintf(buf, fmt, args);
128     OutputDebugString(buf);
129 }
130 #else
131 static __inline void DPRINTF(char *fmt, ...) { }
132 #endif
133
134
135 #endif
136