Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Jak vydolovat timecode z DV-AVI ?

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Jak vydolovat timecode z DV-AVI ?

Autor: Ja On

10:18:24 13.03.2010

Zdravím,
nezná někdo způsob, jak "vydolovat" z DV-AVI (soubor se staženým obsahem z SD kamery) timecode ? Dopracoval jsem se k tomu, že to jde přes SampleGrabber, ale nejsem schopen nastavit MediaType. Program dělám v Delphi a DirectX9. Oba níže uvedené příklady fungují pro MediaType audio a video, ale ne timecode.

Díky

Prog1 (nativní volání):
if not k(CoCreateInstance(CLSID_FilterGraph,nil,CLSCTX_INPROC_SERVER,IGraphBuilder,Graph),0) then exit;
if not k(CoCreateInstance(CLSID_SampleGrabber,nil,CLSCTX_INPROC,IID_IBaseFilter,SampleGrabberFilter),0) then exit;
if not k(SampleGrabberFilter.QueryInterface(IID_ISampleGrabber,SampleGrabber),0) then exit;
ZeroMemory(@am_media_type,sizeof(am_media_type));
am_media_type.majortype:=MEDIATYPE_Timecode;
am_media_type.subtype:=MEDIASUBTYPE_NULL;
am_media_type.formattype:=FORMAT_None;
if not k(SampleGrabber.SetMediaType(am_media_type),0) then exit;
if not k(Graph.AddFilter(SampleGrabberFilter,'Sample Grabber'),0) then exit;
if not k(Graph.QueryInterface(IID_IMediaControl,MediaControl),0) then exit;
if not k(MediaControl.RenderFile('d:\cass.avi'),0) then exit;
if not k(SampleGrabber.GetConnectedMediaType(am_media_type),0) then exit;
if not k(SampleGrabber.SetBufferSamples(true),0) then exit;
if not k(SampleGrabber.SetOneShot(true),0) then exit;
sampleCallback:=TSampleGrabberCB.Create; (TSampleGrabberCB je má vlastní třída)
SampleGrabber.SetCallback(sampleCallback,0);
MediaControl.Run;

Prog2 (pomocí DsPack):
FilterGraph:=TFilterGraph.create(form1);
FilterGraph.GraphEdit:=True;
VideoWindow:=TVideoWindow.create(form1);
VideoWindow.parent:=form1;
VideoWindow.FilterGraph:=FilterGraph;
VideoWindow.VMROptions.Mode:=vmrWindowed;
VideoWindow.VMROptions.Streams:=1;
SampleGrabber:=TSampleGrabber.Create(form1);
SampleGrabber.OnBuffer:=SampleGrabberBuffer;
SampleGrabber.FilterGraph:=FilterGraph;
SampleGrabber.MediaType.MajorType:=MEDIATYPE_Timecode;
SampleGrabber.MediaType.SubType:=MEDIASUBTYPE_Null;
SampleGrabber.MediaType.FormatType:=FORMAT_Null;
//SampleGrabber.UpdateMediaType;
//FilterGraph.Active:=False;
FilterGraph.Active:=true;
FilterGraph.RenderFile('d:\cass.avi');
FilterGraph.Play;

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: