📄 vod.cpp
字号:
#include <fastgl/fastgl.h>#include <fastgl/widgets.h>
#include <png.h>
#include <iconv.h>
//wav
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/soundcard.h>
#include <limits.h>
#include <tds.h>
#include <tdsconvert.h>
#include "sqldb.h"
#include "notepic.h"
#include "wavfuncs.h"
#include "osd.h"
static int value=300;
static fgl::FGTimer *tmr;
fgl::FGDrawBuffer txtbk(540,20,fgl::FGDrawBuffer::BMP_MEM, FGColor(255,255,255));
int wav_recording = 0; //false
int wav_playing = 0; //false
bool wav_play_pthread=false;
bool wav_record_pthread=false;
bool GetSQLTime();
pthread_t rec_id;
int Layer[10];
int ln=0;
int LEFTTOP=80;
char mem_name[12];
char mem_pass[4];
char LR_val[10];
char openrecsong_val[10];
char poweroff_val[12];
char hostname[128];
char expenseid[20];
char pystr[20];
char str_defsql[256];
CLinkList star;
CLinkList songs;
CLinkList LS_recsong;
CLinkList SelSongs;
CLinkList LS_AD;
int search_path_count=0;
int CurPage=0;
int CurSongsPage=0;
int MaxStarPage,MaxStar,MaxSongs,MaxSongsPage;
int MaxSongPerPage=15;
int CurSelectSong=0;
int LastSelectSong=-1;
//*****************sqlserver del
TDSSOCKET *tds;
TDSLOGIN *login;
TDSCONTEXT *context;
TDSCONNECTION *connection;
//*****************sqlserver del
struct RECT
{
int x;
int y;
int width;
int height;
}rect[8],rct[8];
struct STRUsong
{
char songname[100];
char songer[20];
char songcode[10];
};
int const MAX_SELECT_SONG=14;
bool karaok =true; //true为无伴唱,false为有伴唱
int code_one_bit=0; //0左 karaok 1右 karaok
int code_sec_bit=0; //0单轨 1 双轨 一轨karaok 2 双轨 二轨karaok
char curplaycode[10]="NULL";
char curplaysongname[80]="NULL";
char curplaypath[50]="NULL";
char curwavfile[80];
fgl::FGWindow *wnd; //主窗口
fgl::FGWindow *wndsonglist; //主窗口
fgl::FGWindow *wndtimeup; //主窗口
fgl::FGBitmap *b; //背景图片
fgl::FGBitmap *vip; //会员提示图片
fgl::FGBitmap *bmpsong; //已点歌曲清单图片
fgl::FGBitmap *icon; //按键图标
fgl::FGBitmap *gif; //按键图标
fgl::FGDrawBuffer *textbuf;
NotePic notepicture; //提示图片类
fgl::FGDrawBuffer labbk(640,40,fgl::FGDrawBuffer::BMP_MEM, CYELLOW);
fgl::FGFontProperty *song18;
fgl::FGFontProperty *songosd;
fgl::FGFontProperty *yao20;
fgl::FGFontProperty *asc;
//定义流动字幕颜色
int RED =255;
int GREEN =255;
int BLUE =255;
int win_name;//lase_win_name;
#define MENU 1000
#define STAR 1008
#define SONGS 1002
#define SONG 1003
#define ID 1004
#define LANGUAGE 1005
#define WORDS 1006
#define WORDSLETTER 1036
#define TOP100 1007
#define DEFSQL 1040
#define CHORUS 1009//合唱
#define SONGLIST 1010
#define RECSONG 1011
#define RECSONGLIST 1012
#define MEMBER 1013
#define ISMEMBER 1014
#define MEMBERLISTSONG 1015
#define PY 1017
#define STARTYPE 1018
#define STARPY 1019
#define IFMEMBER 1020 //1.注册2.登陆
#define MEMBERREGISTER 1021 //注册 register
#define LOGINNAME 1022 //登陆
#define LOGINPASS 1023 //登陆
#define REGNAME 1025 //注册名
#define REGPASS 1026 //注册密
#define CHANGEPASS 1037 //注册密
#define EXITMEMBER 1024 //退出会员
#define LETTER 1027 //语种按字母分类letter.jpg
#define TIMEOUTUP 1029 //时间到
#define DISCO 1033 //DISCO
#define POWEROFF 1034
#define AD 1035 //广告
char memberid[20];
bool MEMBERLOGINED=false; //会员登陆状态
bool MESSAGED=false; //是否弹出对话框
bool MEMBERADDSONG =false; //会员加歌状态
bool ISTIMEUP = false; //房间超时
bool LASTISTIMEUP = false; //上一次房间超时
int timeuploop=0; //超时循环测试300(1分钟)
char str_id[10];
char str_key[2];
int wordlen=0;
//********************dvd def
#define ALLOW_OS_CODE
#include "rmexternalapi.h"
#include <sys/stat.h>
#include <unistd.h>
#include <setjmp.h>
#include <sys/time.h>
#include <pthread.h>
#include <signal.h>
#include <sys/time.h>
#define TOTAL_MEMORY_NEEDED_PER_BOARD (8*1024*1024)
RMTcontrolInterface ctrl = {(RMTcontrolInterface) NULL, };
RMTfileControl ctrl_file; //????
#define PAL_SCREEN_WIDTH 720
#define PAL_SCREEN_HEIGHT 576
#define NTSC_SCREEN_WIDTH 720
#define NTSC_SCREEN_HEIGHT 480
static jmp_buf g_env;
RMuint32 memoryPeakUsage;
RMuint8 *pStart;
#define PLAYING 90001
#define STOPPING 90002
bool IFMute=false;
bool IFFastPlay=false;
bool IFPause=false;
bool IFDISCO=false;
int dvd_play_stats=STOPPING;
RMuint32 seektime;
int line=0;
int movex=600;
int timeout=0;//播放wav回到播放dvd时设置的延时
unsigned short *utmp;
char out[255];
char ctmp[256]="我饿发";
char ctmpsongid[50]="你选择了";
char ctmprec[50]="录歌中";
char ctmpplay[50]="回放时间";
char dispstr[50]="";
int id_times=0;//osd显示延时
//int word_times=0;//gui文件显示延时
int osd_disp_stat; //10显示流动字幕,1显示编码点歌,2显示录音进度,3录音回放,4提示按键图表
RMuint32 duration=1;
RMuint32 tolsec=1;
RMuint32 playtime=1;
RMuint32 toltime=1;
char wavpath[50];
static int Tcount=1;
int count_min=0;
//********************dvd defend
#pragma hdrstop#pragma argsused
int show_cur_rec_song();
int keystop();
int keyplay();
int keyLR();
int LR(int left_right);
void *play_wav_file(void *);
bool UpdateHits(char *hits);
//读取配置文件
int INI_MoveTitle(FILE * fp,char *title)
{
char tmpline[80];
while (!feof(fp))
{
if( fgets(tmpline,80,fp )!=NULL )
{
if (strstr(tmpline,title)!=0)
break;
}
}
}
int INI_GetKey( char val[256],char *filename, char *title,char *key)
{
FILE * fp;
char tmpline[256];
char *delim="=";
char *p;
if ((fp = fopen( filename, "r")) == NULL )
{return 0; }
INI_MoveTitle(fp,title); //fp移至[xxxx]处
while (!feof(fp))
{
if((fgets(tmpline,80,fp )!=NULL)&&(strstr(tmpline,"[")==0)&&(strstr(tmpline,"]")==0))
{
if(strcmp(key,strtok(tmpline,delim))==0)
{
strcpy(val,strtok(NULL,delim));
val[strlen(val)-2]=0;//将字符串尾部的'\0'替换成0
return 1;
}
}
else
break;
}
fclose ( fp );
return 0;
}
int INI_SQL( char val[256],char *filename)
{
FILE * fp;
char tmpline[256];
strcpy(tmpline,"");
strcpy(val,"");
if ((fp = fopen( filename, "r")) == NULL )
{return 0; }
while (!feof(fp))
{
if(fgets(tmpline,256,fp )!=NULL)
{
//strcat(val,tmpline);
printf("tmpline:%s %d\n",tmpline,strlen(tmpline));
memcpy(val,tmpline,strlen(tmpline));
printf("val:%s %d\n",val,strlen(val));
//val[strlen(tmpline)]=0;
// val[strlen(val)-2]=0;//将字符串尾部的'\0'替换成0
return 1;
}
else
break;
}
fclose ( fp );
return 0;
}
//gb18030转unicode
int code_convert(char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open("unicode","gb18030");
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//***********
//画透明文本*
//***********
void redrawtext(fgl::FGWindow *wnd,fgl::FGBitmap *b, char instr[],int x,int y,int w,int h,fgl::FGFontProperty *font)
{
unsigned short *xx;
char out[255];
code_convert(instr,strlen(instr),out,255);
xx=(unsigned short*)&out[2];
wnd->bitblit(x,y,x,y,w,h,b,fgl::BITBLIT_COPY );
//font->Bold(1);
//
wnd->WindowTextUnicode(x+2,y,w,xx, font, FGColor(1,1,1), 0);
font->Solid();
//font->Bold(0);
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(249,124,0), 0);
wnd->WindowRepaintUser(x,y,w,h);
}
void WriteSongRow(fgl::FGWindow *wnd,fgl::FGBitmap *b, char instr1[],char instr2[],int row,fgl::FGFontProperty *font,int select)
{
unsigned short *xx;
char out[255];
int x,y,w,h;
if (select==0)//当前歌曲
{
wnd->bitblit(60,row*20+LEFTTOP,60,row*20+LEFTTOP,540,20,b,fgl::BITBLIT_COPY );
wnd->bitblit(60,row*20+LEFTTOP,0,0,540,20,&txtbk,fgl::BITBLIT_COPY );
x=80;
y=row*20+LEFTTOP;
w=420;
h=20;
code_convert(instr1,strlen(instr1),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(255,255,125), 0);
x=500;
y=row*20+LEFTTOP;
w=80;
h=20;
code_convert(instr2,strlen(instr2),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(255,255,125), 0);
wnd->WindowRepaintUser(60,row*20+LEFTTOP,540,20);
}
if (select==1)//非当前歌曲
{
wnd->bitblit(60,row*20+LEFTTOP,60,row*20+LEFTTOP,540,20,b,fgl::BITBLIT_COPY );
x=80;
y=row*20+LEFTTOP;
w=420;
h=20;
code_convert(instr1,strlen(instr1),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(249,124,0), 0);
x=500;
y=row*20+LEFTTOP;
w=80;
h=20;
code_convert(instr2,strlen(instr2),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(249,124,0), 0);
wnd->WindowRepaintUser(60,row*20+LEFTTOP,540,20);
}
if (select==2)//选中当前歌曲
{
wnd->bitblit(60,row*20+LEFTTOP,60,row*20+LEFTTOP,540,20,b,fgl::BITBLIT_COPY );
wnd->bitblit(60,row*20+LEFTTOP,0,0,540,20,&txtbk,fgl::BITBLIT_COPY );
x=80;
y=row*20+LEFTTOP;
w=420;
h=20;
code_convert(instr1,strlen(instr1),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font,FGColor(190,252,3), 0);
x=500;
y=row*20+LEFTTOP;
w=80;
h=20;
code_convert(instr2,strlen(instr2),out,255);
xx=(unsigned short*)&out[2];
wnd->WindowTextUnicode(x,y,w,xx, font, FGColor(190,252,3), 0);
wnd->WindowRepaintUser(60,row*20+LEFTTOP,540,20);
}
}
//自定义文本颜色
void redrawtext_color(fgl::FGWindow *wnd,fgl::FGBitmap *b, char instr[],int x,int y,int w,int h,fgl::FGFontProperty *font,FGColor color)
{
unsigned short *xx;
char out[255];
code_convert(instr,strlen(instr),out,255);
xx=(unsigned short*)&out[2];
wnd->bitblit(x,y,x,y,w,h,b,fgl::BITBLIT_COPY );
wnd->WindowTextUnicode(x,y,w,xx, font, color, 0);
wnd->WindowRepaintUser(x,y,w,h);
//wnd->WindowRect(x,y,w,h,FGColor(255,255,255));
}
//*****************
//设置歌星图片坐标*
//*****************
void initPicRect()
{ rect[0].x=84;
rect[0].y=83;
rect[0].width=80;
rect[0].height=100;
rct[0].x=85;
rct[0].y=195;
rct[0].width=80;
rct[0].height=20;
rect[1].x=211;
rect[1].y=83;
rect[1].width=80;
rect[1].height=100;
rct[1].x=212;
rct[1].y=195;
rct[1].width=80;
rct[1].height=20;
rect[2].x=340;
rect[2].y=83;
rect[2].width=80;
rect[2].height=100;
rct[2].x=341;
rct[2].y=195;
rct[2].width=80;
rct[2].height=20;
rect[3].x=469;
rect[3].y=83;
rect[3].width=80;
rect[3].height=100;
rct[3].x=470;
rct[3].y=195;
rct[3].width=80;
rct[3].height=20;
rect[4].x=83;
rect[4].y=264;
rect[4].width=80;
rect[4].height=100;
rct[4].x=85;
rct[4].y=376;
rct[4].width=80;
rct[4].height=20;
rect[5].x=211;
rect[5].y=264;
rect[5].width=80;
rect[5].height=100;
rct[5].x=212;
rct[5].y=376;
rct[5].width=80;
rct[5].height=20;
rect[6].x=340;
rect[6].y=264;
rect[6].width=80;
rect[6].height=100;
rct[6].x=341;
rct[6].y=376;
rct[6].width=80;
rct[6].height=20;
rect[7].x=469;
rect[7].y=264;
rect[7].width=80;
rect[7].height=100;
rct[7].x=470;
rct[7].y=376;
rct[7].width=80;
rct[7].height=20;
}
//*****************
//显示歌星头像图片*
//*****************
void ShowPicture(int x,int y,char *path)
{ char PicPath[256];
fgl::FGBitmap *c;
printf(PicPath,"/chsimage/%s.jpg",path);
if (access(PicPath,F_OK)!=0) //无此头像
{strcpy(PicPath,"/chsimage/FHuman.jpg");}
c = new fgl::FGBitmap(PicPath);
wnd->WindowPutBitmap(x, y, 0,0,80, 100, c);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -