Ratdvd Navigator and Delphi?

I´m currently writing a little “Media.-Center” for my HPTC (in Delphi).
I want to put all my DVB-Recordings on this PC in RATDVD-Format.
Now i have the Problem that the DVD-NAVigator does not work.
How can i get it to work.

The Build-graph code (using DSPACK):

...
const
  CLSID_Default_DirectSound_Device:      TGUID = '{79376820-07D0-11CF-A24D-0020AFD79767}';
  //RATDVD
  CLSID_XEBDAD_Audio_Decoder:    TGUID = '{2148F547-FDBC-4780-988A-75A4932587E0}';
  CLSID_xebnavigation:           TGUID = '{482D10B6-376E-4411-8A17-833800A065DB}';
  CLSID_XEBDSP_Video_Decoder:   TGUID = '{AA2FC7D0-91D0-4149-B97B-2539DBE78627}';
  //RATDVD
......

var
    Default_DirectSound_Device,
    XEBDAD_Audio_Decoder,
    xebnavigation,
    XEBDSP_Video_Decoder,
    VideoWin,dvdnav: IBaseFilter;
    hr: HRESULT;

    XEBNAV_VideoOut,
    XEBNAV_AudioOut,
    XEBNAV_SubtitleOut,

    XEBDAD_Audio_Decoder_in,
    XEBDAD_Audio_Decoder_Out,
    Directsound_In,

    XEBDSPVideoIn,
    XEBDSPSupPictureIn,
    XEBDSP_VideoOut,
    VMRInput0    : IPin;


...
function TvideoVMRPlay.Build_ratdvd_graph(Filename:string):boolean;
var
 HR: HRESULT;
 messages:string;
begin
 result:=False;
 messages:='';
 hr := CoCreateInstance(CLSID_Default_DirectSound_Device, nil, CLSCTX_INPROC, IID_IBaseFilter, Default_DirectSound_Device);
 hr := CoCreateInstance(CLSID_XEBDAD_Audio_Decoder, nil, CLSCTX_INPROC, IID_IBaseFilter, XEBDAD_Audio_Decoder);
 hr := CoCreateInstance(CLSID_xebnavigation, nil, CLSCTX_INPROC, IID_IBaseFilter, xebnavigation);
 hr := CoCreateInstance(CLSID_XEBDSP_Video_Decoder, nil, CLSCTX_INPROC,  IID_IBaseFilter, XEBDSP_Video_Decoder);
 (FilterGraph As IGraphBuilder).AddFilter(xebnavigation, StringToOLEStr('RATDVD Source: ' + FileName));
 (FilterGraph As IGraphBuilder).AddFilter(Default_DirectSound_Device, 'Default DirectSound Device');
 (FilterGraph As IGraphBuilder).AddFilter(XEBDAD_Audio_Decoder, 'RATDVD Audio Decoder');
 (FilterGraph As IGraphBuilder).AddFilter(XEBDSP_Video_Decoder, 'RATDVD Video Decoder');
 (FilterGraph As IGraphBuilder).AddFilter(VideoWin, 'RATDVD VideoWin');
  hr := (xebnavigation As IFileSourceFilter).Load(StringToOLEStr(FileName), nil);
  if FAILED(hr) then   messages:='Failed RATDVD Source Load';
  hr := xebnavigation.FindPin(StringToOLEStr('1'), XEBNAV_VideoOut);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBNAV_VideoOut';
  hr := xebnavigation.FindPin(StringToOLEStr('2'), XEBNAV_AudioOut);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBNAV_AudioOut';
  hr := xebnavigation.FindPin(StringToOLEStr('3'), XEBNAV_SubtitleOut);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBNAV_AudioOut';
  hr := XEBDAD_Audio_Decoder.FindPin(StringToOLEStr('In'), XEBDAD_Audio_Decoder_in);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBDAD_Audio_Decoder_in';
  hr := XEBDAD_Audio_Decoder.FindPin(StringToOLEStr('Out'), XEBDAD_Audio_Decoder_Out);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBDAD_Audio_Decoder_Out';
  hr := Default_DirectSound_Device.FindPin(StringToOLEStr('Audio Input pin (rendered)'), Directsound_In);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find Directsound_In';
  hr := XEBDSP_Video_Decoder.FindPin(StringToOLEStr('In1'), XEBDSPVideoIn);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBDSPVideoIn';
  hr := XEBDSP_Video_Decoder.FindPin(StringToOLEStr('In2'), XEBDSPSupPictureIn);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBDSPSupPictureIn';
  hr := XEBDSP_Video_Decoder.FindPin(StringToOLEStr('Out'), XEBDSP_VideoOut);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed find XEBDSP_VideoOut';
  hr := (FilterGraph As IGraphBuilder).FindFilterByName('VideoWindow', VideoWin);
  // The filtername for the TVideoWindow is the same as the name you gave the component, eg. the componentname. :)
  if FAILED(hr) then  messages:=messages+#13#10+'Failed filter VideoWindow';
  hr := VideoWin.FindPin(StringToOLEStr('VMR Input0'), VMRInput0);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed Video Window Input';
  hr := (FilterGraph As IGraphBuilder).Connect(XEBNAV_VideoOut, XEBDSPVideoIn);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed connect XEBNAV_VideoOut-> XEBDSPVideoIn';
  hr := (FilterGraph As IGraphBuilder).Connect(XEBNAV_SubtitleOut, XEBDSPSupPictureIn);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed connect XEBNAV_SubtitleOut -> XEBDSPSupPictureIn';
  hr := (FilterGraph As IGraphBuilder).Connect(XEBNAV_AudioOut, XEBDAD_Audio_Decoder_in);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed connect XEBNAV_AudioOut -> XEBDAD_Audio_Decoder_in';
  hr := (FilterGraph As IGraphBuilder).Connect(XEBDAD_Audio_Decoder_Out, Directsound_In);
  if FAILED(hr) then  messages:=messages+#13#10+'Failed connect XEBDAD_Audio_Decoder_Out -> Directsound_In';
  hr := (FilterGraph As IGraphBuilder).Connect(XEBDSP_VideoOut, VMRInput0);
  if FAILED(hr) then   messages:=messages+#13#10+'Failed connect XEBDSP_VideoOut -> VMRInput0';
  if Messages<>'' then ShowMessage(Messages) else result:=True;
end;



The Next-Chapter “try”, which does not work (DVDControl2):

procedure TvideoVMRPlay.NextChapter;
var
  DvdCmd: IDvdCmd;
  DVDControl2 : IDVDControl2;
  iposition : IMediaPosition;
  aktime:double;
begin
 if FilterGraph.Active then
 begin
   If Succeeded(FilterGraph.QueryInterface(IID_IDVDControl2, DVDControl2)) then
   begin
      DvdControl2.PlayNextChapter(DVD_CMD_FLAG_None, DvdCmd);
      DVDControl2 := Nil;
   end else
   If Succeeded(FilterGraph.QueryInterface(IID_IMediaPosition, iposition)) then
   begin
    iposition.get_CurrentPosition(aktime);
    iposition.put_CurrentPosition(aktime+300);// 5 Minutes
   end;
 end;
end;


Also theres some other issues:

  • Sometimes playback stutters (after every ~8-10 min) on a 3.2 ghz P4 PC !!

Maybe someone can help me
gsmgrufti

is anyone of the developers here ?
please help (also C-code welcome …)
BTW: Feel free to post the code on your home page for delphi-Users