Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
149fa0b7
Commit
149fa0b7
authored
May 29, 2015
by
Vittorio Giovara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpegvideo: Move MotionEstContext and function declarations to a separate header
parent
b2b76691
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
130 additions
and
87 deletions
+130
-87
motion_est.c
libavcodec/motion_est.c
+1
-0
motion_est.h
libavcodec/motion_est.h
+128
-0
mpegvideo.h
libavcodec/mpegvideo.h
+1
-87
No files found.
libavcodec/motion_est.c
View file @
149fa0b7
...
...
@@ -34,6 +34,7 @@
#include "avcodec.h"
#include "internal.h"
#include "mathops.h"
#include "motion_est.h"
#include "mpegutils.h"
#include "mpegvideo.h"
...
...
libavcodec/motion_est.h
0 → 100644
View file @
149fa0b7
/*
* Motion estimation
*
* This file is part of Libav.
*
* Libav 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.
*
* Libav 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 Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_MOTIONEST_H
#define AVCODEC_MOTIONEST_H
#include <stdint.h>
#include "avcodec.h"
#include "hpeldsp.h"
#include "qpeldsp.h"
struct
MpegEncContext
;
#define MAX_MV 2048
/**
* Motion estimation context.
*/
typedef
struct
MotionEstContext
{
AVCodecContext
*
avctx
;
int
skip
;
///< set if ME is skipped for the current MB
int
co_located_mv
[
4
][
2
];
///< mv from last P-frame for direct mode ME
int
direct_basis_mv
[
4
][
2
];
uint8_t
*
scratchpad
;
/**< data area for the ME algo, so that
* the ME does not need to malloc/free. */
uint8_t
*
best_mb
;
uint8_t
*
temp_mb
[
2
];
uint8_t
*
temp
;
int
best_bits
;
uint32_t
*
map
;
///< map to avoid duplicate evaluations
uint32_t
*
score_map
;
///< map to store the scores
unsigned
map_generation
;
int
pre_penalty_factor
;
int
penalty_factor
;
/**< an estimate of the bits required to
* code a given mv value, e.g. (1,0) takes
* more bits than (0,0). We have to
* estimate whether any reduction in
* residual is worth the extra bits. */
int
sub_penalty_factor
;
int
mb_penalty_factor
;
int
flags
;
int
sub_flags
;
int
mb_flags
;
int
pre_pass
;
///< = 1 for the pre pass
int
dia_size
;
int
xmin
;
int
xmax
;
int
ymin
;
int
ymax
;
int
pred_x
;
int
pred_y
;
uint8_t
*
src
[
4
][
4
];
uint8_t
*
ref
[
4
][
4
];
int
stride
;
int
uvstride
;
/* temp variables for picture complexity calculation */
int
mc_mb_var_sum_temp
;
int
mb_var_sum_temp
;
int
scene_change_score
;
op_pixels_func
(
*
hpel_put
)[
4
];
op_pixels_func
(
*
hpel_avg
)[
4
];
qpel_mc_func
(
*
qpel_put
)[
16
];
qpel_mc_func
(
*
qpel_avg
)[
16
];
uint8_t
(
*
mv_penalty
)[
MAX_MV
*
2
+
1
];
///< bit amount needed to encode a MV
uint8_t
*
current_mv_penalty
;
int
(
*
sub_motion_search
)(
struct
MpegEncContext
*
s
,
int
*
mx_ptr
,
int
*
my_ptr
,
int
dmin
,
int
src_index
,
int
ref_index
,
int
size
,
int
h
);
}
MotionEstContext
;
static
inline
int
ff_h263_round_chroma
(
int
x
)
{
//FIXME static or not?
static
const
uint8_t
h263_chroma_roundtab
[
16
]
=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
};
return
h263_chroma_roundtab
[
x
&
0xf
]
+
(
x
>>
3
);
}
int
ff_init_me
(
struct
MpegEncContext
*
s
);
void
ff_estimate_p_frame_motion
(
struct
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
void
ff_estimate_b_frame_motion
(
struct
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
int
ff_pre_estimate_p_frame_motion
(
struct
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
int
ff_epzs_motion_search
(
struct
MpegEncContext
*
s
,
int
*
mx_ptr
,
int
*
my_ptr
,
int
P
[
10
][
2
],
int
src_index
,
int
ref_index
,
int16_t
(
*
last_mv
)[
2
],
int
ref_mv_scale
,
int
size
,
int
h
);
int
ff_get_mb_score
(
struct
MpegEncContext
*
s
,
int
mx
,
int
my
,
int
src_index
,
int
ref_index
,
int
size
,
int
h
,
int
add_rate
);
int
ff_get_best_fcode
(
struct
MpegEncContext
*
s
,
int16_t
(
*
mv_table
)[
2
],
int
type
);
void
ff_fix_long_p_mvs
(
struct
MpegEncContext
*
s
);
void
ff_fix_long_mvs
(
struct
MpegEncContext
*
s
,
uint8_t
*
field_select_table
,
int
field_select
,
int16_t
(
*
mv_table
)[
2
],
int
f_code
,
int
type
,
int
truncate
);
extern
const
uint8_t
ff_aic_dc_scale_table
[
32
];
extern
const
uint8_t
ff_h263_chroma_qscale_table
[
32
];
#endif
/* AVCODEC_MOTIONEST_H */
libavcodec/mpegvideo.h
View file @
149fa0b7
...
...
@@ -39,6 +39,7 @@
#include "hpeldsp.h"
#include "idctdsp.h"
#include "me_cmp.h"
#include "motion_est.h"
#include "mpegvideodsp.h"
#include "mpegvideoencdsp.h"
#include "pixblockdsp.h"
...
...
@@ -62,7 +63,6 @@ enum OutputFormat {
};
#define MAX_FCODE 7
#define MAX_MV 2048
#define MAX_THREADS 16
...
...
@@ -88,8 +88,6 @@ enum OutputFormat {
#define EXT_START_CODE 0x000001b5
#define USER_START_CODE 0x000001b2
struct
MpegEncContext
;
/**
* Picture.
*/
...
...
@@ -139,62 +137,6 @@ typedef struct Picture{
int
shared
;
}
Picture
;
/**
* Motion estimation context.
*/
typedef
struct
MotionEstContext
{
AVCodecContext
*
avctx
;
int
skip
;
///< set if ME is skipped for the current MB
int
co_located_mv
[
4
][
2
];
///< mv from last P-frame for direct mode ME
int
direct_basis_mv
[
4
][
2
];
uint8_t
*
scratchpad
;
///< data area for the ME algo, so that the ME does not need to malloc/free
uint8_t
*
best_mb
;
uint8_t
*
temp_mb
[
2
];
uint8_t
*
temp
;
int
best_bits
;
uint32_t
*
map
;
///< map to avoid duplicate evaluations
uint32_t
*
score_map
;
///< map to store the scores
unsigned
map_generation
;
int
pre_penalty_factor
;
int
penalty_factor
;
/**< an estimate of the bits required to
code a given mv value, e.g. (1,0) takes
more bits than (0,0). We have to
estimate whether any reduction in
residual is worth the extra bits. */
int
sub_penalty_factor
;
int
mb_penalty_factor
;
int
flags
;
int
sub_flags
;
int
mb_flags
;
int
pre_pass
;
///< = 1 for the pre pass
int
dia_size
;
int
xmin
;
int
xmax
;
int
ymin
;
int
ymax
;
int
pred_x
;
int
pred_y
;
uint8_t
*
src
[
4
][
4
];
uint8_t
*
ref
[
4
][
4
];
int
stride
;
int
uvstride
;
/* temp variables for picture complexity calculation */
int
mc_mb_var_sum_temp
;
int
mb_var_sum_temp
;
int
scene_change_score
;
/* cmp, chroma_cmp;*/
op_pixels_func
(
*
hpel_put
)[
4
];
op_pixels_func
(
*
hpel_avg
)[
4
];
qpel_mc_func
(
*
qpel_put
)[
16
];
qpel_mc_func
(
*
qpel_avg
)[
16
];
uint8_t
(
*
mv_penalty
)[
MAX_MV
*
2
+
1
];
///< amount of bits needed to encode a MV
uint8_t
*
current_mv_penalty
;
int
(
*
sub_motion_search
)(
struct
MpegEncContext
*
s
,
int
*
mx_ptr
,
int
*
my_ptr
,
int
dmin
,
int
src_index
,
int
ref_index
,
int
size
,
int
h
);
}
MotionEstContext
;
/**
* MpegEncContext.
*/
...
...
@@ -792,34 +734,6 @@ static inline int get_bits_diff(MpegEncContext *s){
return
bits
-
last
;
}
static
inline
int
ff_h263_round_chroma
(
int
x
){
static
const
uint8_t
h263_chroma_roundtab
[
16
]
=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
};
return
h263_chroma_roundtab
[
x
&
0xf
]
+
(
x
>>
3
);
}
/* motion_est.c */
void
ff_estimate_p_frame_motion
(
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
void
ff_estimate_b_frame_motion
(
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
int
ff_get_best_fcode
(
MpegEncContext
*
s
,
int16_t
(
*
mv_table
)[
2
],
int
type
);
void
ff_fix_long_p_mvs
(
MpegEncContext
*
s
);
void
ff_fix_long_mvs
(
MpegEncContext
*
s
,
uint8_t
*
field_select_table
,
int
field_select
,
int16_t
(
*
mv_table
)[
2
],
int
f_code
,
int
type
,
int
truncate
);
int
ff_init_me
(
MpegEncContext
*
s
);
int
ff_pre_estimate_p_frame_motion
(
MpegEncContext
*
s
,
int
mb_x
,
int
mb_y
);
int
ff_epzs_motion_search
(
MpegEncContext
*
s
,
int
*
mx_ptr
,
int
*
my_ptr
,
int
P
[
10
][
2
],
int
src_index
,
int
ref_index
,
int16_t
(
*
last_mv
)[
2
],
int
ref_mv_scale
,
int
size
,
int
h
);
int
ff_get_mb_score
(
MpegEncContext
*
s
,
int
mx
,
int
my
,
int
src_index
,
int
ref_index
,
int
size
,
int
h
,
int
add_rate
);
extern
const
uint8_t
ff_aic_dc_scale_table
[
32
];
extern
const
uint8_t
ff_h263_chroma_qscale_table
[
32
];
/* rv10.c */
int
ff_rv10_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number
);
int
ff_rv_decode_dc
(
MpegEncContext
*
s
,
int
n
);
...
...
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