Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Apr 26, 2024 19:21

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VLC --> OpenGL whithout SDL
BeitragVerfasst: Mi Mär 19, 2014 11:28 
Offline
DGL Member

Registriert: Fr Feb 04, 2011 19:05
Beiträge: 13
I post this Thread in English and in German, because i couldn't find an example for this Problem - especially in pascal.
Da ich bisher kein Beispiel finden konnte (insbesondere in Pascal), poste ich meine Lösung in Englisch und in Deutsch.

Target:
Playing nearly all video formats in my own programm using an OpenGL-Texture to play it in an OpenGL-World.
Ziel:
Nahezu alle Videoformate auf einer OpenGL-Textur in einer OpenGL-Welt nutzbar zu machen

Secondary tragets:
  • low CPU-Usage
  • Videos up to FullHD
  • OS-Independency
  • preferably no dependencies ecept VLC --> no SDL
Nebenziele:
  • Geringe CPU-Last
  • Videos bis zu FullHD
  • Betriebssystemsunabhängigkeit
  • möglichst keine Abhängigkeiten außer VLC --> kein SDL

Example-Code (Windows-Oly - a few modifications needed for OS independance):
Peispiel-Code (Nur Windows - für Betriebssystemsunabhängigkeit sind kleine Änderungen notwendig):
Code:
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  9.   StdCtrls, PasLibVlcUnit, {$IFDEF WINDOWS}Windows,{$ELSE} {$ENDIF} dglOpenGL,
  10.   glBitmap;
  11.  
  12. type
  13.   tRGBA = record
  14.     r,g,b,a : byte;
  15.   end;
  16.  
  17.   tVLCcontext = record
  18.     VLCpixels:array of tRGBA;
  19.   end;
  20.  
  21.   { TForm1 }
  22.  
  23.   TForm1 = class(TForm)
  24.     Button1: TButton;
  25.     Button2: TButton;
  26.     Edit1: TEdit;
  27.     Panel1: TPanel;
  28.     Timer2: TTimer;
  29.     procedure Button1Click(Sender: TObject);
  30.     procedure Button2Click(Sender: TObject);
  31.     procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
  32.     procedure FormCreate(Sender: TObject);
  33.   private
  34.     { private declarations }
  35.     StartTime, TimeCount, FrameCount,fc  : Cardinal; //FrameCounter
  36.     Frames, DrawTime,VLCRenderTime       : Cardinal; //& Timebased Movement
  37.     DoPlay,NewFrame,fClose: Boolean;
  38.     fTexture1: TglBitmap2D; // Instanz unserer Textur
  39.  
  40.     procedure SetupGL;
  41.     procedure Render;
  42.     procedure RenderVLC;
  43.     procedure RenderGL;
  44.   public
  45.     { public declarations }
  46.  
  47.     libvlc_instance        :libvlc_instance_t_ptr;
  48.     libvlc_media           :libvlc_media_t_ptr;
  49.     libvlc_media_player    :libvlc_media_player_t_ptr;
  50.     libvlc_media_track_info:libvlc_media_track_info_t_ptr;
  51.  
  52.     VideoWidth,VideoHeight:Integer;
  53.  
  54.     VLCctx:tVLCcontext;
  55.  
  56.     DC                                : HDC;  //Handle auf Zeichenfläche
  57.     RC                                : HGLRC;//Rendering Context
  58.   end;
  59.  
  60. function libvlc_video_lock(opaque : Pointer; var planes : Pointer) : Pointer; cdecl;
  61. function libvlc_video_unlock(opaque : Pointer; picture : Pointer; planes : Pointer) : Pointer; cdecl;
  62. function libvlc_video_display(opaque : Pointer; picture : Pointer) : Pointer; cdecl;
  63.  
  64. var
  65.   Form1: TForm1;
  66.  
  67. implementation
  68.  
  69. {$R *.lfm}
  70.  
  71. { TForm1 }
  72.  
  73. procedure TForm1.Button1Click(Sender: TObject);
  74. var i:Integer;
  75. begin
  76.   libvlc_media := libvlc_media_new_path(libvlc_instance, PChar(Edit1.Text));
  77.   libvlc_media_parse(libvlc_media);
  78.  
  79.   libvlc_media_get_tracks_info(libvlc_media,libvlc_media_track_info);
  80.   VideoWidth :=0;
  81.   VideoHeight:=0;
  82.   if libvlc_media_track_info = nil then ShowMessage('kein Medium geladen!')
  83.   else
  84.     begin
  85.       for i:=0 to 2 do
  86.         begin
  87.           if (libvlc_media_track_info+i)^.i_type = libvlc_track_video then
  88.             begin
  89.               VideoWidth :=(libvlc_media_track_info+i)^.video.i_width;
  90.               VideoHeight:=(libvlc_media_track_info+i)^.video.i_height;
  91.             end;
  92.         end;
  93.     end;
  94.  
  95.   libvlc_media_player := libvlc_media_player_new_from_media(libvlc_media);
  96.   libvlc_media_release(libvlc_media);
  97.  
  98.   Setlength(VLCctx.vlcpixels,VideoWidth*VideoHeight*4);
  99.  
  100.   libvlc_video_set_format(libvlc_media_player,'RGBA',VideoWidth,VideoHeight,VideoWidth*4);
  101.   libvlc_video_set_callbacks(libvlc_media_player,@libvlc_video_lock,@libvlc_video_unlock,@libvlc_video_display,@VLCctx);
  102.  
  103.  
  104.   libvlc_media_player_play(libvlc_media_player);
  105.  
  106.   Timer2.Enabled:=true;
  107.   DoPlay:=true;
  108.   StartTime:= GetTickCount;
  109.   while DoPlay do
  110.     begin
  111.       Render;
  112.       Application.ProcessMessages;
  113.     end;
  114.   if fClose then libvlc_media_player_stop(libvlc_media_player);
  115. end;
  116.  
  117. procedure TForm1.Button2Click(Sender: TObject);
  118. begin
  119.   //BorderStyle:=bsNone;
  120.   WindowState:=wsFullscreen;
  121.   Panel1.Width :=ClientWidth;
  122.   Panel1.Height:=ClientHeight;
  123.  
  124.  
  125.   glViewport(0, 0, ClientWidth, ClientHeight);
  126.   glMatrixMode(GL_PROJECTION);
  127.   glLoadIdentity;
  128.   glOrtho(0,1024,0,768,0,128);
  129.   glMatrixMode(GL_MODELVIEW);
  130. end;
  131.  
  132. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
  133. begin
  134.   fClose:=True;
  135.   DoPlay:=false;
  136. end;
  137.  
  138. procedure TForm1.FormCreate(Sender: TObject);
  139. begin
  140.   libvlc_dynamic_dll_init_with_path('C:\Program Files (x86)\VideoLAN\VLC');        //Prozedur zum auffinden der Bibliothek einfügen!
  141.   libvlc_instance := libvlc_new(0, nil);
  142.  
  143.   //OpenGL:
  144.  
  145.   DC:= GetDC(Panel1.Handle);
  146.   if not InitOpenGL then Application.Terminate;
  147.   RC:= CreateRenderingContext( DC,
  148.                                [opDoubleBuffered],
  149.                                32,
  150.                                24,
  151.                                0,0,0,
  152.                                0);
  153.   ActivateRenderingContext(DC, RC);
  154.  
  155.   SetupGL;
  156.   TimeCount:=0;
  157.   FrameCount:=0;
  158.   fc:=0;
  159.   DoPlay:=false;
  160.   NewFrame:=false;
  161. end;
  162.  
  163. procedure TForm1.RenderVLC;
  164. var pp: TglBitmapPixelPosition;
  165.     pf: TglBitmapPixelPositionFields;
  166. begin
  167.   pf:=[ffX];
  168.   pp.Fields:=pf;
  169.   pp.X:=VideoWidth;
  170.   pp.Y:=VideoHeight;
  171.  
  172.   if fTexture1 = nil then
  173.     begin
  174.       fTexture1 := TglBitmap2D.Create(pp,ifRGBA8);
  175.       fTexture1.AddAlphaFromValue(255);
  176.       fTexture1.FreeDataAfterGenTexture := False;
  177.     end;
  178.  
  179.   Move(VLCctx.vlcpixels[0],tRGBA(fTexture1.Scanline[0]^),VideoHeight*VideoWidth*4);
  180.  
  181.   fTexture1.GenTexture;
  182.   glActiveTexture(GL_TEXTURE0);
  183.   fTexture1.Bind;
  184. end;
  185.  
  186. function libvlc_video_lock(opaque : Pointer; var planes : Pointer) : Pointer; cdecl;
  187. begin
  188.   planes := @(Form1.VLCctx.vlcpixels[0]);
  189.   Result:=nil;
  190. end;
  191.  
  192. function libvlc_video_unlock(opaque : Pointer; picture : Pointer; planes : Pointer) : Pointer; cdecl;
  193. begin
  194.   Inc(Form1.fc);
  195.   Form1.NewFrame:=true;
  196.   Form1.VLCRenderTime:=GetTickCount;
  197.  
  198.   Result:=nil;
  199. end;
  200.  
  201. function libvlc_video_display(opaque : Pointer; picture : Pointer) : Pointer; cdecl;
  202. begin
  203.   ////////////////
  204. end;
  205.  
  206. procedure TForm1.SetupGL;
  207. begin
  208.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  209.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  210.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  211.  
  212.   glEnable(GL_ALPHA_TEST);
  213.   glAlphaFunc(GL_GREATER, 0.1);
  214.  
  215.   glMatrixMode(GL_PROJECTION);
  216.   glLoadIdentity;
  217.   glOrtho(0,1024,0,768,0,128);
  218.   glMatrixMode(GL_MODELVIEW);
  219. end;
  220.  
  221. procedure TForm1.RenderGL;
  222. begin
  223.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  224.  
  225.   glLoadIdentity;
  226.   glTranslatef(0, 0, -5);
  227.   glBegin(GL_QUADS);
  228.     glVertex3f(   0,   0, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  229.     glVertex3f(1024,   0, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  230.     glVertex3f(1024, 768, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  231.     glVertex3f(   0, 768, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  232.   glEnd;
  233.  
  234.   SwapBuffers(DC);
  235. end;
  236.  
  237. procedure TForm1.Render;
  238. begin
  239.   if not DoPlay then begin sleep(20); exit; end;
  240.   if NewFrame then
  241.     begin
  242.       NewFrame:=false;
  243.       RenderVLC;
  244.       RenderGL;
  245.  
  246.       TimeCount:= GetTickCount - StartTime;
  247.       Inc(FrameCount);
  248.       Frames:= FrameCount*1000 div TimeCount;
  249.       Drawtime:=TimeCount div FrameCount;
  250.     end
  251.   else
  252.     begin
  253.       sleep(1);
  254.     end;
  255. end;
  256.  
  257. end.


Zuletzt geändert von Wuppertaler am Fr Mär 21, 2014 10:51, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VLC --> OpenGL whithout SLD
BeitragVerfasst: Fr Mär 21, 2014 08:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
VLC --> OpenGL whithout SLD


Der Betreff dieses Beitrags sollte wohl heißen: "VLC --> OpenGL whithout SDL"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VLC --> OpenGL whithout SDL
BeitragVerfasst: Fr Mär 21, 2014 10:52 
Offline
DGL Member

Registriert: Fr Feb 04, 2011 19:05
Beiträge: 13
Ich hab den Schreibfehler korrigiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VLC --> OpenGL whithout SDL
BeitragVerfasst: Mo Dez 01, 2014 18:03 
Offline
DGL Member

Registriert: Mo Dez 01, 2014 16:13
Beiträge: 4
Programmiersprache: Lazarus, Delphi
thank Wuppertaler, you have been very helpful to me.
I use PasLibVlc library and visual components.
TPasLibVlcMediaList and TPaslibVlcPlayer.
My project is to render mylist media all files , out in 720x576 format.
I want to ask you if you help me to associate

libvlc_video_set_format (PasLibVlcMediaList1.Player, 'RGBA', videoWidth, videoHeight, videoWidth * 4);

libvlc_video_set_callbacks

(PasLibVlcMediaList1.Player,@libvlc_video_lock,@libvlc_video_unlock,@libvlc_video_display,@VLCctx);

If you can write an example without libvlc_media_player using TPasLibVlcMediaList.Player.

note: I used: libvlc_media_player: PasLibVlcMediaList1.Player.GetPlayerHandle = (); and DC: = GetDC

(TPasLibVlcPlayer1.Handle);
My result TPasLibVlcPlayer1 black no video, only audio

Sorry for my English.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VLC --> OpenGL whithout SDL
BeitragVerfasst: Di Dez 02, 2014 07:30 
Offline
DGL Member

Registriert: Mo Dez 01, 2014 16:13
Beiträge: 4
Programmiersprache: Lazarus, Delphi
Now my project, thanks to Wuppertaler, performs video TPasLibVlcList and TPasLibVlcPlayer visual component. My problem is that the video does not render in the format 720x576. In Tfrmapri4.Render procedures; NewFrame is always False. why libvlc_video_unlock function inactive newFrame True?

Code:
  1.  
  2. unit apri4;
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  9.   StdCtrls, Buttons, PasLibVlcPlayerUnit, PasLibVlcUnit, dglOpenGL, glBitmap,
  10.   Windows;
  11.  
  12. type
  13.   tRGBA = record
  14.     r,g,b,a : byte;
  15.   end;
  16.   tVLCcontext = record
  17.     VLCpixels:array of tRGBA;
  18.   end;
  19.  
  20.   { Tfrmapri4 }
  21.  
  22.   Tfrmapri4 = class(TForm)
  23.     Button1: TButton;
  24.     Button2: TButton;
  25.     Button3: TButton;
  26.     Label1: TLabel;
  27.     Label2: TLabel;
  28.     Panel1: TPanel;
  29.     Panel2: TPanel;
  30.     Panel3: TPanel;
  31.     PasLibVlcMediaList1: TPasLibVlcMediaList;
  32.     Player1: TPasLibVlcPlayer;
  33.     SpeedButton1: TSpeedButton;
  34.     Timer2: TTimer;
  35.     procedure Button1Click(Sender: TObject);
  36.     procedure Button2Click(Sender: TObject);
  37.     procedure Button3Click(Sender: TObject);
  38.     procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
  39.     procedure FormCreate(Sender: TObject);
  40.     procedure FormHide(Sender: TObject);
  41.     procedure SpeedButton1Click(Sender: TObject);
  42.   private
  43.     { private declarations }
  44.     StartTime, TimeCount, FrameCount,fc  : Cardinal;
  45.     Frames, DrawTime,VLCRenderTime       : Cardinal;
  46.     DoPlay,NewFrame,fClose: Boolean;
  47.     fTexture1: TglBitmap2D;
  48.     procedure SetupGL;
  49.     procedure Render;
  50.     procedure RenderVLC;
  51.     procedure RenderGL;
  52.   public
  53.     { public declarations }
  54.     libvlc_instance        :libvlc_instance_t_ptr;
  55.     libvlc_media           :libvlc_media_t_ptr;
  56.     libvlc_media_player    :libvlc_media_player_t_ptr;
  57.     libvlc_media_track_info:libvlc_media_track_info_t_ptr;
  58.     VideoWidth,VideoHeight:Integer;
  59.     VLCctx:tVLCcontext;
  60.     DC                                : HDC;
  61.     RC                                : HGLRC;
  62.   end;
  63.  
  64.   function libvlc_video_lock(opaque : Pointer; var planes : Pointer) : Pointer; cdecl;
  65.   function libvlc_video_unlock(opaque : Pointer; picture : Pointer; planes : Pointer) : Pointer; cdecl;
  66.   function libvlc_video_display(opaque : Pointer; picture : Pointer) : Pointer; cdecl;
  67.  
  68.  
  69. var
  70.   frmapri4: Tfrmapri4;
  71.   mio_width:integer = 720;
  72.   mio_hength:integer = 576;
  73.  
  74.  
  75. implementation
  76.  
  77. {$R *.lfm}
  78.  
  79. { Tfrmapri4 }
  80.  
  81. procedure Tfrmapri4.FormCreate(Sender: TObject);
  82. begin          // PlayList
  83.   PasLibVlcMediaList1.Clear();
  84.   PasLibVlcMediaList1.Add('c:\film\01\01.mp4'); // 480 x 320
  85.   PasLibVlcMediaList1.Add('c:\film\02\02.mpg'); // 1920 x 1080
  86.  
  87.   //******************************************
  88.   libvlc_dynamic_dll_init_with_path('C:\Program Files (x86)\VideoLAN\VLC');
  89.   libvlc_instance := libvlc_new(0, nil);
  90.   //OpenGL:
  91.   DC:= GetDC(Player1.Handle);    //Handle TPasLibVlcPlayer compont visual
  92.   if not InitOpenGL then Application.Terminate;
  93.   RC:= CreateRenderingContext( DC,
  94.                                [opDoubleBuffered],
  95.                                32,
  96.                                24,
  97.                                0,0,0,
  98.                                0);
  99.   ActivateRenderingContext(DC, RC);
  100.   SetupGL;
  101.   TimeCount:=0;
  102.   FrameCount:=0;
  103.   fc:=0;
  104.   DoPlay:=false;
  105.   NewFrame:=false;
  106. end;
  107.  
  108. procedure Tfrmapri4.FormHide(Sender: TObject);
  109. begin
  110.   PasLibVlcMediaList1.Stop;
  111.   PasLibVlcMediaList1.Clear();
  112. end;
  113.  
  114. procedure Tfrmapri4.SpeedButton1Click(Sender: TObject);
  115. begin
  116.    PasLibVlcMediaList1.Next();
  117. end;
  118.  
  119. procedure Tfrmapri4.SetupGL;
  120. begin
  121.   glClearColor(0.3, 0.4, 0.7, 0.0);
  122.   glEnable(GL_DEPTH_TEST);
  123.   glEnable(GL_CULL_FACE);
  124.   glEnable(GL_ALPHA_TEST);
  125.   glAlphaFunc(GL_GREATER, 0.1);
  126.   glMatrixMode(GL_PROJECTION);
  127.   glLoadIdentity;
  128.   glOrtho(0,mio_width,0,mio_hength,0,128);
  129.   //glOrtho(0,1024,0,768,0,128);
  130.   glMatrixMode(GL_MODELVIEW);
  131. end;
  132.  
  133. procedure Tfrmapri4.Render;
  134. begin
  135.    if not DoPlay then begin sleep(20); exit; end;
  136.   if NewFrame then  // NewFrame in debug always False ????
  137.     begin
  138.       NewFrame:=false;
  139.       RenderVLC;
  140.       RenderGL;
  141.       TimeCount:= GetTickCount - StartTime;
  142.       Inc(FrameCount);
  143.       Frames:= FrameCount*1000 div TimeCount;
  144.       Drawtime:=TimeCount div FrameCount;
  145.     end
  146.   else
  147.     begin
  148.       sleep(1);
  149.     end;
  150. end;
  151.  
  152. procedure Tfrmapri4.RenderVLC;
  153. var pp: TglBitmapPixelPosition;
  154.     pf: TglBitmapPixelPositionFields;
  155. begin
  156.   pf:=[ffX];
  157.   pp.Fields:=pf;
  158.   pp.X:=VideoWidth;
  159.   pp.Y:=VideoHeight;
  160.   if fTexture1 = nil then
  161.     begin
  162.       fTexture1 := TglBitmap2D.Create(pp,ifRGBA8);
  163.       fTexture1.AddAlphaFromValue(255);
  164.       fTexture1.FreeDataAfterGenTexture := False;
  165.     end;
  166.   Move(VLCctx.vlcpixels[0],tRGBA(fTexture1.Scanline[0]^),VideoHeight*VideoWidth*4);
  167.   fTexture1.GenTexture;
  168.   glActiveTexture(GL_TEXTURE0);
  169.   fTexture1.Bind;
  170. end;
  171.  
  172. procedure Tfrmapri4.RenderGL;
  173. begin
  174.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  175.   glLoadIdentity;
  176.   glTranslatef(0, 0, -5);
  177.   glBegin(GL_QUADS);
  178.   glVertex3f(   0,   0, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  179.   glVertex3f(mio_width,   0, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  180.   glVertex3f(mio_width, mio_hength, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  181.   glVertex3f(   0, mio_hength, 0); glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  182.   glEnd;
  183.   SwapBuffers(DC);
  184. end;
  185.  
  186. procedure Tfrmapri4.Button1Click(Sender: TObject);
  187. begin
  188.   VideoWidth :=mio_width;      //  VideoWidth :=720;
  189.   VideoHeight:=mio_hength;     //  VideoHeight:=576;
  190.  
  191.   Setlength(VLCctx.vlcpixels,VideoWidth*VideoHeight*4);
  192.  
  193.   libvlc_media :=  PasLibVlcMediaList1.GetItemAtIndex(0);
  194.   libvlc_media_parse(libvlc_media);
  195.  
  196.   libvlc_media_player := libvlc_media_player_new_from_media(libvlc_media);
  197.   libvlc_media_release(libvlc_media);
  198.  //******************************  Render video  720 x 576 ****************
  199.  
  200.    libvlc_video_set_format(libvlc_media_player,'RGBA',VideoWidth,VideoHeight,VideoWidth*4);
  201.    libvlc_video_set_callbacks(libvlc_media_player,@libvlc_video_lock,@libvlc_video_unlock,@libvlc_video_display,@VLCctx);
  202.  
  203.  // ******* Play to PasLibVlcmediaList  component visual ******************
  204.   PasLibVlcMediaList1.Play();
  205.  // ***************************************
  206.     Timer2.Enabled:=true;
  207.   DoPlay:=true;
  208.   StartTime:= GetTickCount;
  209.   while DoPlay do
  210.     begin
  211.       Render;
  212.       Application.ProcessMessages;
  213.     end;
  214.   if fClose then libvlc_media_player_stop(libvlc_media_player);
  215.   if fClose then PasLibVlcMediaList1.Stop;
  216. end;
  217.  
  218. procedure Tfrmapri4.Button2Click(Sender: TObject);
  219. begin
  220.   PasLibVlcMediaList1.Player.LogoSetFile('C:\film\logo\120x100.png');
  221.   PasLibVlcMediaList1.Player.LogoSetEnable(1);
  222.   label1.Caption:= inttostr(PasLibVlcMediaList1.Player.GetVideoWidth());
  223.   label2.Caption:= inttostr(PasLibVlcMediaList1.Player.GetVideoHeight());
  224. end;
  225.  
  226. procedure Tfrmapri4.Button3Click(Sender: TObject);
  227. begin
  228.   PasLibVlcMediaList1.Stop;
  229. end;
  230.  
  231. procedure Tfrmapri4.FormCloseQuery(Sender: TObject; var CanClose: boolean);
  232. begin
  233.     fClose:=True;
  234.   DoPlay:=false;
  235. end;
  236.  
  237. function libvlc_video_lock(opaque : Pointer; var planes : Pointer) : Pointer; cdecl;
  238. begin
  239.   planes := @(frmapri4.VLCctx.vlcpixels[0]);
  240.   Result:=nil;
  241. end;
  242.  
  243. function libvlc_video_unlock(opaque : Pointer; picture : Pointer; planes : Pointer) : Pointer; cdecl;
  244. begin
  245.   Inc(frmapri4.fc);
  246.   frmapri4.NewFrame:=true;
  247.   frmapri4.VLCRenderTime:=GetTickCount;
  248.   Result:=nil;
  249. end;
  250.  
  251. function libvlc_video_display(opaque : Pointer; picture : Pointer) : Pointer; cdecl;
  252. begin
  253.     ////////////////
  254. end;
  255.  
  256. end.  
  257.  


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 91 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.118s | 17 Queries | GZIP : On ]