Einzelnen Beitrag anzeigen

ekke

Registriert seit: 14. Nov 2009
18 Beiträge
 
#23

Re: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 28. Mai 2010, 13:47
Was die "Key Frames" (oder Intra-Frames) angeht habe ich etwas gefunden.
Die function ac_read_package liefert einen Zeiger zurück, der mehr enthält als die Deklaration TAc_Package hergibt.
Ich habe wie folgt deklariert
Delphi-Quellcode:
  
const
  AV_PKT_FLAG_KEY = $0001;

type
  PAVPacket = ^TAVPacket;
  TAVPacket = packed record {56}
    pts: int64; ///< presentation time stamp in time_base units
    dts: int64; ///< decompression time stamp in time_base units
    data: PByte;
    size: integer;
    stream_index: integer;
    flags: integer;
    duration: integer; ///< presentation duration in time_base units (0 if not available)
    destruct: procedure (p: PAVPacket);
    priv: pointer;
    pos: int64; ///< byte position in stream, -1 if unknown
  end;
  PAc_package_Overload = ^TAc_package_Overload;
  TAc_package_Overload = packed record
    {The stream the package belongs to.}
    stream_index: integer;
    _offset1 : integer;
    AVPacket: TAVPacket;
  end;
Dann kann das Ergebnis mittels typecast wie folgt verwendet werden

Delphi-Quellcode:
pack := ac_read_package(inst);
...
iskeyframe := ((PAc_package_Overload(pack)^.AVPacket.flags and AV_PKT_FLAG_KEY) <> 0);
die Boolsche Variable "iskeyframe" wird True wenn ein Startbild decodiert wurde. Funktioniert bei meinem H.264 HD test strom fast (selten ist das erste Frame nur grau) immer.

Gruß Ekkehard
  Mit Zitat antworten Zitat