Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
bdc4796f
Commit
bdc4796f
authored
23 years ago
by
Fabrice Bellard
Browse files
Options
Downloads
Patches
Plain Diff
win32 fixes
Originally committed as revision 81 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
6ed7422a
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ffmpeg.c
+78
-44
78 additions, 44 deletions
ffmpeg.c
with
78 additions
and
44 deletions
ffmpeg.c
+
78
−
44
View file @
bdc4796f
...
...
@@ -18,20 +18,25 @@
*/
#include
<stdlib.h>
#include
<stdio.h>
#include
<string.h>
#include
<errno.h>
#ifndef CONFIG_WIN32
#include
"config.h"
#include
<unistd.h>
#include
<fcntl.h>
#include
<sys/ioctl.h>
#include
<errno.h>
#include
<sys/time.h>
#include
<string.h>
#include
<sys/poll.h>
#include
<termios.h>
#include
<sys/time.h>
#include
<sys/resource.h>
#include
<ctype.h>
#endif
#include
"avformat.h"
#define MAXINT64 INT64_C(0x7fffffffffffffff)
typedef
struct
{
const
char
*
name
;
int
flags
;
...
...
@@ -135,6 +140,8 @@ typedef struct AVInputFile {
buffering */
}
AVInputFile
;
#ifndef CONFIG_WIN32
/* init terminal so that we can grab keys */
static
struct
termios
oldtty
;
...
...
@@ -593,6 +600,8 @@ int av_grab(AVFormatContext *s)
goto
fail1
;
}
#endif
/* CONFIG_WIN32 */
int
read_ffserver_streams
(
AVFormatContext
*
s
,
const
char
*
filename
)
{
int
i
;
...
...
@@ -892,13 +901,17 @@ static int av_encode(AVFormatContext **output_files,
int
nb_input_files
,
AVStreamMap
*
stream_maps
,
int
nb_stream_maps
)
{
int
ret
,
i
,
j
,
k
,
n
,
nb_istreams
,
nb_ostreams
=
0
;
int
ret
,
i
,
j
,
k
,
n
,
nb_istreams
=
0
,
nb_ostreams
=
0
;
AVFormatContext
*
is
,
*
os
;
AVCodecContext
*
codec
,
*
icodec
;
AVOutputStream
*
ost
,
**
ost_table
=
NULL
;
AVInputStream
*
ist
,
**
ist_table
=
NULL
;
INT64
min_pts
,
start_time
;
AVInputFile
file_table
[
nb_input_files
];
AVInputFile
*
file_table
;
file_table
=
(
AVInputFile
*
)
malloc
(
nb_input_files
*
sizeof
(
AVInputFile
));
if
(
!
file_table
)
goto
fail
;
memset
(
file_table
,
0
,
sizeof
(
file_table
));
...
...
@@ -913,7 +926,7 @@ static int av_encode(AVFormatContext **output_files,
ist_table
=
av_mallocz
(
nb_istreams
*
sizeof
(
AVInputStream
*
));
if
(
!
ist_table
)
return
-
ENOMEM
;
goto
fail
;
for
(
i
=
0
;
i
<
nb_istreams
;
i
++
)
{
ist
=
av_mallocz
(
sizeof
(
AVInputStream
));
...
...
@@ -1153,7 +1166,7 @@ static int av_encode(AVFormatContext **output_files,
/* select the input file with the smallest pts */
redo:
file_index
=
-
1
;
min_pts
=
(
1ULL
<<
63
)
-
1
;
min_pts
=
MAXINT64
;
for
(
i
=
0
;
i
<
nb_istreams
;
i
++
)
{
ist
=
ist_table
[
i
];
if
(
!
ist
->
discard
&&
!
file_table
[
ist
->
file_index
].
eof_reached
&&
ist
->
pts
<
min_pts
)
{
...
...
@@ -1310,7 +1323,7 @@ static int av_encode(AVFormatContext **output_files,
total_size
=
url_ftell
(
&
oc
->
pb
);
buf
[
0
]
=
'\0'
;
ti
=
(
1ULL
<<
63
)
-
1
;
ti
=
MAXINT64
;
vid
=
0
;
for
(
i
=
0
;
i
<
nb_ostreams
;
i
++
)
{
ost
=
ost_table
[
i
];
...
...
@@ -1328,13 +1341,14 @@ static int av_encode(AVFormatContext **output_files,
}
}
ti1
=
ti
/
1000000
.
0
;
ti1
=
(
double
)
ti
/
1000000
.
0
;
if
(
ti1
<
0
.
1
)
ti1
=
0
.
1
;
bitrate
=
(
double
)(
total_size
*
8
)
/
ti1
/
1000
.
0
;
sprintf
(
buf
+
strlen
(
buf
),
"size=%8LdkB time=%0.1f bitrate=%6.1fkbits/s"
,
total_size
/
1024
,
ti1
,
bitrate
);
sprintf
(
buf
+
strlen
(
buf
),
"size=%8.0fkB time=%0.1f bitrate=%6.1fkbits/s"
,
(
double
)
total_size
/
1024
,
ti1
,
bitrate
);
fprintf
(
stderr
,
"%s
\r
"
,
buf
);
fflush
(
stderr
);
...
...
@@ -1356,7 +1370,7 @@ static int av_encode(AVFormatContext **output_files,
total_size
=
url_ftell
(
&
oc
->
pb
);
buf
[
0
]
=
'\0'
;
ti
=
(
1ULL
<<
63
)
-
1
;
ti
=
MAXINT64
;
vid
=
0
;
for
(
i
=
0
;
i
<
nb_ostreams
;
i
++
)
{
ost
=
ost_table
[
i
];
...
...
@@ -1379,8 +1393,9 @@ static int av_encode(AVFormatContext **output_files,
ti1
=
0
.
1
;
bitrate
=
(
double
)(
total_size
*
8
)
/
ti1
/
1000
.
0
;
sprintf
(
buf
+
strlen
(
buf
),
"size=%8LdkB time=%0.1f bitrate=%6.1fkbits/s"
,
total_size
/
1024
,
ti1
,
bitrate
);
sprintf
(
buf
+
strlen
(
buf
),
"size=%8.0fkB time=%0.1f bitrate=%6.1fkbits/s"
,
(
double
)
total_size
/
1024
,
ti1
,
bitrate
);
fprintf
(
stderr
,
"%s
\n
"
,
buf
);
}
...
...
@@ -1410,6 +1425,8 @@ static int av_encode(AVFormatContext **output_files,
ret
=
0
;
fail1:
free
(
file_table
);
if
(
ist_table
)
{
for
(
i
=
0
;
i
<
nb_istreams
;
i
++
)
{
ist
=
ist_table
[
i
];
...
...
@@ -1550,6 +1567,7 @@ void opt_audio_channels(const char *arg)
audio_channels
=
atoi
(
arg
);
}
#ifdef CONFIG_GRAB
void
opt_video_device
(
const
char
*
arg
)
{
v4l_device
=
strdup
(
arg
);
...
...
@@ -1559,6 +1577,7 @@ void opt_audio_device(const char *arg)
{
audio_device
=
strdup
(
arg
);
}
#endif
void
opt_audio_codec
(
const
char
*
arg
)
{
...
...
@@ -2004,6 +2023,7 @@ void opt_output_file(const char *filename)
video_codec_id
=
CODEC_ID_NONE
;
}
#ifndef CONFIG_WIN32
INT64
getutime
(
void
)
{
struct
rusage
rusage
;
...
...
@@ -2011,6 +2031,12 @@ INT64 getutime(void)
getrusage
(
RUSAGE_SELF
,
&
rusage
);
return
(
rusage
.
ru_utime
.
tv_sec
*
1000000LL
)
+
rusage
.
ru_utime
.
tv_usec
;
}
#else
INT64
getutime
(
void
)
{
return
gettime
();
}
#endif
void
show_formats
(
void
)
{
...
...
@@ -2101,42 +2127,46 @@ void show_help(void)
}
const
OptionDef
options
[]
=
{
{
"L"
,
0
,
{
show_licence
},
"show license"
},
{
"h"
,
0
,
{
show_help
},
"show help"
},
{
"formats"
,
0
,
{
show_formats
},
"show available formats, codecs, protocols, ..."
},
{
"f"
,
HAS_ARG
,
{
opt_format
},
"force format"
,
"fmt"
},
{
"i"
,
HAS_ARG
,
{
opt_input_file
},
"input file name"
,
"filename"
},
{
"y"
,
OPT_BOOL
,
{
int_arg
:
&
file_overwrite
},
"overwrite output files"
},
{
"map"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_map
},
"set input stream mapping"
,
"file:stream"
},
{
"t"
,
HAS_ARG
,
{
opt_recording_time
},
"set the recording time"
,
"duration"
},
{
"title"
,
HAS_ARG
|
OPT_STRING
,
{
str_arg
:
&
str_title
},
"set the title"
,
"string"
},
{
"author"
,
HAS_ARG
|
OPT_STRING
,
{
str_arg
:
&
str_author
},
"set the author"
,
"string"
},
{
"copyright"
,
HAS_ARG
|
OPT_STRING
,
{
str_arg
:
&
str_copyright
},
"set the copyright"
,
"string"
},
{
"comment"
,
HAS_ARG
|
OPT_STRING
,
{
str_arg
:
&
str_comment
},
"set the comment"
,
"string"
},
{
"L"
,
0
,
{
(
void
*
)
show_licence
},
"show license"
},
{
"h"
,
0
,
{
(
void
*
)
show_help
},
"show help"
},
{
"formats"
,
0
,
{
(
void
*
)
show_formats
},
"show available formats, codecs, protocols, ..."
},
{
"f"
,
HAS_ARG
,
{
(
void
*
)
opt_format
},
"force format"
,
"fmt"
},
{
"i"
,
HAS_ARG
,
{
(
void
*
)
opt_input_file
},
"input file name"
,
"filename"
},
{
"y"
,
OPT_BOOL
,
{
(
void
*
)
&
file_overwrite
},
"overwrite output files"
},
{
"map"
,
HAS_ARG
|
OPT_EXPERT
,
{
(
void
*
)
opt_map
},
"set input stream mapping"
,
"file:stream"
},
{
"t"
,
HAS_ARG
,
{
(
void
*
)
opt_recording_time
},
"set the recording time"
,
"duration"
},
{
"title"
,
HAS_ARG
|
OPT_STRING
,
{
(
void
*
)
&
str_title
},
"set the title"
,
"string"
},
{
"author"
,
HAS_ARG
|
OPT_STRING
,
{
(
void
*
)
&
str_author
},
"set the author"
,
"string"
},
{
"copyright"
,
HAS_ARG
|
OPT_STRING
,
{
(
void
*
)
&
str_copyright
},
"set the copyright"
,
"string"
},
{
"comment"
,
HAS_ARG
|
OPT_STRING
,
{
(
void
*
)
&
str_comment
},
"set the comment"
,
"string"
},
/* video options */
{
"b"
,
HAS_ARG
,
{
opt_video_bitrate
},
"set video bitrate (in kbit/s)"
,
"bitrate"
},
{
"r"
,
HAS_ARG
,
{
opt_frame_rate
},
"set frame rate (in Hz)"
,
"rate"
},
{
"s"
,
HAS_ARG
,
{
opt_frame_size
},
"set frame size (WxH or abbreviation)"
,
"size"
},
{
"g"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_gop_size
},
"set the group of picture size"
,
"gop_size"
},
{
"intra"
,
OPT_BOOL
|
OPT_EXPERT
,
{
int_arg
:
&
intra_only
},
"use only intra frames"
},
{
"vn"
,
OPT_BOOL
,
{
int_arg
:
&
video_disable
},
"disable video"
},
{
"qscale"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_qscale
},
"use fixed video quantiser scale (VBR)"
,
"q"
},
{
"vd"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_video_device
},
"set video device"
,
"device"
},
{
"vcodec"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_video_codec
},
"force video codec"
,
"codec"
},
{
"me"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_motion_estimation
},
"set motion estimation method"
,
{
"b"
,
HAS_ARG
,
{(
void
*
)
opt_video_bitrate
},
"set video bitrate (in kbit/s)"
,
"bitrate"
},
{
"r"
,
HAS_ARG
,
{(
void
*
)
opt_frame_rate
},
"set frame rate (in Hz)"
,
"rate"
},
{
"s"
,
HAS_ARG
,
{(
void
*
)
opt_frame_size
},
"set frame size (WxH or abbreviation)"
,
"size"
},
{
"g"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_gop_size
},
"set the group of picture size"
,
"gop_size"
},
{
"intra"
,
OPT_BOOL
|
OPT_EXPERT
,
{(
void
*
)
&
intra_only
},
"use only intra frames"
},
{
"vn"
,
OPT_BOOL
,
{(
void
*
)
&
video_disable
},
"disable video"
},
{
"qscale"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_qscale
},
"use fixed video quantiser scale (VBR)"
,
"q"
},
#ifdef CONFIG_GRAB
{
"vd"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_video_device
},
"set video device"
,
"device"
},
#endif
{
"vcodec"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_video_codec
},
"force video codec"
,
"codec"
},
{
"me"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_motion_estimation
},
"set motion estimation method"
,
"method"
},
{
"sameq"
,
OPT_BOOL
,
{
int_arg
:
&
same_quality
},
{
"sameq"
,
OPT_BOOL
,
{
(
void
*
)
&
same_quality
},
"use same video quality as source (implies VBR)"
},
/* audio options */
{
"ab"
,
HAS_ARG
,
{
opt_audio_bitrate
},
"set audio bitrate (in kbit/s)"
,
"bitrate"
,
},
{
"ar"
,
HAS_ARG
,
{
opt_audio_rate
},
"set audio sampling rate (in Hz)"
,
"rate"
},
{
"ac"
,
HAS_ARG
,
{
opt_audio_channels
},
"set number of audio channels"
,
"channels"
},
{
"an"
,
OPT_BOOL
,
{
int_arg
:
&
audio_disable
},
"disable audio"
},
{
"ad"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_audio_device
},
"set audio device"
,
"device"
},
{
"acodec"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_audio_codec
},
"force audio codec"
,
"codec"
},
{
"deinterlace"
,
OPT_BOOL
|
OPT_EXPERT
,
{
int_arg
:
&
do_deinterlace
},
{
"ab"
,
HAS_ARG
,
{(
void
*
)
opt_audio_bitrate
},
"set audio bitrate (in kbit/s)"
,
"bitrate"
,
},
{
"ar"
,
HAS_ARG
,
{(
void
*
)
opt_audio_rate
},
"set audio sampling rate (in Hz)"
,
"rate"
},
{
"ac"
,
HAS_ARG
,
{(
void
*
)
opt_audio_channels
},
"set number of audio channels"
,
"channels"
},
{
"an"
,
OPT_BOOL
,
{(
void
*
)
&
audio_disable
},
"disable audio"
},
#ifdef CONFIG_GRAB
{
"ad"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_audio_device
},
"set audio device"
,
"device"
},
#endif
{
"acodec"
,
HAS_ARG
|
OPT_EXPERT
,
{(
void
*
)
opt_audio_codec
},
"force audio codec"
,
"codec"
},
{
"deinterlace"
,
OPT_BOOL
|
OPT_EXPERT
,
{(
void
*
)
&
do_deinterlace
},
"deinterlace pictures"
},
{
"benchmark"
,
OPT_BOOL
|
OPT_EXPERT
,
{
int_arg
:
&
do_benchmark
},
{
"benchmark"
,
OPT_BOOL
|
OPT_EXPERT
,
{
(
void
*
)
&
do_benchmark
},
"add timings for benchmarking"
},
{
NULL
,
},
...
...
@@ -2187,11 +2217,15 @@ int main(int argc, char **argv)
if
(
nb_input_files
==
0
)
{
#ifdef CONFIG_GRAB
if
(
nb_output_files
!=
1
)
{
fprintf
(
stderr
,
"Only one output file supported when grabbing
\n
"
);
exit
(
1
);
}
av_grab
(
output_files
[
0
]);
#else
fprintf
(
stderr
,
"Must supply at least one input file
\n
"
);
#endif
}
else
{
INT64
ti
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment