AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Verwenden von IAMMediaContent
Thema durchsuchen
Ansicht
Themen-Optionen

Verwenden von IAMMediaContent

Ein Thema von EWeiss · begonnen am 5. Okt 2018 · letzter Beitrag vom 6. Okt 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Implementation von IAMMediaContent

  Alt 5. Okt 2018, 22:17
Ok! Sorry hat sich erledigt.
So geht es!

Delphi-Quellcode:
function TEVMRPlayer.GetYoutubeFilterTitle(var Title: PWideChar): HRESULT;
var
  MediaContent: IAMMediaContent;
begin

  Result := E_FAIL;

  if not Assigned(srcFilter) then
    exit;

  if IsUrl then
  begin
    if DYDYoutubeFilter <> nil then
    begin
      srcFilter.QueryInterface(IID_IAMMediaContent, MediaContent);
      Result := MediaContent.get_Title(Title);
      if not SUCCEEDED(Result) then
        ReportError('YoutubeFilterTitle fails', Result);
    end;
  end;
end;
srcFilter ist in dem Fall
hr := GraphBuilder.AddSourceFilter(PWideChar(MediaFile), 'SRC01', srcFilter);

Was für ein Aufwand bis das mal alles steht.
Pic von Vimeo, YouTube

Jetzt fehlt noch die Video Auflösung und die Laufzeit.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Implementation von IAMMediaContent

  Alt 5. Okt 2018, 22:57
Du willst also IAMMediaContent gar nicht implementieren sondern verwenden? Dann ist der Titel Implementation von IAMMediaContent etwas irreführend.

Wenn du nicht aufpasst, dann hast du hier einen schönen Memleak, denn du musst den zurückgegebenen Text von IAMMediaContent::get_Title auch wieder aus dem Speicher räumen (laut Dokumentation).

Am einfachsten ist das, wenn du dieses direkt in der Methode TEVMRPlayer.GetYoutubeFilterTitle erledigst. Dort kopierst du den Text von unmanaged zu managed (von dem Pointer in einen string) und gibst den unmanaged Speicher direkt frei.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Implementation von IAMMediaContent

  Alt 5. Okt 2018, 22:58
Zitat:
Dort kopierst du den Text von unmanaged zu managed und gibst den unmanaged Speicher direkt frei.
Beispiel?
Ich denke du meinst das so.
Delphi-Quellcode:
function TEVMRPlayer.GetYoutubeFilterTitle(var Title: PWideChar): HRESULT;
var
   MediaContent: IAMMediaContent;
   pTitle: PWideChar;
begin

   Result := E_FAIL;

   if not Assigned(srcFilter) then
     exit;

   if IsUrl then
   begin
     if DYDYoutubeFilter <> nil then
     begin
       srcFilter.QueryInterface(IID_IAMMediaContent, MediaContent);
       Result := MediaContent.get_Title(pTitle);
       Title := pTitle;
       pTitle := nil;
       if not SUCCEEDED(Result) then
         ReportError('YoutubeFilterTitle fails', Result);
     end;
   end;
end;
Zitat:
(von dem Pointer in einen string)
Der soll PWideChar bleiben.

Zitat:
Dann ist der Titel Implementation von IAMMediaContent etwas irreführend.
geändert..

gruss

Geändert von EWeiss ( 5. Okt 2018 um 23:14 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:12
So sollte das tun
Delphi-Quellcode:
function TEVMRPlayer.GetYoutubeFilterTitle(out Title: string): HRESULT;
var
  MediaContent: IAMMediaContent;
  pbstrTitle: PWideChar;
begin

  Result := E_FAIL;

  if not Assigned(srcFilter) then
    exit;

  if IsUrl then
  begin
    if DYDYoutubeFilter <> nil then
    begin
      srcFilter.QueryInterface(IID_IAMMediaContent, MediaContent);
      Result := MediaContent.get_Title(pbstrTitle);
      if not SUCCEEDED(Result) then
        ReportError('YoutubeFilterTitle fails', Result)
      else
        begin
          Title := pbstrTitle;
          FreeMem(pbstrTitle);
        end;
    end;
  end;
end;
Zitat:
(von dem Pointer in einen string)
Der soll PWideChar bleiben.
Bitte erkläre mir doch einmal, was ein PWideChar ist? Etwa ein Pointer und deswegen fängt der Typ auch mit einem P an?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:15
Ahh dann war ich fast richtig. Siehe mein Edit.
Danke dir.

Werde das auch bei Description berücksichtigen (ist noch nicht implementiert)
Zitat:
Bitte erkläre mir doch einmal, was ein PWideChar ist? Etwa ein Pointer und deswegen fängt der Typ auch mit einem P an?
Du wolltest den Pointer in einen string kopieren.
Deshalb habe ich gesagt der soll PWideChar bleiben. (Pointer of WideChar)

Ich habe es so verstanden.
Delphi-Quellcode:
var
  x: string
//..
x := string(Title);
gruss

Geändert von EWeiss ( 5. Okt 2018 um 23:20 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:20
Ahh dann war ich fast richtig. Siehe mein Edit.
Nun ja, fast richtig - es hatte sich bei dir eigentlich nichts gändert. Ob man den Pointer direkt an Title übergibt oder über eine Zwischenvariable, das ändert halt nichts.

Der FreeMem auf dem Pointer ist das Entscheidende
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Verwenden von IAMMediaContent

  Alt 5. Okt 2018, 23:21
Ahh dann war ich fast richtig. Siehe mein Edit.
Nun ja, fast richtig - es hatte sich bei dir eigentlich nichts gändert. Ob man den Pointer direkt an Title übergibt oder über eine Zwischenvariable, das ändert halt nichts.

Der FreeMem auf dem Pointer ist das Entscheidende
Also doch fast! Wollen wir mal nicht so kleinlich sein..

Auf jeden fall danke für den Hinweis.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz