Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313099
  • 博文数量: 71
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 762
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 13:31
文章分类

全部博文(71)

文章存档

2014年(3)

2013年(8)

2011年(9)

2010年(38)

2009年(13)

我的朋友

分类:

2010-03-02 15:50:04

http://blog.sina.com.cn/s/blog_5be1061c0100azwy.html

首先,我们需要把common.lib添加到VS2005/项目属性/链接器/输入项中,同时把common.dll和common.lib放到项目文件夹中,TCPMP中的COMMON文件夹放到上一层文件夹。

其次,在程序中对插件进行初始化和构建播放器节点的操作。具体如下:

//Context init

    Context_Init((tchar_t*)T("TCPMP"),(tchar_t*)T("0.72SRC"),3,(tchar_t*)lpCmdLine,NULL);

    //上下文创建

     context* p=Context();

    

    //播放模块的初始化

     myplayer=NULL;

     if(p) myplayer=(player*)(p->Player);

     //播放窗口关联

     Context_Wnd(g_hWnd);

   

     //错误处理函数设定

     p->Error.This=myplayer;

     p->Error.Func=DoError;

   

     //视频 音频的类节点

array VOutput;

array AOutput;

      NodeEnumClass(&VOutput,VOUT_CLASS);

      NodeEnumClass(&AOutput,AOUT_CLASS);

    如需要EQ可以如下设定:

     //EQ 节点

Eq=NodeEnumObject(NULL,EQUALIZER_ID);

有了播放节点myplayer,我们就可以对播放进行控制相关的操作了。以下列举常用操作;

1.播放和暂停

      (myplayer->Get(myplayer,PLAYER_PLAY,&State,sizeof(State))==ERR_NONE)

      {

                   State = !State;                                                    myplayer->Set(myplayer,PLAYER_PLAY,&State,sizeof(State));

     }

                                         

     2.停止

       myplayer->Set(myplayer,PLAYER_STOP,NULL,0);     

         f.Num = 0;

         f.Den = 1;

        myplayer->Set(myplayer,PLAYER_PERCENT,&f,sizeof(f));

    

     3.下曲 上曲

                                                                          myplayer->Set(myplayer,PLAYER_NEXT,NULL,0);                                                                                                  myplayer->Set(myplayer,PLAYER_PREV,NULL,0);

     4.静音与否

   if (myplayer->Get(myplayer,PLAYER_MUTE,&State,sizeof(State))==ERR_NONE)

     {

                State = !State;

                myplayer->Set(myplayer,PLAYER_MUTE,&State,sizeof(State));

      }

  

5.音量或者和设置                                                                         myplayer->Get(myplayer,PLAYER_VOLUME,&vols,sizeof(vols));

myplayer->Set(myplayer,PLAYER_VOLUME,&vols,sizeof(vols));

 

6.播放模式设置

Int ModeSelY=1,ModeSelN=0;

myplayer->Set(myplayer,PLAYER_REPEAT,&ModeSelY,sizeof(ModeSelY));

myplayer->Set(myplayer,PLAYER_SHUFFLE,&ModeSelN,sizeof(int));

 

     另:

    

tchar_t sss[128];

myplayer->CommentByName(myplayer,0,PlayerComment(COMMENT_ALBUM),sss,TSIZEOF(sss));

是获得ID3信息的途径。

支持参数如下:

#define COMMENT_TITLE           0x110

#define COMMENT_ARTIST          0x111

#define COMMENT_ALBUM           0x112

#define COMMENT_LANGUAGE        0x113

#define COMMENT_GENRE           0x114

#define COMMENT_AUTHOR          0x115

#define COMMENT_COPYRIGHT       0x116

#define COMMENT_PRIORITY        0x117

#define COMMENT_COMMENT         0x118

#define COMMENT_TRACK           0x119

#define COMMENT_YEAR            0x11A

#define COMMENT_COVER           0x11B

#define COMMENT_REDIRECT        0x11C

 

对视频而言,我们需要设置一个区域来显示视频,也就是设定PLAYER_VIEWPORT.注意此处的rect结构体的定义,不同于我们使用的RECT.其定义如下:

typedef struct rect

{

     int x;

     int y;

     int Width;

     int Height;

 

} rect;

 

对于图像的旋转(IF_OPTION_ROTATE)放大缩小(IF_OPITION_ZOOM)操作可以参考interface.c中Command函数的使用。

 

视频驱动的选择可以通过 PLAYER_VOUTPUTID参数设置,具体参考代码。

 

最后,使用完插件后,我们需要卸载它们。具体操作如下:

if(Context()->Wnd)

     {

         NodeRegSaveValue(0,REG_INITING,NULL,0,TYPE_INT);

         NodeRegSave((node*)myplayer);

         Context()->Error.Func = NULL;

         ArrayClear(&VOutput);

         ArrayClear(&AOutput);

        

         Context_Wnd(NULL);

    }

Context_Done();

阅读(830) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~