Ticket #1548: ffmpeg_dll.h

File ffmpeg_dll.h, 3.2 KB (added by TheSHEEEP, 14 years ago)
Line 
1#pragma once
2
3/**
4* @author Tophead, Jan Drabner
5*/
6
7#ifdef FFMPEG_DLL_EXPORTS
8#define FFMPEG_DLL_API __declspec(dllexport)
9#else
10#define FFMPEG_DLL_API __declspec(dllimport)
11#endif
12
13//#include "libavcodec/avcodec.h"
14//#include "C:/ffmpeg/include/stdint.h"
15//#include "C:/ffmpeg/include/inttypes.h"
16
17#ifndef M_PI
18#define M_PI 3.14159265358979323846
19#endif
20
21#define inline _inline
22#define snprintf _snprintf
23
24extern "C" {
25#include "libavformat/avformat.h"
26#include "libswscale/swscale.h"
27}
28#include <memory.h>
29#include <windows.h>
30#include <queue>
31#include "FramesCollection.h"
32
33struct Picture
34{
35 int frame;
36 void *pic;
37 int pic_size;
38 int vStart;
39 int soundOffset;
40 int lStart;
41 int lEnd;
42 int vEnd;
43 bool bFree;
44
45};
46
47static void log_callback(void *ptr, int level, const char *fmt, va_list vargs);
48
49// Diese Klasse wird aus ffmpeg_dll.dll exportiert.
50class FFMPEG_DLL_API Cffmpeg_dll {
51public:
52 // constructor
53 Cffmpeg_dll(void);
54 // destructor
55 ~Cffmpeg_dll(void);
56 // here comes the data
57
58 /* encoder thread */
59 int QueuePicture( Picture& pic );
60 HANDLE thread;
61 CRITICAL_SECTION queueLock;
62 std::queue< Picture >* pictureQueue;
63
64 /**************************************************************/
65 /* audio data */
66
67 bool skippedFirst; // Skip the first frame because of audio noise
68
69 float t, tincr, tincr2;
70 int16_t *samples;
71 uint8_t *audio_outbuf;
72 int audio_outbuf_size;
73 int audio_input_frame_size;
74 char soundInputPath[1024];
75 FILE *fp_sound_input;
76
77 enum AVSampleFormat sample_fmt;
78 int audio_bit_rate;
79 int sample_rate;
80 int channels;
81
82 /**************************************************************/
83 /* video data */
84
85 AVFrame *picture, *tmp_picture;
86 uint8_t *video_outbuf;
87 int frame_count, video_outbuf_size;
88 int srcWidth, srcHeight;
89 int dstWidth, dstHeight;
90 struct SwsContext *img_convert_ctx;
91 AVOutputFormat *fmt;
92 AVFormatContext *oc;
93 AVStream *audio_st, *video_st;
94 char videoOutputPath[1024];
95 double audio_pts, video_pts;
96 int video_bit_rate;
97
98 // h264 specific parameters
99 int qmin, qmax;
100 int me_method;
101 int me_subpel_quality;
102 float i_quant_factor;
103 float qcompress;
104 int max_qdiff;
105
106 int fps;
107 char audioCodec[512];
108 CodecID audio_codec_id;
109 void * audio_codec_ptr;
110 char videoCodec[512];
111 CodecID video_codec_id;
112 bool video_finished;
113
114 int threads;
115
116
117 /**************************************************************/
118 /* intro and outro data */
119 FramesCollection* introVideo;
120 FramesCollection* outroVideo;
121};
122
123
124extern "C"
125{
126FFMPEG_DLL_API Cffmpeg_dll * Create_Cffmpeg_dll();
127
128FFMPEG_DLL_API int InitVideo_ffmpeg_dll(Cffmpeg_dll * ptr,
129 const char * filename,
130 const char * soundname,
131 const char * logfilePath);
132
133FFMPEG_DLL_API int EncodePicture_ffmpeg_dll(Cffmpeg_dll * ptr,
134 int frame,
135 void * pic, int pic_size,
136 int vStart = 0,
137 int soundOffset = 0,
138 int lStart = 0, int lEnd = 0,
139 int vEnd = 0 );
140
141FFMPEG_DLL_API int CloseVideo_ffmpeg_dll(Cffmpeg_dll * ptr);
142
143FFMPEG_DLL_API int Delete_Cffmpeg_dll(Cffmpeg_dll * ptr);
144}
145