// use address of FrameOutputAdapter instance as output filename
// -f rawh264/rawmjpeg/rawrgb/rawyuv: enable FrameOutputAdapter
// for example:
//   -f rawrgb   -c:v rawvideo -pix_fmt bgr24
//   -f rawmjpeg -c:v mjpeg    -pix_fmt yuvj422p
//   -f rawyuv   -c:v rawvideo -pix_fmt yuv420p
//   -f rawh264  -c:v libx264  -pix_fmt yuv420p


type
  POutputFrameInfo = ^TOutputFrameInfo;
  TOutputFrameInfo = record
    FormatContext: PAVFormatContext;
    PixelFormat: TAVPixelFormat;
    Width: Integer;
    Height: Integer;
    FrameNumber: Integer;
    Packet: PAVPacket;
  end;

  TWriteFrameEvent = procedure(Sender: TObject; AFrameInfo: POutputFrameInfo) of object;

  TFrameOutputAdapter = class(TFFBaseComponent)
  public
    destructor Destroy; override;
    property FrameInfo: POutputFrameInfo read FFrameInfo;
    property UserData: Pointer read FData write FData;
  published
    property OnWriteHeader: TNotifyEvent read FOnWriteHeader write FOnWriteHeader;
    property OnWriteFrame: TWriteFrameEvent read FOnWriteFrame write FOnWriteFrame;
    property OnWriteClose: TNotifyEvent read FOnWriteClose write FOnWriteClose;
  end;

procedure register_frameoutput;
