Mercurial > hg > easaier-soundaccess
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