Delphi-OpenCV/include/ffmpeg/examples/ffplay/ffplay.dpr
Laex d0ed19d461 Rebuild opencv_classes.dll
Signed-off-by: Laex <laex@bk.ru>
2014-02-13 22:45:52 +04:00

152 lines
4.5 KiB
ObjectPascal

(*
* Copyright (c) 2003 Fabrice Bellard
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*)
program ffplay;
{$APPTYPE CONSOLE}
{$R *.res}
{$include ffmpeg.inc}
uses
System.SysUtils,
Winapi.Windows,
System.SysUtils,
System.Classes,
SDL,
ffmpeglib in '..\..\ffmpeglib.pas',
ctypes in '..\..\..\ctypes\ctypes.pas',
avformat in '..\..\libavformat\avformat.pas',
avio in '..\..\libavformat\avio.pas',
avutil in '..\..\libavutil\avutil.pas',
buffer in '..\..\libavutil\buffer.pas',
dict in '..\..\libavutil\dict.pas',
frame in '..\..\libavutil\frame.pas',
log in '..\..\libavutil\log.pas',
opt in '..\..\libavutil\opt.pas',
pixfmt in '..\..\libavutil\pixfmt.pas',
rational in '..\..\libavutil\rational.pas',
samplefmt in '..\..\libavutil\samplefmt.pas',
parseutils in '..\..\libavutil\parseutils.pas',
swscale in '..\..\libswscale\swscale.pas',
pixdesc in '..\..\libavutil\pixdesc.pas',
imgutils in '..\..\libavutil\imgutils.pas',
mem in '..\..\libavutil\mem.pas',
error in '..\..\libavutil\error.pas',
avfilter in '..\..\libavfilter\avfilter.pas',
buffersink in '..\..\libavfilter\buffersink.pas',
mathematics in '..\..\libavutil\mathematics.pas',
libavcodec.avcodec in '..\..\libavcodec\libavcodec.avcodec.pas',
buffersrc in '..\..\libavfilter\buffersrc.pas',
errno in '..\..\libavutil\errno.pas',
cmdutils in 'cmdutils.pas';
const
dummy_videodriver = 'SDL_VIDEODRIVER=dummy';
Var
flags: Integer;
is_: TVideoState;
vi: pSDL_VideoInfo;
begin
try
av_log_set_flags(AV_LOG_SKIP_REPEATED);
parse_loglevel(options);
(* register all codecs, demux and protocols *)
{$IF CONFIG_AVDEVICE}
avdevice_register_all();
{$ENDIF}
{$IF CONFIG_AVFILTER}
avfilter_register_all();
{$ENDIF}
av_register_all();
avformat_network_init();
init_opts();
signal(SIGINT, sigterm_handler); (* Interrupt (ANSI). *)
signal(SIGTERM, sigterm_handler); (* Termination (ANSI). *)
show_banner(argc, argv, options);
parse_options(nil, argc, argv, options, opt_input_file);
if Length(input_filename) = 0 then
begin
show_usage();
av_log(nil, AV_LOG_FATAL, 'An input file must be specified'#13#10);
av_log(nil, AV_LOG_FATAL, Format('Use -h to get full help or, even better, run ''man %s'''#13#10, [program_name]));
Halt(1);
end;
if not display_disable then
video_disable := true;
flags := SDL_INIT_VIDEO or SDL_INIT_AUDIO or SDL_INIT_TIMER;
if audio_disable then
flags := flags and (not SDL_INIT_AUDIO);
if display_disable then
SDL_putenv(dummy_videodriver); (* For the event queue, we always need a video driver. *)
// #if !defined(__MINGW32__) && !defined(__APPLE__)
// flags |= SDL_INIT_EVENTTHREAD; (* Not supported on Windows or Mac OS X *)
// #endif
if (SDL_Init(flags) <> 0) then
begin
av_log(nil, AV_LOG_FATAL, 'Could not initialize SDL - %s'#13#10, SDL_GetError());
av_log(nil, AV_LOG_FATAL, '(Did you set the DISPLAY variable?)'#13#10);
Halt(1);
end;
if (not display_disable) then
begin
vi := SDL_GetVideoInfo();
fs_screen_width := vi^.current_w;
fs_screen_height := vi^.current_h;
end;
SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
if (av_lockmgr_register(lockmgr) <> 0) then
begin
av_log(nil, AV_LOG_FATAL, 'Could not initialize lock manager!'#13#10);
do_exit(nil);
end;
av_init_packet(flush_pkt);
flush_pkt.data := @flush_pkt;
is_ := stream_open(input_filename, file_iformat);
if not Assigned(is_) then
begin
av_log(nil, AV_LOG_FATAL, 'Failed to initialize VideoState!'#13#10);
do_exit(nil);
end;
event_loop(is_);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.