Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0a024268
Commit
0a024268
authored
Aug 20, 2014
by
Gabriel Dume
Committed by
Diego Biurrun
Aug 26, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libxvid: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
56a721f0
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
329 additions
and
309 deletions
+329
-309
libxvid.c
libavcodec/libxvid.c
+253
-244
libxvid.h
libavcodec/libxvid.h
+0
-1
libxvid_rc.c
libavcodec/libxvid_rc.c
+76
-64
No files found.
libavcodec/libxvid.c
View file @
0a024268
This diff is collapsed.
Click to expand it.
libavcodec/libxvid.h
View file @
0a024268
...
@@ -26,7 +26,6 @@
...
@@ -26,7 +26,6 @@
* common functions for use with the Xvid wrappers
* common functions for use with the Xvid wrappers
*/
*/
int
ff_tempfile
(
const
char
*
prefix
,
char
**
filename
);
int
ff_tempfile
(
const
char
*
prefix
,
char
**
filename
);
#endif
/* AVCODEC_LIBXVID_H */
#endif
/* AVCODEC_LIBXVID_H */
libavcodec/libxvid_rc.c
View file @
0a024268
...
@@ -21,28 +21,28 @@
...
@@ -21,28 +21,28 @@
*/
*/
#include "config.h"
#include "config.h"
#include <xvid.h>
#include <unistd.h>
#if !HAVE_MKSTEMP
#if !HAVE_MKSTEMP
#include <fcntl.h>
#include <fcntl.h>
#endif
#endif
#include <unistd.h>
#include <xvid.h>
#include "libavutil/attributes.h"
#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/internal.h"
#include "avcodec.h"
#include "avcodec.h"
#include "libxvid.h"
#include "libxvid.h"
#include "mpegvideo.h"
#include "mpegvideo.h"
#undef NDEBUG
#include <assert.h>
/* Wrapper to work around the lack of mkstemp() on mingw.
/* Wrapper to work around the lack of mkstemp() on mingw.
* Also, tries to create file in /tmp first, if possible.
* Also, tries to create file in /tmp first, if possible.
* *prefix can be a character constant; *filename will be allocated internally.
* *prefix can be a character constant; *filename will be allocated internally.
* @return file descriptor of opened file (or -1 on error)
* @return file descriptor of opened file (or -1 on error)
* and opened file name in **filename. */
* and opened file name in **filename. */
int
ff_tempfile
(
const
char
*
prefix
,
char
**
filename
)
{
int
ff_tempfile
(
const
char
*
prefix
,
char
**
filename
)
int
fd
=-
1
;
{
int
fd
=
-
1
;
#if !HAVE_MKSTEMP
#if !HAVE_MKSTEMP
*
filename
=
tempnam
(
"."
,
prefix
);
*
filename
=
tempnam
(
"."
,
prefix
);
#else
#else
...
@@ -79,94 +79,105 @@ av_cold int ff_xvid_rate_control_init(MpegEncContext *s)
...
@@ -79,94 +79,105 @@ av_cold int ff_xvid_rate_control_init(MpegEncContext *s)
xvid_plg_create_t
xvid_plg_create
=
{
0
};
xvid_plg_create_t
xvid_plg_create
=
{
0
};
xvid_plugin_2pass2_t
xvid_2pass2
=
{
0
};
xvid_plugin_2pass2_t
xvid_2pass2
=
{
0
};
fd
=
ff_tempfile
(
"xvidrc."
,
&
tmp_name
);
fd
=
ff_tempfile
(
"xvidrc."
,
&
tmp_name
);
if
(
fd
==
-
1
)
{
if
(
fd
==
-
1
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
"Can't create temporary pass2 file.
\n
"
);
av_log
(
NULL
,
AV_LOG_ERROR
,
"Can't create temporary pass2 file.
\n
"
);
return
-
1
;
return
-
1
;
}
}
for
(
i
=
0
;
i
<
s
->
rc_context
.
num_entries
;
i
++
)
{
for
(
i
=
0
;
i
<
s
->
rc_context
.
num_entries
;
i
++
)
{
static
const
char
frame_types
[]
=
" ipbs"
;
static
const
char
frame_types
[]
=
" ipbs"
;
char
tmp
[
256
];
char
tmp
[
256
];
RateControlEntry
*
rce
;
RateControlEntry
*
rce
;
rce
=
&
s
->
rc_context
.
entry
[
i
];
rce
=
&
s
->
rc_context
.
entry
[
i
];
snprintf
(
tmp
,
sizeof
(
tmp
),
"%c %d %d %d %d %d %d
\n
"
,
snprintf
(
tmp
,
sizeof
(
tmp
),
"%c %d %d %d %d %d %d
\n
"
,
frame_types
[
rce
->
pict_type
],
(
int
)
lrintf
(
rce
->
qscale
/
FF_QP2LAMBDA
),
rce
->
i_count
,
s
->
mb_num
-
rce
->
i_count
-
rce
->
skip_count
,
frame_types
[
rce
->
pict_type
],
rce
->
skip_count
,
(
rce
->
i_tex_bits
+
rce
->
p_tex_bits
+
rce
->
misc_bits
+
7
)
/
8
,
(
rce
->
header_bits
+
rce
->
mv_bits
+
7
)
/
8
);
(
int
)
lrintf
(
rce
->
qscale
/
FF_QP2LAMBDA
),
rce
->
i_count
,
s
->
mb_num
-
rce
->
i_count
-
rce
->
skip_count
,
rce
->
skip_count
,
(
rce
->
i_tex_bits
+
rce
->
p_tex_bits
+
rce
->
misc_bits
+
7
)
/
8
,
(
rce
->
header_bits
+
rce
->
mv_bits
+
7
)
/
8
);
write
(
fd
,
tmp
,
strlen
(
tmp
));
write
(
fd
,
tmp
,
strlen
(
tmp
));
}
}
close
(
fd
);
close
(
fd
);
xvid_2pass2
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_2pass2
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_2pass2
.
filename
=
tmp_name
;
xvid_2pass2
.
filename
=
tmp_name
;
xvid_2pass2
.
bitrate
=
s
->
avctx
->
bit_rate
;
xvid_2pass2
.
bitrate
=
s
->
avctx
->
bit_rate
;
xvid_2pass2
.
vbv_size
=
s
->
avctx
->
rc_buffer_size
;
xvid_2pass2
.
vbv_size
=
s
->
avctx
->
rc_buffer_size
;
xvid_2pass2
.
vbv_maxrate
=
s
->
avctx
->
rc_max_rate
;
xvid_2pass2
.
vbv_maxrate
=
s
->
avctx
->
rc_max_rate
;
xvid_2pass2
.
vbv_initial
=
s
->
avctx
->
rc_initial_buffer_occupancy
;
xvid_2pass2
.
vbv_initial
=
s
->
avctx
->
rc_initial_buffer_occupancy
;
xvid_plg_create
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_plg_create
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_plg_create
.
fbase
=
s
->
avctx
->
time_base
.
den
;
xvid_plg_create
.
fbase
=
s
->
avctx
->
time_base
.
den
;
xvid_plg_create
.
fincr
=
s
->
avctx
->
time_base
.
num
;
xvid_plg_create
.
fincr
=
s
->
avctx
->
time_base
.
num
;
xvid_plg_create
.
param
=
&
xvid_2pass2
;
xvid_plg_create
.
param
=
&
xvid_2pass2
;
if
(
xvid_plugin_2pass2
(
NULL
,
XVID_PLG_CREATE
,
&
xvid_plg_create
,
&
s
->
rc_context
.
non_lavc_opaque
)
<
0
){
if
(
xvid_plugin_2pass2
(
NULL
,
XVID_PLG_CREATE
,
&
xvid_plg_create
,
&
s
->
rc_context
.
non_lavc_opaque
)
<
0
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2 failed
\n
"
);
av_log
(
NULL
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2 failed
\n
"
);
return
-
1
;
return
-
1
;
}
}
return
0
;
return
0
;
}
}
float
ff_xvid_rate_estimate_qscale
(
MpegEncContext
*
s
,
int
dry_run
){
float
ff_xvid_rate_estimate_qscale
(
MpegEncContext
*
s
,
int
dry_run
)
{
xvid_plg_data_t
xvid_plg_data
=
{
0
};
xvid_plg_data_t
xvid_plg_data
=
{
0
};
xvid_plg_data
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_plg_data
.
version
=
XVID_MAKE_VERSION
(
1
,
1
,
0
);
xvid_plg_data
.
width
=
s
->
width
;
xvid_plg_data
.
width
=
s
->
width
;
xvid_plg_data
.
height
=
s
->
height
;
xvid_plg_data
.
height
=
s
->
height
;
xvid_plg_data
.
mb_width
=
s
->
mb_width
;
xvid_plg_data
.
mb_width
=
s
->
mb_width
;
xvid_plg_data
.
mb_height
=
s
->
mb_height
;
xvid_plg_data
.
mb_height
=
s
->
mb_height
;
xvid_plg_data
.
fbase
=
s
->
avctx
->
time_base
.
den
;
xvid_plg_data
.
fbase
=
s
->
avctx
->
time_base
.
den
;
xvid_plg_data
.
fincr
=
s
->
avctx
->
time_base
.
num
;
xvid_plg_data
.
fincr
=
s
->
avctx
->
time_base
.
num
;
xvid_plg_data
.
min_quant
[
0
]
=
s
->
avctx
->
qmin
;
xvid_plg_data
.
min_quant
[
0
]
=
s
->
avctx
->
qmin
;
xvid_plg_data
.
min_quant
[
1
]
=
s
->
avctx
->
qmin
;
xvid_plg_data
.
min_quant
[
1
]
=
s
->
avctx
->
qmin
;
xvid_plg_data
.
min_quant
[
2
]
=
s
->
avctx
->
qmin
;
//
FIXME i/b factor & offset
xvid_plg_data
.
min_quant
[
2
]
=
s
->
avctx
->
qmin
;
//
FIXME i/b factor & offset
xvid_plg_data
.
max_quant
[
0
]
=
s
->
avctx
->
qmax
;
xvid_plg_data
.
max_quant
[
0
]
=
s
->
avctx
->
qmax
;
xvid_plg_data
.
max_quant
[
1
]
=
s
->
avctx
->
qmax
;
xvid_plg_data
.
max_quant
[
1
]
=
s
->
avctx
->
qmax
;
xvid_plg_data
.
max_quant
[
2
]
=
s
->
avctx
->
qmax
;
//
FIXME i/b factor & offset
xvid_plg_data
.
max_quant
[
2
]
=
s
->
avctx
->
qmax
;
//
FIXME i/b factor & offset
xvid_plg_data
.
bquant_offset
=
0
;
// 100 * s->avctx->b_quant_offset;
xvid_plg_data
.
bquant_offset
=
0
;
// 100 * s->avctx->b_quant_offset;
xvid_plg_data
.
bquant_ratio
=
100
;
// * s->avctx->b_quant_factor;
xvid_plg_data
.
bquant_ratio
=
100
;
// * s->avctx->b_quant_factor;
if
(
!
s
->
rc_context
.
dry_run_qscale
){
if
(
!
s
->
rc_context
.
dry_run_qscale
)
{
if
(
s
->
picture_number
){
if
(
s
->
picture_number
)
{
xvid_plg_data
.
length
=
xvid_plg_data
.
length
=
xvid_plg_data
.
stats
.
length
=
(
s
->
frame_bits
+
7
)
/
8
;
xvid_plg_data
.
stats
.
length
=
(
s
->
frame_bits
+
7
)
/
8
;
xvid_plg_data
.
frame_num
=
s
->
rc_context
.
last_picture_number
;
xvid_plg_data
.
frame_num
=
s
->
rc_context
.
last_picture_number
;
xvid_plg_data
.
quant
=
s
->
qscale
;
xvid_plg_data
.
quant
=
s
->
qscale
;
xvid_plg_data
.
type
=
s
->
last_pict_type
;
xvid_plg_data
.
type
=
s
->
last_pict_type
;
if
(
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
if
(
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
XVID_PLG_AFTER
,
&
xvid_plg_data
,
NULL
)){
XVID_PLG_AFTER
,
&
xvid_plg_data
,
NULL
))
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2(handle, XVID_PLG_AFTER, ...) FAILED
\n
"
);
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2(handle, XVID_PLG_AFTER, ...) FAILED
\n
"
);
return
-
1
;
return
-
1
;
}
}
}
}
s
->
rc_context
.
last_picture_number
=
s
->
rc_context
.
last_picture_number
=
xvid_plg_data
.
frame_num
=
s
->
picture_number
;
xvid_plg_data
.
frame_num
=
s
->
picture_number
;
xvid_plg_data
.
quant
=
0
;
xvid_plg_data
.
quant
=
0
;
if
(
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
XVID_PLG_BEFORE
,
&
xvid_plg_data
,
NULL
)){
if
(
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2(handle, XVID_PLG_BEFORE, ...) FAILED
\n
"
);
XVID_PLG_BEFORE
,
&
xvid_plg_data
,
NULL
))
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"xvid_plugin_2pass2(handle, XVID_PLG_BEFORE, ...) FAILED
\n
"
);
return
-
1
;
return
-
1
;
}
}
s
->
rc_context
.
dry_run_qscale
=
xvid_plg_data
.
quant
;
s
->
rc_context
.
dry_run_qscale
=
xvid_plg_data
.
quant
;
}
}
xvid_plg_data
.
quant
=
s
->
rc_context
.
dry_run_qscale
;
xvid_plg_data
.
quant
=
s
->
rc_context
.
dry_run_qscale
;
if
(
!
dry_run
)
if
(
!
dry_run
)
s
->
rc_context
.
dry_run_qscale
=
0
;
s
->
rc_context
.
dry_run_qscale
=
0
;
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_B
)
//FIXME this is not exactly identical to xvid
// FIXME this is not exactly identical to Xvid
return
xvid_plg_data
.
quant
*
FF_QP2LAMBDA
*
s
->
avctx
->
b_quant_factor
+
s
->
avctx
->
b_quant_offset
;
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_B
)
return
xvid_plg_data
.
quant
*
FF_QP2LAMBDA
*
s
->
avctx
->
b_quant_factor
+
s
->
avctx
->
b_quant_offset
;
else
else
return
xvid_plg_data
.
quant
*
FF_QP2LAMBDA
;
return
xvid_plg_data
.
quant
*
FF_QP2LAMBDA
;
}
}
...
@@ -175,5 +186,6 @@ av_cold void ff_xvid_rate_control_uninit(MpegEncContext *s)
...
@@ -175,5 +186,6 @@ av_cold void ff_xvid_rate_control_uninit(MpegEncContext *s)
{
{
xvid_plg_destroy_t
xvid_plg_destroy
;
xvid_plg_destroy_t
xvid_plg_destroy
;
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
XVID_PLG_DESTROY
,
&
xvid_plg_destroy
,
NULL
);
xvid_plugin_2pass2
(
s
->
rc_context
.
non_lavc_opaque
,
XVID_PLG_DESTROY
,
&
xvid_plg_destroy
,
NULL
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment