1 #ifndef __OPENCV_FFMPEG_H__
2 #define __OPENCV_FFMPEG_H__
3 
4 #ifdef __cplusplus
5 extern "C"
6 {
7 #endif
8 
9 #if defined WIN32 || defined _WIN32
10 #   define OPENCV_FFMPEG_API __declspec(dllexport)
11 #elif defined __GNUC__ && __GNUC__ >= 4
12 #   define OPENCV_FFMPEG_API __attribute__ ((visibility ("default")))
13 #else
14 #   define OPENCV_FFMPEG_API
15 #endif
16 
17 enum
18 {
19     CV_FFMPEG_CAP_PROP_POS_MSEC=0,
20     CV_FFMPEG_CAP_PROP_POS_FRAMES=1,
21     CV_FFMPEG_CAP_PROP_POS_AVI_RATIO=2,
22     CV_FFMPEG_CAP_PROP_FRAME_WIDTH=3,
23     CV_FFMPEG_CAP_PROP_FRAME_HEIGHT=4,
24     CV_FFMPEG_CAP_PROP_FPS=5,
25     CV_FFMPEG_CAP_PROP_FOURCC=6,
26     CV_FFMPEG_CAP_PROP_FRAME_COUNT=7
27 };
28 
29 
30 OPENCV_FFMPEG_API struct CvCapture_FFMPEG* cvCreateFileCapture_FFMPEG(const char* filename);
31 OPENCV_FFMPEG_API struct CvCapture_FFMPEG_2* cvCreateFileCapture_FFMPEG_2(const char* filename);
32 OPENCV_FFMPEG_API int cvSetCaptureProperty_FFMPEG(struct CvCapture_FFMPEG* cap,
33                                                   int prop, double value);
34 OPENCV_FFMPEG_API int cvSetCaptureProperty_FFMPEG_2(struct CvCapture_FFMPEG_2* cap,
35                                                     int prop, double value);
36 OPENCV_FFMPEG_API double cvGetCaptureProperty_FFMPEG(struct CvCapture_FFMPEG* cap, int prop);
37 OPENCV_FFMPEG_API double cvGetCaptureProperty_FFMPEG_2(struct CvCapture_FFMPEG_2* cap, int prop);
38 OPENCV_FFMPEG_API int cvGrabFrame_FFMPEG(struct CvCapture_FFMPEG* cap);
39 OPENCV_FFMPEG_API int cvGrabFrame_FFMPEG_2(struct CvCapture_FFMPEG_2* cap);
40 OPENCV_FFMPEG_API int cvRetrieveFrame_FFMPEG(struct CvCapture_FFMPEG* capture, unsigned char** data,
41                                              int* step, int* width, int* height, int* cn);
42 OPENCV_FFMPEG_API int cvRetrieveFrame_FFMPEG_2(struct CvCapture_FFMPEG_2* capture, unsigned char** data,
43                                              int* step, int* width, int* height, int* cn);
44 OPENCV_FFMPEG_API void cvReleaseCapture_FFMPEG(struct CvCapture_FFMPEG** cap);
45 OPENCV_FFMPEG_API void cvReleaseCapture_FFMPEG_2(struct CvCapture_FFMPEG_2** cap);
46 OPENCV_FFMPEG_API struct CvVideoWriter_FFMPEG* cvCreateVideoWriter_FFMPEG(const char* filename,
47             int fourcc, double fps, int width, int height, int isColor );
48 OPENCV_FFMPEG_API struct CvVideoWriter_FFMPEG_2* cvCreateVideoWriter_FFMPEG_2(const char* filename,
49             int fourcc, double fps, int width, int height, int isColor );
50 
51 OPENCV_FFMPEG_API int cvWriteFrame_FFMPEG(struct CvVideoWriter_FFMPEG* writer, const unsigned char* data,
52                                           int step, int width, int height, int cn, int origin);
53 
54 OPENCV_FFMPEG_API void cvReleaseVideoWriter_FFMPEG(struct CvVideoWriter_FFMPEG** writer);
55 
56 typedef void* (*CvCreateFileCapture_Plugin)( const char* filename );
57 typedef void* (*CvCreateCameraCapture_Plugin)( int index );
58 typedef int (*CvGrabFrame_Plugin)( void* capture_handle );
59 typedef int (*CvRetrieveFrame_Plugin)( void* capture_handle, unsigned char** data, int* step,
60                                        int* width, int* height, int* cn );
61 typedef int (*CvSetCaptureProperty_Plugin)( void* capture_handle, int prop_id, double value );
62 typedef double (*CvGetCaptureProperty_Plugin)( void* capture_handle, int prop_id );
63 typedef void (*CvReleaseCapture_Plugin)( void** capture_handle );
64 typedef void* (*CvCreateVideoWriter_Plugin)( const char* filename, int fourcc,
65                                              double fps, int width, int height, int iscolor );
66 typedef int (*CvWriteFrame_Plugin)( void* writer_handle, const unsigned char* data, int step,
67                                     int width, int height, int cn, int origin);
68 typedef void (*CvReleaseVideoWriter_Plugin)( void** writer );
69 
70 /*
71  * For CUDA encoder
72  */
73 
74 OPENCV_FFMPEG_API struct OutputMediaStream_FFMPEG* create_OutputMediaStream_FFMPEG(const char* fileName, int width, int height, double fps);
75 OPENCV_FFMPEG_API void release_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream);
76 OPENCV_FFMPEG_API void write_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream, unsigned char* data, int size, int keyFrame);
77 
78 typedef struct OutputMediaStream_FFMPEG* (*Create_OutputMediaStream_FFMPEG_Plugin)(const char* fileName, int width, int height, double fps);
79 typedef void (*Release_OutputMediaStream_FFMPEG_Plugin)(struct OutputMediaStream_FFMPEG* stream);
80 typedef void (*Write_OutputMediaStream_FFMPEG_Plugin)(struct OutputMediaStream_FFMPEG* stream, unsigned char* data, int size, int keyFrame);
81 
82 /*
83  * For CUDA decoder
84  */
85 
86 OPENCV_FFMPEG_API struct InputMediaStream_FFMPEG* create_InputMediaStream_FFMPEG(const char* fileName, int* codec, int* chroma_format, int* width, int* height);
87 OPENCV_FFMPEG_API void release_InputMediaStream_FFMPEG(struct InputMediaStream_FFMPEG* stream);
88 OPENCV_FFMPEG_API int read_InputMediaStream_FFMPEG(struct InputMediaStream_FFMPEG* stream, unsigned char** data, int* size, int* endOfFile);
89 
90 typedef struct InputMediaStream_FFMPEG* (*Create_InputMediaStream_FFMPEG_Plugin)(const char* fileName, int* codec, int* chroma_format, int* width, int* height);
91 typedef void (*Release_InputMediaStream_FFMPEG_Plugin)(struct InputMediaStream_FFMPEG* stream);
92 typedef int (*Read_InputMediaStream_FFMPEG_Plugin)(struct InputMediaStream_FFMPEG* stream, unsigned char** data, int* size, int* endOfFile);
93 
94 #ifdef __cplusplus
95 }
96 #endif
97 
98 #endif
99