diff sv/videoio/SDL_ffmpeg.h @ 125:66af7c1b10d9

(none)
author ivand_qmul
date Mon, 22 Oct 2007 13:59:27 +0000
parents
children 587ad94d6ac2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sv/videoio/SDL_ffmpeg.h	Mon Oct 22 13:59:27 2007 +0000
@@ -0,0 +1,172 @@
+/*******************************************************************************
+*                                                                              *
+*   SDL_ffmpeg is a library for basic multimedia functionality.                *
+*   SDL_ffmpeg is based on ffmpeg.                                             *
+*                                                                              *
+*   Copyright (C) 2007  Arjan Houben                                           *
+*                                                                              *
+*   SDL_ffmpeg is free software: you can redistribute it and/or modify         *
+*   it under the terms of the GNU Lesser General Public License as published   *
+*	by the Free Software Foundation, either version 3 of the License, or any   *
+*   later version.                                                             *
+*                                                                              *
+*   This program is distributed in the hope that it will be useful,            *
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               *
+*   GNU Lesser General Public License for more details.                        *
+*                                                                              *
+*   You should have received a copy of the GNU Lesser General Public License   *
+*   along with this program.  If not, see <http://www.gnu.org/licenses/>.      *
+*                                                                              *
+*******************************************************************************/
+
+#ifndef SDL_FFMPEG_INCLUDED
+#define SDL_FFMPEG_INCLUDED
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef WIN32
+    #ifdef SDL_FFMPEG_LIBRARY
+	#define __STDC_LIMIT_MACROS
+	#define __STDC_CONSTANT_MACROS
+	#include "avformat.h"
+	#include "swscale.h"
+	#endif
+	#include "SDL_thread.h"
+    #include "SDL.h"
+   
+#endif
+
+#ifdef __unix__
+    #include "SDL/SDL_thread.h"
+    #include "SDL/SDL.h"
+    #ifdef SDL_FFMPEG_LIBRARY
+        #include "ffmpeg/avformat.h"
+    #endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#define SWS_BICUBIC           4
+const int SDL_FFMPEG_MAX_BUFFERED_FRAMES = 60;
+const int SDL_FFMPEG_MAX_BUFFERED_SAMPLES = 512*512;
+static int sws_flags = SWS_BICUBIC;
+// we pack our decoded images into bufferImage structs
+typedef struct bufferImage {
+    // pointer to image data
+    SDL_Surface *img;
+    // timestamp of current image
+    int64_t timestamp;
+} bufferImage;
+
+// this is the basic stream for SDL_ffmpeg
+typedef struct SDL_ffmpegStream {
+
+    // pointer to ffmpeg data, internal use only!
+    // points to AVCodecContext
+    int pixFmt;
+    void *_ffmpeg;
+
+    // semaphore for current stream
+    SDL_sem *sem;
+
+    // audio/video buffers
+    bufferImage **imageBuffer;
+    int8_t *audio;
+
+    // userinfo
+    double frameRate[2];
+    char language[4];
+    int sampleRate;
+    int channels;
+    char codecName[32];
+    double timeBase;
+    uint16_t width;
+    uint16_t height;
+
+    // extra data for audio
+    int32_t size;
+    int id;
+    int64_t lastTimeStamp;
+    int64_t pts, hardPts;
+    int64_t totalBytes;
+
+} SDL_ffmpegStream;
+
+typedef struct SDL_ffmpegFile {
+
+    // pointer to ffmpeg data, internal use only!
+    // points to AVFormatContext
+    void *_ffmpeg;
+
+    // our streams
+    SDL_ffmpegStream **vs;
+    SDL_ffmpegStream **as;
+
+    // data used for syncing/searching
+    int64_t offset, videoOffset, startTime;
+    int pause;
+
+    // streams and data about threads
+    int VStreams, AStreams, videoStream, audioStream, threadActive, videoThreadActive;
+    SDL_Thread *threadID, *videoThread;
+    SDL_sem *decode;
+	int skipAudio;
+	int skipVideo;
+	int delay;
+	int64_t audioTime;
+} SDL_ffmpegFile;
+
+
+int SDL_ffmpegStartDecoding(SDL_ffmpegFile* file);
+
+int SDL_ffmpegStopDecoding(SDL_ffmpegFile* file);
+
+SDL_Surface* SDL_ffmpegGetVideo(SDL_ffmpegFile* file);
+
+int SDL_ffmpegReleaseVideo(SDL_ffmpegFile *file, SDL_Surface *bmp);
+
+SDL_ffmpegStream* SDL_ffmpegGetAudioStream(SDL_ffmpegFile *file, int audioID);
+
+int SDL_ffmpegSelectAudioStream(SDL_ffmpegFile* file, int audioID);
+
+SDL_ffmpegStream* SDL_ffmpegGetVideoStream(SDL_ffmpegFile *file, int audioID);
+
+int SDL_ffmpegSelectVideoStream(SDL_ffmpegFile* file, int videoID);
+
+SDL_ffmpegFile* SDL_ffmpegCreateFile();
+
+void SDL_ffmpegFree(SDL_ffmpegFile* file);
+
+SDL_ffmpegFile* SDL_ffmpegOpen(const char* filename);
+
+int SDL_ffmpegDecodeThread(void* data);
+
+int SDL_ffmpegSeek(SDL_ffmpegFile* file, int64_t timestamp);
+
+int SDL_ffmpegSeekRelative(SDL_ffmpegFile* file, int64_t timestamp);
+
+int SDL_ffmpegFlush(SDL_ffmpegFile *file);
+
+int8_t* SDL_ffmpegGetAudio(SDL_ffmpegFile *file, int *len);
+
+int SDL_ffmpegReleaseAudio(SDL_ffmpegFile *file, int len);
+
+int64_t SDL_ffmpegGetPosition(SDL_ffmpegFile *file);
+
+SDL_AudioSpec* SDL_ffmpegGetAudioSpec(SDL_ffmpegFile *file, int samples, void *callback);
+
+int SDL_ffmpegGetVideoSize(SDL_ffmpegFile *file, int *w, int *h);
+
+int64_t SDL_ffmpegGetDuration(SDL_ffmpegFile *file);
+
+int SDL_ffmpegValidAudio(SDL_ffmpegFile *file);
+
+int SDL_ffmpegValidVideo(SDL_ffmpegFile *file);
+
+int SDL_ffmpegPause(SDL_ffmpegFile *file, int state);
+
+int SDL_ffmpegGetState(SDL_ffmpegFile *file);
+
+#endif // SDL_FFMPEG_INCLUDED