sceAvPlayerAddSourceEx and sceAvPlayerCurrentTime (#65)

* Minor

* sceAvPlayerAddSourceEx and sceAvPlayerCurrentTime

* Minor

* usec->msec

* Minor

* Squashed commit of the following:

commit b3649ee064
Author: Pavel <68122101+red-prig@users.noreply.github.com>
Date:   Wed Jan 18 12:08:08 2023 +0300

    test CI

commit 61f581ece8
Author: VocalFan <45863583+Mou-Ikkai@users.noreply.github.com>
Date:   Wed Jan 18 03:10:43 2023 -0500

    Separate PR and Main builds (#64)

    * Update Checkout and Upload-Artifact to V3

    * Step 1, separate PRs and Mains

    * Name: Main CI

    * Step 2: Parallel PR and Main builds.

    * Don't use v3 it doesn't work on my old server due to new versions of nodejs

    Co-authored-by: Pavel <68122101+red-prig@users.noreply.github.com>

* Align + check for source type

* test PR CI

Co-authored-by: Pavel <68122101+red-prig@users.noreply.github.com>
This commit is contained in:
Kagamma 2023-01-18 16:57:13 +07:00 committed by GitHub
parent b3649ee064
commit a1414b035c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 5 deletions

View File

@ -2,10 +2,9 @@
name: PR CI
on:
push:
pull_request:
branches:
- '*'
pull_request:
branches:
- '*'
workflow_dispatch:

View File

@ -48,6 +48,9 @@ type
SceAvPlayerEventCallback=procedure(p:Pointer;argEventId:Integer;argSourceId:Integer;argEventData:Pointer); SysV_ABI_CDecl;
SceAvPlayerUriType=Integer; // enum
SceAvPlayerSourceType=Integer; // enum
SceAvPlayerMemAllocator=packed record
objectPointer :Pointer;
allocate :SceAvPlayerAllocate;
@ -204,6 +207,20 @@ type
PSceAvPlayerPostInitData = Pointer;
SceAvPlayerUri=packed record
name :PChar;
length:DWord;
_align:DWord;
end;
SceAvPlayerSourceDetails=packed record
uri :SceAvPlayerUri;
reserved :array[0..63] of Byte;
sourceType:SceAvPlayerSourceType;
reserved2 :array[0..43] of Byte;
end;
PSceAvPlayerSourceDetails=^SceAvPlayerSourceDetails;
TMemChunk=packed record
pData:Pointer;
fSize:Ptruint;
@ -282,6 +299,8 @@ var
audioStream:PAVStream;
p :Pointer;
begin
if source<>'' then
Writeln('TODO: 1 instance can have multiple media sources');
FreeMedia;
source:=aSource;
formatContext:=avformat_alloc_context;
@ -646,7 +665,6 @@ var
f :THandle;
source :RawByteString;
begin
Writeln(SysLogPrefix,'sceAvPlayerAddSource:',argFilename);
spin_lock(lock);
// With file functions provided by client
if (handle<>nil) and (handle^.fileReplacement.open<>nil) and (handle^.fileReplacement.close<>nil)
@ -666,6 +684,7 @@ begin
end;
// Read data and write to dump directory
// TODO: Should cache the file so it can be reused later
Writeln('TODO: Should cache media file so it can be reused later: ',argFilename);
CreateDir(DIRECTORY_AVPLAYER_DUMP);
//
source:=DIRECTORY_AVPLAYER_DUMP+'/'+ExtractFileName(argFilename);
@ -712,10 +731,30 @@ end;
function ps4_sceAvPlayerAddSource(handle:SceAvPlayerHandle;argFilename:PChar):Integer; SysV_ABI_CDecl;
begin
_sig_lock;
Writeln(SysLogPrefix,'sceAvPlayerAddSource:',argFilename);
Result:=_sceAvPlayerAddSource(handle,argFilename);
_sig_unlock;
end;
function ps4_sceAvPlayerAddSourceEx(handle:SceAvPlayerHandle;uriType:SceAvPlayerUriType;sourceDetails:PSceAvPlayerSourceDetails):Integer; SysV_ABI_CDecl;
begin
_sig_lock;
if sourceDetails<>nil then
begin
Writeln(SysLogPrefix,'sceAvPlayerAddSourceEx:',sourceDetails^.uri.name);
if sourceDetails^.sourceType=1 then
Writeln('Source type: MP4')
else
Writeln('Source type: Unknown ',sourceDetails^.sourceType);
Result:=_sceAvPlayerAddSource(handle,sourceDetails^.uri.name)
end else
begin
Writeln(SysLogPrefix,'sceAvPlayerAddSourceEx:nil');
Result:=-1;
end;
_sig_unlock;
end;
function ps4_sceAvPlayerIsActive(handle:SceAvPlayerHandle): Boolean; SysV_ABI_CDecl;
begin
//Writeln(SysLogPrefix,'sceAvPlayerIsActive');
@ -810,6 +849,14 @@ begin
Result:=False;
end;
function ps4_sceAvPlayerCurrentTime(handle:SceAvPlayerHandle):QWord; SysV_ABI_CDecl;
begin
if (handle=nil) or (not handle^.playerState.IsPlaying) then
Result:=0
else
Result:=_usec2msec(handle^.playerState.lastVideoTimeStamp);
end;
function _sceAvPlayerStop(handle:SceAvPlayerHandle):Integer;
begin
Result:=-1;
@ -862,10 +909,12 @@ begin
lib^.set_proc($A3D79646448BF8CE,@ps4_sceAvPlayerInitEx);
lib^.set_proc($1C3D58295536EBF3,@ps4_sceAvPlayerPostInit);
lib^.set_proc($28C7046BEAC7B08A,@ps4_sceAvPlayerAddSource);
lib^.set_proc($C7CBAFB8538F6615,@ps4_sceAvPlayerAddSourceEx);
lib^.set_proc($51B42861AC0EB1F6,@ps4_sceAvPlayerIsActive);
lib^.set_proc($395B61B34C467E1A,@ps4_sceAvPlayerSetLooping);
lib^.set_proc($5A7A7539572B6609,@ps4_sceAvPlayerGetAudioData);
lib^.set_proc($25D92C42EF2935D4,@ps4_sceAvPlayerGetVideoDataEx);
lib^.set_proc($C3033DF608C57F56,@ps4_sceAvPlayerCurrentTime);
lib^.set_proc($642D7BC37BC1E4BA,@ps4_sceAvPlayerStop);
lib^.set_proc($3642700F32A6225C,@ps4_sceAvPlayerClose);
end;