very early LAVC Audio provider

Originally committed to SVN as r319.
This commit is contained in:
Rodrigo Braz Monteiro 2006-04-14 06:13:29 +00:00
parent 51dc36a8c9
commit b51bd77d00
3 changed files with 79 additions and 5 deletions

View File

@ -45,16 +45,32 @@
////////////// //////////////
// Constructor // Constructor
LAVCAudioProvider::LAVCAudioProvider(wxString _filename) { LAVCAudioProvider::LAVCAudioProvider(wxString _filename) {
// Set filename
filename = _filename; filename = _filename;
// TODO // Init lavc variables
codecContext = NULL;
formatContext = NULL;
codec = NULL;
stream = NULL;
frame = NULL;
// Register types
static bool avRegistered = false;
if (!avRegistered) {
av_register_all();
avRegistered = true;
}
// Load audio
LoadAudio(filename);
} }
////////////// //////////////
// Destructor // Destructor
LAVCAudioProvider::~LAVCAudioProvider() { LAVCAudioProvider::~LAVCAudioProvider() {
// TODO Close();
} }
@ -65,6 +81,42 @@ wxString LAVCAudioProvider::GetFilename() {
} }
//////////////
// Load audio
void LAVCAudioProvider::LoadAudio(wxString file) {
// Close first
Close();
try {
// TODO
}
// Catch errors
catch (...) {
Close();
throw;
}
}
//////////
// Unload
void LAVCAudioProvider::Close() {
// Clean frame
if (frame) av_free(frame);
frame = NULL;
// Close codec context
if (codec && codecContext) avcodec_close(codecContext);
codecContext = NULL;
codec = NULL;
// Close format context
if (formatContext) av_close_input_file(formatContext);
formatContext = NULL;
}
///////////// /////////////
// Get audio // Get audio
void LAVCAudioProvider::GetAudio(void *buf, __int64 start, __int64 count) { void LAVCAudioProvider::GetAudio(void *buf, __int64 start, __int64 count) {

View File

@ -37,8 +37,21 @@
#pragma once #pragma once
///////////////////////////////////
// Auto-enable LAVC on non-windows
#ifndef __WINDOWS__
#ifndef USE_LAVC
#define USE_LAVC
#endif
#endif
/////////// ///////////
// Headers // Headers
#ifdef USE_LAVC
#define EMULATE_INTTYPES
#include <ffmpeg/avcodec.h>
#include <ffmpeg/avformat.h>
#include <wx/wxprec.h> #include <wx/wxprec.h>
#include "audio_provider.h" #include "audio_provider.h"
@ -49,6 +62,16 @@ class LAVCAudioProvider : public AudioProvider {
private: private:
wxString filename; wxString filename;
AVFormatContext *formatContext;
AVCodecContext *codecContext;
AVStream *stream;
AVCodec *codec;
AVFrame *frame;
int audStream;
void LoadAudio(wxString file);
void Close();
public: public:
LAVCAudioProvider(wxString _filename); LAVCAudioProvider(wxString _filename);
~LAVCAudioProvider(); ~LAVCAudioProvider();
@ -58,3 +81,5 @@ public:
void GetAudio(void *buf, __int64 start, __int64 count); void GetAudio(void *buf, __int64 start, __int64 count);
void GetWaveForm(int *min,int *peak,__int64 start,int w,int h,int samples,float scale); void GetWaveForm(int *min,int *peak,__int64 start,int w,int h,int samples,float scale);
}; };
#endif

View File

@ -48,9 +48,6 @@
/////////////// ///////////////
// Constructor // Constructor
LAVCVideoProvider::LAVCVideoProvider(wxString filename, wxString subfilename) { LAVCVideoProvider::LAVCVideoProvider(wxString filename, wxString subfilename) {
char temp[1024];
strcpy(temp,subfilename.mb_str(wxConvUTF8));
// Init variables // Init variables
codecContext = NULL; codecContext = NULL;
formatContext = NULL; formatContext = NULL;