[Windows Mobile Apps and Games] frmariam:
The GAPI issue may be gx.dll related (make sure you have the correct one for your device resolution).

The reason bimbam69 builds don't have avrcp is because that plugin was implemented into core components of TCPMP (interface.plg) and the devs didn't release the sources along with the binaries.

PS: I found this code snippet (think it was from the developer homepage):

#define AVRCP_MSG_SZ TEXT("Avrcp10MsgQ")

int AvrcpMsgProcess (void* p){
static int avrcp_tick;
bool_t PlayState = 0;
bool_t bAvrcp = 0;
fraction Percent;
int Param = PLAYER_PLAY;
node* Player = Context()->Player;
MSGQUEUEOPTIONS mqOptions;
memset (&mqOptions, 0, sizeof(mqOptions));
mqOptions.dwFlags = MSGQUEUE_ALLOW_BROKEN;
mqOptions.dwSize = sizeof(mqOptions);
mqOptions.dwMaxMessages = 2;
mqOptions.cbMaxMessage = 100;
mqOptions.bReadAccess = TRUE;
hMsgQ = CreateMsgQueue(AVRCP_MSG_SZ, &mqOptions);
if (! hMsgQ) {
goto exit_bt;
}
//_debug(L"MsgQueue created.");
while (hMsgQ != 0) {
DWORD dwWait = WaitForSingleObject (hMsgQ, INFINITE);
NodeRegLoadValue(AVRCP_ID,AVRCP_ENABLE,&bAvrcp,sizeof(int),TYPE_INT);
if(! bAvrcp){
goto exit_bt;
}
if (WAIT_OBJECT_0 == dwWait) {
AvrcpMsg btAvrcp;
DWORD dwFlags = 0;
DWORD dwBytesRead = 0;
BOOL fRet = ReadMsgQueue (hMsgQ, &btAvrcp, sizeof(AvrcpMsg), &dwBytesRead, 10, &dwFlags);
if (fRet) {
if(hAvrcpConfMode==1){
avrcp_tick++;
if(avrcp_tick>1){
//_debug(L"Avrcp Config Accessed:%x,tick:%d",btAvrcp.OpId,avrcp_tick);
intConfAvrcpMsg=btAvrcp.OpId;
avrcp_tick=0;
}
}else{
//_debug(L"Avrcp Normal Accessed:%x",btAvrcp.OpId);
//开始判断
//0x44 & 0xC4 = Pause
//0x46 & 0xC6 = Play
//0x4B & 0xCB = Next
//0x4C & 0xCC = Prev
//Pass_thru = 0x7c
if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_PLAY)){
Param=PLAYER_PLAY;
if(Player->Get(Player,Param,&PlayState,sizeof(PlayState))==ERR_NONE)
{
PlayState = !PlayState;
}else{
PlayState = 1 - PlayState;
}
Player->Set(Player,Param,&PlayState,sizeof(PlayState));
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_PAUSE)){
Param=PLAYER_PLAY;
if(Player->Get(Player,Param,&PlayState,sizeof(PlayState))==ERR_NONE)
{
PlayState = !PlayState;
}else{
PlayState = 1 - PlayState;
}
Player->Set(Player,Param,&PlayState,sizeof(PlayState));
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_STOP)){
Param=PLAYER_STOP;
Player->Set(Player,Param,NULL,1);
Percent.Num = 0;
Percent.Den = TRACKMAX;
Player->Set(Player,PLAYER_PERCENT,&Percent,sizeof(Percent));
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_PREV)){
Param=PLAYER_PREV;
Player->Set(Player,Param,NULL,0);
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_NEXT)){
Param=PLAYER_NEXT;
Player->Set(Player,Param,NULL,0);
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_BACKWARD)){
Param=PLAYER_MOVEBACK;
Player->Set(Player,Param,NULL,0);
}else if(btAvrcp.OpId==GetAvrcpCmd(AVRCP_FORWARD)){
Param=PLAYER_MOVEFFWD;
Player->Set(Player,Param,NULL,0);
}
if(GetAvrcpCmd(AVRCP_OFFSCREEN)){
if(GetAvrcpCmd(AVRCP_LOCK_KEYPAD)) keybd_event(0x85,0,0,0);
SetSystemPowerState( NULL, POWER_STATE_IDLE, POWER_FORCE);
}
}
//SendMessage(HWND_BROADCAST, WM_USER+1985, btAvrcp.OpId, btAvrcp.OpCode);
}
}
}
exit_bt:
if (hMsgQ) {
CloseMsgQueue(hMsgQ);
hMsgQ=NULL;
}
return 0;
}

The AVRCP plugin can be donwloaded from here. Since this plugin uses code from the older interface.plg you'll lose usage of skins and the bigger file browser and playlist items (may also affect the subtitles). I didn't test it (and I don't have a BT ear piece) so I don't know how it behaves with this build).