diff options
author | brunzelchen <brunzelchen@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-05-30 09:31:51 +0000 |
---|---|---|
committer | brunzelchen <brunzelchen@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-05-30 09:31:51 +0000 |
commit | ea92932825739b6d7f5ac1434382a1a59a0371fd (patch) | |
tree | 15c0807b5fdbe064a1a9a786a12d308650aeac61 /Game/Code | |
parent | bb4a6304aab5a215055813617130c01d91d80a83 (diff) | |
download | usdx-ea92932825739b6d7f5ac1434382a1a59a0371fd.tar.gz usdx-ea92932825739b6d7f5ac1434382a1a59a0371fd.tar.xz usdx-ea92932825739b6d7f5ac1434382a1a59a0371fd.zip |
- new acinerella.dll (based on 1.4)
- the song does not restart if you change the video gap in the editor while playing
- some corrections in Blue Sensation theme; darker sing notes graphics
- some bugfixes
- max fps at ~200
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2425 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'Game/Code')
-rw-r--r-- | Game/Code/Classes/UGraphic.pas | 56 | ||||
-rw-r--r-- | Game/Code/Classes/UMain.pas | 8 | ||||
-rw-r--r-- | Game/Code/Classes/USongs.pas | 44 | ||||
-rw-r--r-- | Game/Code/Classes/UVideo.pas | 12 | ||||
-rw-r--r-- | Game/Code/Screens/UScreenEditSub.pas | 19 | ||||
-rw-r--r-- | Game/Code/Screens/UScreenSong.pas | 31 | ||||
-rw-r--r-- | Game/Code/UltraStar.bdsproj | 2 | ||||
-rw-r--r-- | Game/Code/UltraStar.cfg | 2 | ||||
-rw-r--r-- | Game/Code/UltraStar.dpr | 4 | ||||
-rw-r--r-- | Game/Code/lib/acinerella/acinerella.c | 58 | ||||
-rw-r--r-- | Game/Code/lib/acinerella/acinerella.h | 7 | ||||
-rw-r--r-- | Game/Code/lib/acinerella/acinerella.pas | 13 |
12 files changed, 128 insertions, 128 deletions
diff --git a/Game/Code/Classes/UGraphic.pas b/Game/Code/Classes/UGraphic.pas index 4aed06f3..7604e68e 100644 --- a/Game/Code/Classes/UGraphic.pas +++ b/Game/Code/Classes/UGraphic.pas @@ -257,13 +257,12 @@ begin Log.LogStatus('LoadOpenGL', 'Initialize3D');
Log.BenchmarkStart(2);
- LoadOpenGL( GLLibName );
-
+ {
Log.LogStatus('SDL_Init', 'Initialize3D');
- if ( SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO)= -1 ) then begin
+ if ( SDL_Init(SDL_INIT_VIDEO)= -1 ) then begin
Log.LogError('SDL_Init Failed', 'Initialize3D');
exit;
- end;
+ end;}
{ //Load Icon
Res := TResourceStream.CreateFromID(HInstance, 3, RT_ICON);
@@ -331,10 +330,10 @@ end; procedure SwapBuffers;
begin
SDL_GL_SwapBuffers;
- {glMatrixMode(GL_PROJECTION);
+ glMatrixMode(GL_PROJECTION);
glLoadIdentity;
- glOrtho(0, 800, 600, 0, -1, 100);
- glMatrixMode(GL_MODELVIEW);}
+ glOrtho(0, RenderW, RenderH, 0, -1, 100);
+ glMatrixMode(GL_MODELVIEW);
end;
procedure Reinitialize3D;
@@ -395,7 +394,8 @@ begin videoFlags := videoFlags or SDL_SWSURFACE;
if ( videoInfo.blit_hw <> 0 ) then videoFlags := videoFlags or SDL_HWACCEL;
-
+ //LoadOpenGL( GLLibName );
+
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
@@ -404,18 +404,6 @@ begin SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8 );
- pbo_supported := false;
- {if (Ini.EnablePBO=1) then
- begin
- try
- pbo_supported := glext_LoadExtension('GL_ARB_pixel_buffer_object') and
- glext_LoadExtension('GL_version_1_5');
- except
- pbo_supported := false;
- Log.LogError('The device does not support Pixel Buffer Object (UVideo)!');
- end;
- end;}
-
if (Ini.FullScreen = 0) and (Not Params.FullScreen) then
screen := SDL_SetVideoMode(W, H, (Depth+1) * 16, videoFlags)
else begin
@@ -427,17 +415,35 @@ begin Log.LogError('SDL_SetVideoMode Failed', 'Initialize3D');
exit;
end;
-
- // clear screen once window is being shown
- glClearColor(1, 1, 1, 1);
- glClear(GL_COLOR_BUFFER_BIT);
- SwapBuffers;
+
+ // Load OpenGL 1.2 extensions for OpenGL 1.2 compatibility
+ if (not Load_GL_version_1_2()) then
+ begin
+ Log.LogError('Failed loading OpenGL 1.2');
+ end;
+
+ pbo_supported := false;
+ if (Ini.EnablePBO=1) then
+ begin
+ try
+ pbo_supported := glext_LoadExtension('GL_ARB_pixel_buffer_object') and
+ glext_LoadExtension('GL_version_1_5');
+ except
+ pbo_supported := false;
+ Log.LogError('The device does not support Pixel Buffer Object (UVideo)!');
+ end;
+ end;
// zmienne
RenderW := 800;
RenderH := 600;
ScreenW := W;
ScreenH := H;
+
+ // clear screen once window is being shown
+ glClearColor(1, 1, 1, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+ SwapBuffers;
end;
procedure LoadScreens( aShowLoading : boolean = true );
diff --git a/Game/Code/Classes/UMain.pas b/Game/Code/Classes/UMain.pas index a20ba30c..c56513d1 100644 --- a/Game/Code/Classes/UMain.pas +++ b/Game/Code/Classes/UMain.pas @@ -135,9 +135,9 @@ begin // delay
CountMidTime;
- Delay := Floor(1000 / 100 - 1000 * TimeMid);
+ Delay := Floor(1000 / 200 - 1000 * TimeMid);
if Delay >= 1 then
- SDL_Delay(Delay); // dynamic, maximum is 100 fps
+ SDL_Delay(Delay);
CountSkipTime;
// reinitialization of graphics
@@ -163,14 +163,14 @@ Begin SDL_SetModState(KMOD_NONE);
if (Ini.FullScreen = 1) or (Params.FullScreen) then
SDL_ShowCursor(0);
- EnableVideoDraw := true;
+ //EnableVideoDraw := true;
end;
if (Event.active.gain=0) then
begin
if (Ini.FullScreen = 1) or (Params.FullScreen) then
SDL_ShowCursor(1);
- EnableVideoDraw := false;
+ //EnableVideoDraw := false;
end;
end;
diff --git a/Game/Code/Classes/USongs.pas b/Game/Code/Classes/USongs.pas index f5b105be..3c6e147a 100644 --- a/Game/Code/Classes/USongs.pas +++ b/Game/Code/Classes/USongs.pas @@ -146,26 +146,22 @@ var SR: TSearchRec; // for parsing Songs Directory
SLen: integer;
res: boolean;
+
begin
if FindFirst(Dir + '*', faDirectory, SR) = 0 then begin
repeat
if (SR.Name <> '.') and (SR.Name <> '..') then
- BrowseDir(Dir + Sr.Name + '\');
+ BrowseDir(Dir + SR.Name + '\');
until FindNext(SR) <> 0;
end; // if
FindClose(SR);
-// Log.LogStatus('Parsing directory: ' + Dir + SR.Name, 'LoadSongList');
-
- if FindFirst(Dir + '*.txt', 0, SR) = 0 then begin
-// Log.LogStatus('Parsing file: ' + Dir + SR.Name + '\' + SRD.Name, 'LoadSongList');
+ if FindFirst(Dir + '*.txt', 0, SR) = 0 then
+ begin
repeat
//New Mod for better Memory Management
SLen := BrowsePos;
- {//Old
- SLen := Length(Song);
- SetLength(Song, SLen + 1);//}
Song[SLen].Path := Dir;
Song[SLen].Folder := Copy(Dir, Length(SongPath)+1, 10000);
@@ -184,34 +180,24 @@ begin begin
Song[SLen]:=AktSong;
FindRefrainStart(Song[SLen]);
- end;
- end;
- if (not res) then Dec(BrowsePos)
- else begin
- // scanning complete, file is good
- // if there is no cover then try to find it
- if Song[SLen].Cover = '' then Song[SLen].Cover := FindSongFile(Dir, '*[CO].jpg');
-// if Song[SLen].Background = '' then begin
-// Song[SLen].Background := FindSongFile(Dir, '*[BG].jpg');
-// end; // no needed here}
-
- // fix by adding path. no, don't fix it.
-// if Song[SLen].Cover <> '' then
-// Song[SLen].Cover := Song[SLen].Path + Song[SLen].Cover;
+ // scanning complete, file is good
+ // if there is no cover then try to find it
+ if Song[SLen].Cover = '' then Song[SLen].Cover := FindSongFile(Dir, '*[CO].jpg');
+
+ Inc(BrowsePos);
+ end;
end;
//Change Length Only every 50 Entrys
- Inc(BrowsePos);
-
- if (BrowsePos mod 50 = 0) AND (BrowsePos <> 0) then
- begin
- UpdateScreenLoading('Songs: '+IntToStr(Length(Song)));
+ if (BrowsePos mod 50 = 0) AND (BrowsePos <> 0) and res then
SetLength(Song, Length(Song) + 50);
- end;
+
+ if (BrowsePos mod 5 = 0) and res then
+ UpdateScreenLoading('Songs: '+IntToStr(BrowsePos));
until FindNext(SR) <> 0;
- end; // if FindFirst
+ end; // if FindFirst
FindClose(SR);
end;
diff --git a/Game/Code/Classes/UVideo.pas b/Game/Code/Classes/UVideo.pas index 8d56182e..ee3d2bbd 100644 --- a/Game/Code/Classes/UVideo.pas +++ b/Game/Code/Classes/UVideo.pas @@ -130,10 +130,7 @@ end; function seek_proc(sender: Pointer; pos: int64; whence: integer): int64; cdecl;
begin
- if whence in [0, 1, 2] then
- result := fs.Seek(pos, TSeekOrigin(whence))
- else
- result := -1;
+ result := fs.Seek(pos, TSeekOrigin(whence))
end; procedure Init; @@ -180,7 +177,7 @@ begin inst := ac_init();
videodecoder := nil;
- ac_open(inst, nil, nil, @read_proc, @seek_proc, nil);
+ ac_open(inst, nil, nil, @read_proc, @seek_proc, nil, nil);
if not inst^.opened then
begin
@@ -251,12 +248,12 @@ begin PIXEL_FORMAT, GL_UNSIGNED_BYTE, nil);
glBindTexture(GL_TEXTURE_2D, 0);
- if(pbo_supported) then
+ if(pbo_supported) then begin
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, pbo);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, numBytes*TexX*TexY, nil, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
- end;
+ end; mmfps := 50;
end; @@ -812,7 +809,6 @@ begin // upper-right coord
glTexCoord2f(TexRect.Right, TexRect.Upper);
glVertex2f(ScreenRect.Right, ScreenRect.Upper); - glEnd; if Window.windowed then diff --git a/Game/Code/Screens/UScreenEditSub.pas b/Game/Code/Screens/UScreenEditSub.pas index f0d5822c..1d8ab390 100644 --- a/Game/Code/Screens/UScreenEditSub.pas +++ b/Game/Code/Screens/UScreenEditSub.pas @@ -223,7 +223,8 @@ begin AktSong.VideoGap := (round(AktSong.VideoGAP*100) + temp)/100;
if PlayVideo then
- StartVideo;
+ acSkip2(AktSong.VideoGap, Czas.Teraz);
+ //StartVideo;
end;
SDLK_7:
@@ -239,7 +240,8 @@ begin AktSong.VideoGap := (round(AktSong.VideoGAP*100) + temp)/100;
if PlayVideo then
- StartVideo;
+ acSkip2(AktSong.VideoGap, Czas.Teraz);
+ //StartVideo;
end;
SDLK_KP_PLUS:
@@ -2228,17 +2230,6 @@ begin Window.TargetAspect := acoCrop;
Window.windowed := true;
- {if CoverTime>=Ini.PreviewFading then
- begin
- glColor4f(0, 0, 0, 1);
-
- glbegin(gl_quads); - glVertex2f(Window.Left, Window.Upper); - glVertex2f(Window.Left, Window.Lower); - glVertex2f(Window.Right, Window.Lower); - glVertex2f(Window.Right, Window.Upper); - glEnd;
- end; }
SetAspectCorrection(acoCrop);
Blend := (PlayTime-0.2);
if Blend<0 then
@@ -2252,8 +2243,6 @@ begin acDrawGL(ScreenAct);
end;
- //ResetAspectCorrection;
-
if (Czas.Teraz>=Czas.Razem) then
begin
acClose;
diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index ababa843..43cdaba5 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -2392,7 +2392,7 @@ begin try
acGetFrame(Czas.Teraz);
- Blend := (CoverTime{-1.75})/Ini.PreviewFading;
+ Blend := (CoverTime-1.75)/Ini.PreviewFading;
if Blend<0 then
Blend := 0
else if Blend>1 then
@@ -2402,7 +2402,8 @@ begin begin
if (VidVisHandler.change_time+TimeSkip<0.4) then
begin
- VidVisHandler.change_time := VidVisHandler.change_time + TimeSkip;
+ if (Blend>0) then
+ VidVisHandler.change_time := VidVisHandler.change_time + TimeSkip;
faktor := VidVisHandler.change_time/0.4;
if (TargetVidVis = full) then
@@ -2473,9 +2474,17 @@ begin begin
if (Blend<1) or not EnableVideoDraw or VidVisHandler.changed then
Button[Interaction].Draw;
+ end else
+ Button[Interaction].Draw;
+
+ // Statics
+ for I := 0 to Length(Static) - 1 do
+ Static[I].Draw;
+ if UVideo.VideoOpened then
+ begin
try
- if (VidVis=windowed) then
+ if (VidVis<>full) or VidVisHandler.changed then
acDrawGLi(ScreenAct, Window, Blend);
if (Czas.Teraz>=Czas.Razem) then
@@ -2487,16 +2496,11 @@ begin Log.LogError('Corrupted File: ' + CatSongs.Song[Interaction].Video);
try
acClose;
-
except
+
end;
end;
- end else
- Button[Interaction].Draw;
-
- // Statics
- for I := 0 to Length(Static) - 1 do
- Static[I].Draw;
+ end;
// and texts
for I := 0 to Length(Text) - 1 do
@@ -2513,10 +2517,7 @@ begin begin
try
if (VidVis=full) and not VidVisHandler.changed then
- acDrawGL(ScreenAct)
- else if VidVisHandler.changed then
- acDrawGLi(ScreenAct, Window, Blend);
-
+ acDrawGL(ScreenAct);
if (Czas.Teraz>=Czas.Razem) then
acClose;
@@ -3686,7 +3687,7 @@ begin I := -1;
if GiveStats then
begin
- if (Pet mod 10 = 0) then
+ if (Pet mod 5 = 0) then
UpdateScreenLoading('Songs: '+IntToStr(Pet));
end;
diff --git a/Game/Code/UltraStar.bdsproj b/Game/Code/UltraStar.bdsproj index acdabdad..25bb9169 100644 --- a/Game/Code/UltraStar.bdsproj +++ b/Game/Code/UltraStar.bdsproj @@ -32,7 +32,7 @@ <Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
- <Compiler Name="Q">0</Compiler>
+ <Compiler Name="Q">1</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
diff --git a/Game/Code/UltraStar.cfg b/Game/Code/UltraStar.cfg index e156555a..04922655 100644 --- a/Game/Code/UltraStar.cfg +++ b/Game/Code/UltraStar.cfg @@ -14,7 +14,7 @@ -$N+
-$O+
-$P+
--$Q-
+-$Q+
-$R-
-$S-
-$T-
diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr index 6ddbad56..fbef9c69 100644 --- a/Game/Code/UltraStar.dpr +++ b/Game/Code/UltraStar.dpr @@ -124,7 +124,7 @@ uses acinerella in 'lib\acinerella\acinerella.pas';
const
- Version = 'UltraStar Deluxe v1.0.1a Challenge-Mod r7c 2010-05-01';
+ Version = 'UltraStar Deluxe v1.0.1a Challenge-Mod r7c5-10 2010-05-29';
var
WndTitle: string;
@@ -182,7 +182,7 @@ begin // SDL
Log.BenchmarkStart(1);
Log.LogStatus('Initialize SDL', 'Initialization');
- SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO);
+ SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
Log.BenchmarkEnd(1);
Log.LogBenchmark('Initializing SDL', 1);
diff --git a/Game/Code/lib/acinerella/acinerella.c b/Game/Code/lib/acinerella/acinerella.c index 05c52232..bae6b0e8 100644 --- a/Game/Code/lib/acinerella/acinerella.c +++ b/Game/Code/lib/acinerella/acinerella.c @@ -129,11 +129,7 @@ void init_info(lp_ac_file_info info) info->bitrate = -1;
}
-lp_ac_instance CALL_CONVT ac_init(void) {
- //Initialize FFMpeg libraries
- avcodec_register_all();
- av_register_all();
-
+lp_ac_instance CALL_CONVT ac_init(void) {
//Allocate a new instance of the videoplayer data and return it
lp_ac_data ptmp;
ptmp = (lp_ac_data)mgr_malloc(sizeof(ac_data));
@@ -181,7 +177,7 @@ static int64_t io_seek(void *opaque, int64_t pos, int whence) return -1;
}
-static AVInputFormat *av_probe_input_format2(AVProbeData *pd, int *score_max)
+static AVInputFormat *_av_probe_input_format2(AVProbeData *pd, int *score_max)
{
AVInputFormat *fmt1, *fmt;
int score;
@@ -227,7 +223,7 @@ void ac_release_buffer(struct AVCodecContext *c, AVFrame *pic){ avcodec_default_release_buffer(c, pic);
}
-AVInputFormat* ac_probe_input_buffer(
+lp_ac_proberesult CALL_CONVT ac_probe_input_buffer(
char* buf,
int bufsize,
char* filename,
@@ -235,6 +231,10 @@ AVInputFormat* ac_probe_input_buffer( {
AVProbeData pd;
+ //Initialize FFMpeg libraries
+ avcodec_register_all();
+ av_register_all();
+
//Set the filename
pd.filename = "";
if (filename) {
@@ -246,7 +246,7 @@ AVInputFormat* ac_probe_input_buffer( pd.buf_size = bufsize;
//Test it
- return av_probe_input_format2(&pd, score_max);
+ return (lp_ac_proberesult) _av_probe_input_format2(&pd, score_max);
}
#define PROBE_BUF_MIN 2048
@@ -291,7 +291,7 @@ AVInputFormat* ac_probe_input_stream( }
//Probe it
- fmt = ac_probe_input_buffer(tmp_buf, probe_size, filename, &score);
+ fmt = (AVInputFormat*)ac_probe_input_buffer(tmp_buf, probe_size, filename, &score);
//Set the new buffer
*buf = tmp_buf;
@@ -308,7 +308,8 @@ int CALL_CONVT ac_open( ac_openclose_callback open_proc,
ac_read_callback read_proc,
ac_seek_callback seek_proc,
- ac_openclose_callback close_proc)
+ ac_openclose_callback close_proc,
+ lp_ac_proberesult proberesult)
{
pacInstance->opened = 0;
@@ -327,13 +328,21 @@ int CALL_CONVT ac_open( open_proc(sender);
}
- //Probe the input format
+ AVInputFormat* fmt = NULL;
int probe_size = 0;
- AVInputFormat* fmt = ac_probe_input_stream(sender, read_proc, "",
+
+ //Probe the input format, if no probe result is specified
+ if(proberesult == NULL)
+ {
+ fmt = ac_probe_input_stream(sender, read_proc, "",
(void*)&((lp_ac_data)pacInstance)->buffer, &probe_size);
-
- if (!fmt) return -1;
+ }
+ else
+ {
+ fmt = (AVInputFormat*)proberesult;
+ }
+ if (!fmt) return -1;
if (!seek_proc) {
init_put_byte(
@@ -428,16 +437,19 @@ void CALL_CONVT ac_get_stream_info(lp_ac_instance pacInstance, int nb, lp_ac_str ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->width;
info->additional_info.video_info.frame_height =
((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->height;
- info->additional_info.video_info.pixel_aspect =
- av_q2d(((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio);
- //Sometime "pixel aspect" may be zero. Correct this.
- if (info->additional_info.video_info.pixel_aspect == 0.0) {
+
+ double pixel_aspect_num = ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio.num;
+ double pixel_aspect_den = ((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->codec->sample_aspect_ratio.den;
+
+ //Sometime "pixel aspect" may be zero or have other invalid values. Correct this.
+ if (pixel_aspect_num <= 0.0 || pixel_aspect_den <= 0.0)
info->additional_info.video_info.pixel_aspect = 1.0;
- }
+ else
+ info->additional_info.video_info.pixel_aspect = pixel_aspect_num / pixel_aspect_den;
- info->additional_info.video_info.frames_per_second =
- (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.num /
- (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.den;
+ info->additional_info.video_info.frames_per_second =
+ (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.num /
+ (double)((lp_ac_data)pacInstance)->pFormatCtx->streams[nb]->r_frame_rate.den;
break;
case CODEC_TYPE_AUDIO:
//Set stream type to "AUDIO"
@@ -689,7 +701,7 @@ int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder sws_scale(
pDecoder->pSwsCtx,
- (uint8_t*)(pDecoder->pFrame->data),
+ (const uint8_t* const*)(pDecoder->pFrame->data),
pDecoder->pFrame->linesize,
0, //?
pDecoder->pCodecCtx->height,
diff --git a/Game/Code/lib/acinerella/acinerella.h b/Game/Code/lib/acinerella/acinerella.h index 0fafc011..a758164d 100644 --- a/Game/Code/lib/acinerella/acinerella.h +++ b/Game/Code/lib/acinerella/acinerella.h @@ -184,6 +184,8 @@ typedef struct _ac_package ac_package; /*Pointer on TAc_package*/
typedef ac_package* lp_ac_package;
+typedef void* lp_ac_proberesult;
+
/*Callback function used to ask the application to read data. Should return
the number of bytes read or an value smaller than zero if an error occured.*/
typedef int CALL_CONVT (*ac_read_callback)(void *sender, char *buf, int size);
@@ -221,7 +223,8 @@ extern int CALL_CONVT ac_open( ac_openclose_callback open_proc,
ac_read_callback read_proc,
ac_seek_callback seek_proc,
- ac_openclose_callback close_proc);
+ ac_openclose_callback close_proc,
+ lp_ac_proberesult proberesult);
/*Closes an opened media file.*/
extern void CALL_CONVT ac_close(lp_ac_instance pacInstance);
@@ -248,4 +251,6 @@ The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.*/
extern int CALL_CONVT ac_seek(lp_ac_decoder pDecoder, int dir, int64_t target_pos);
+extern lp_ac_proberesult CALL_CONVT ac_probe_input_buffer(char* buf, int bufsize, char* filename, int* score_max);
+
#endif /*VIDEOPLAY_H*/
diff --git a/Game/Code/lib/acinerella/acinerella.pas b/Game/Code/lib/acinerella/acinerella.pas index 06d8db41..c806cc8f 100644 --- a/Game/Code/lib/acinerella/acinerella.pas +++ b/Game/Code/lib/acinerella/acinerella.pas @@ -73,8 +73,8 @@ type AC_OUTPUT_BGRA32 = 3
);
- TAc_infostr = array[0..511] of Char;
- TAc_infostr2 = array[0..31] of Char;
+ TAc_infostr = array[0..511] of AnsiChar;
+ TAc_infostr2 = array[0..31] of AnsiChar;
{Contains information about the whole file/stream that has been opened. Default
values are "" for strings and -1 for integer values.}
@@ -180,6 +180,8 @@ type end;
{Pointer on TAc_package}
PAc_package = ^TAc_package;
+
+ PAc_proberesult = Pointer;
{Callback function used to ask the application to read data. Should return
the number of bytes read or an value smaller than zero if an error occured.}
@@ -212,7 +214,8 @@ function ac_open( open_proc: TAc_openclose_callback;
read_proc: TAc_read_callback;
seek_proc: TAc_seek_callback;
- close_proc: TAc_openclose_callback): integer; cdecl; external ac_dll;
+ close_proc: TAc_openclose_callback;
+ proberesult: PAc_proberesult): integer; cdecl; external ac_dll;
{Closes an opened media file.}
procedure ac_close(inst: PAc_instance);cdecl; external ac_dll;
@@ -241,7 +244,9 @@ The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.}
function ac_seek(pDecoder: PAc_decoder; dir: integer; target_pos: int64): integer; cdecl; external ac_dll;
-
+function ac_probe_input_buffer(buf: PChar; bufsize: Integer; filename: PChar;
+ var score_max: Integer): PAc_proberesult; cdecl; external ac_dll;
+
implementation
{Connect the library memory management to the host application. This happens
|