Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
dd4339a9
Commit
dd4339a9
authored
Jan 18, 2000
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Le motion compensation. Notez que �a ne marche pas (encore).
parent
e70d9d1f
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
432 additions
and
184 deletions
+432
-184
include/vdec_motion.h
include/vdec_motion.h
+13
-16
include/vpar_blocks.h
include/vpar_blocks.h
+3
-3
src/video_decoder/vdec_motion.c
src/video_decoder/vdec_motion.c
+395
-147
src/video_parser/vpar_blocks.c
src/video_parser/vpar_blocks.c
+7
-7
src/video_parser/vpar_headers.c
src/video_parser/vpar_headers.c
+12
-9
src/video_parser/vpar_synchro.c
src/video_parser/vpar_synchro.c
+2
-2
No files found.
include/vdec_motion.h
View file @
dd4339a9
...
...
@@ -16,30 +16,27 @@
*****************************************************************************/
struct
macroblock_s
;
struct
vpar_thread_s
;
struct
motion_arg_s
;
typedef
void
(
*
f_motion_t
)(
struct
macroblock_s
*
);
typedef
void
(
*
f_chroma_motion_t
)(
struct
macroblock_s
*
);
typedef
void
(
*
f_chroma_motion_t
)(
struct
macroblock_s
*
,
struct
motion_arg_s
*
);
/*****************************************************************************
* Prototypes
*****************************************************************************/
/* Empty function for intra macroblocks motion compensation */
void
vdec_
DummyRecon
(
struct
macroblock_s
*
);
void
vdec_
MotionDummy
(
struct
macroblock_s
*
p_mb
);
/* Motion compensation for skipped macroblocks */
void
vdec_MotionField
(
struct
macroblock_s
*
);
void
vdec_MotionFrame
(
struct
macroblock_s
*
);
/* Motion compensation for non skipped macroblocks */
void
vdec_FieldDMVRecon
(
struct
macroblock_s
*
);
void
vdec_FieldFieldRecon
(
struct
macroblock_s
*
);
void
vdec_Field16x8Recon
(
struct
macroblock_s
*
);
void
vdec_FrameFrameRecon
(
struct
macroblock_s
*
);
void
vdec_FrameFieldRecon
(
struct
macroblock_s
*
);
void
vdec_FrameDMVRecon
(
struct
macroblock_s
*
);
/* Motion compensation */
void
vdec_MotionFieldField
(
struct
macroblock_s
*
p_mb
);
void
vdec_MotionField16x8
(
struct
macroblock_s
*
p_mb
);
void
vdec_MotionFieldDMV
(
struct
macroblock_s
*
p_mb
);
void
vdec_MotionFrameFrame
(
struct
macroblock_s
*
p_mb
);
void
vdec_MotionFrameField
(
struct
macroblock_s
*
p_mb
);
void
vdec_MotionFrameDMV
(
struct
macroblock_s
*
p_mb
);
/* Motion compensation functions for the 3 chroma formats */
void
vdec_Motion420
();
void
vdec_Motion422
();
void
vdec_Motion444
();
void
vdec_Motion420
(
struct
macroblock_s
*
p_mb
,
struct
motion_arg_s
*
p_motion
);
void
vdec_Motion422
(
struct
macroblock_s
*
p_mb
,
struct
motion_arg_s
*
p_motion
);
void
vdec_Motion444
(
struct
macroblock_s
*
p_mb
,
struct
motion_arg_s
*
p_motion
);
include/vpar_blocks.h
View file @
dd4339a9
src/video_decoder/vdec_motion.c
View file @
dd4339a9
This diff is collapsed.
Click to expand it.
src/video_parser/vpar_blocks.c
View file @
dd4339a9
...
...
@@ -590,8 +590,8 @@ static __inline__ void InitMacroblock( vpar_thread_t * p_vpar,
p_mb
->
p_forward
=
p_vpar
->
sequence
.
p_forward
;
p_mb
->
p_backward
=
p_vpar
->
sequence
.
p_backward
;
p_mb
->
i_addb_l_stride
=
p_mb
->
i_l_stride
=
p_vpar
->
picture
.
i_l_stride
;
p_mb
->
i_addb_c_stride
=
p_mb
->
i_c_stride
=
p_vpar
->
picture
.
i_c_stride
;
p_mb
->
i_addb_l_stride
=
(
p_mb
->
i_l_stride
=
p_vpar
->
picture
.
i_l_stride
)
-
8
;
p_mb
->
i_addb_c_stride
=
(
p_mb
->
i_c_stride
=
p_vpar
->
picture
.
i_c_stride
)
-
9
;
/* Update macroblock real position. */
p_vpar
->
mb
.
i_l_x
+=
16
;
...
...
@@ -639,8 +639,8 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar,
macroblock_t
*
p_mb
)
{
static
f_motion_t
pf_motion
[
2
][
4
]
=
{
{
NULL
,
vdec_
FieldFieldRecon
,
vdec_Field16x8Recon
,
vdec_FieldDMVRecon
},
{
NULL
,
vdec_
FrameFieldRecon
,
vdec_FrameFrameRecon
,
vdec_FrameDMVRecon
}
};
{
{
NULL
,
vdec_
MotionFieldField
,
vdec_MotionField16x8
,
vdec_MotionFieldDMV
},
{
NULL
,
vdec_
MotionFrameField
,
vdec_MotionFrameFrame
,
vdec_MotionFrameDMV
}
};
static
int
ppi_mv_count
[
2
][
4
]
=
{
{
0
,
1
,
2
,
1
},
{
0
,
2
,
1
,
1
}
};
static
int
ppi_mv_format
[
2
][
4
]
=
{
{
0
,
1
,
1
,
1
},
{
0
,
1
,
2
,
1
}
};
...
...
@@ -685,7 +685,7 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar,
{
/* For the intra macroblocks, we use an empty motion
* compensation function */
p_mb
->
pf_motion
=
vdec_
DummyRecon
;
p_mb
->
pf_motion
=
vdec_
MotionDummy
;
}
else
{
...
...
@@ -752,8 +752,8 @@ i_count++;
{
/* Skipped macroblock (ISO/IEC 13818-2 7.6.6). */
static
int
pi_dc_dct_reinit
[
4
]
=
{
128
,
256
,
512
,
1024
};
static
f_motion_t
pf_motion_skipped
[
4
]
=
{
NULL
,
vdec_MotionField
,
vdec_MotionField
,
vdec_Motion
Frame
};
static
f_motion_t
pf_motion_skipped
[
4
]
=
{
NULL
,
vdec_MotionField
Field
,
vdec_MotionField
Field
,
vdec_MotionFrame
Frame
};
/* Reset DC predictors (7.2.1). */
p_vpar
->
slice
.
pi_dc_dct_pred
[
0
]
=
p_vpar
->
slice
.
pi_dc_dct_pred
[
1
]
...
...
src/video_parser/vpar_headers.c
View file @
dd4339a9
...
...
@@ -624,7 +624,8 @@ static void PictureHeader( vpar_thread_t * p_vpar )
{
/* Do we have the reference pictures ? */
b_parsable
=
!
((
p_vpar
->
picture
.
i_coding_type
==
P_CODING_TYPE
)
&&
(
p_vpar
->
sequence
.
p_forward
==
NULL
))
||
(
p_vpar
->
sequence
.
p_backward
==
NULL
))
||
/* p_backward will become p_forward later */
((
p_vpar
->
picture
.
i_coding_type
==
B_CODING_TYPE
)
&&
(
p_vpar
->
sequence
.
p_forward
==
NULL
||
p_vpar
->
sequence
.
p_backward
==
NULL
));
...
...
@@ -660,17 +661,19 @@ static void PictureHeader( vpar_thread_t * p_vpar )
if
(
!
p_vpar
->
picture
.
i_current_structure
)
{
/* This is a new frame. Get a structure from the video_output. */
if
(
(
P_picture
=
vout_CreatePicture
(
p_vpar
->
p_vout
,
while
(
(
P_picture
=
vout_CreatePicture
(
p_vpar
->
p_vout
,
99
+
p_vpar
->
sequence
.
i_chroma_format
,
/*???*/
p_vpar
->
sequence
.
i_width
,
p_vpar
->
sequence
.
i_height
,
p_vpar
->
sequence
.
i_width
*
sizeof
(
yuv_data_t
)
)
)
p_vpar
->
sequence
.
i_height
)
)
==
NULL
)
{
intf_ErrMsg
(
"vpar debug: allocation error in vout_CreatePicture
\n
"
);
p_vpar
->
b_error
=
1
;
if
(
p_vpar
->
b_die
)
{
return
;
}
mwait
(
VPAR_IDLE_SLEEP
);
}
/* Initialize values. */
P_picture
->
date
=
vpar_SynchroDecode
(
p_vpar
,
...
...
@@ -678,9 +681,9 @@ static void PictureHeader( vpar_thread_t * p_vpar )
i_structure
);
P_picture
->
i_aspect_ratio
=
p_vpar
->
sequence
.
i_aspect_ratio
;
P_picture
->
i_matrix_coefficients
=
p_vpar
->
sequence
.
i_matrix_coefficients
;
p_vpar
->
picture
.
i_l_stride
=
-
8
+
(
p_vpar
->
sequence
.
i_width
p_vpar
->
picture
.
i_l_stride
=
(
p_vpar
->
sequence
.
i_width
<<
(
1
-
p_vpar
->
picture
.
b_frame_structure
)
);
p_vpar
->
picture
.
i_c_stride
=
-
8
+
(
p_vpar
->
sequence
.
i_chroma_width
p_vpar
->
picture
.
i_c_stride
=
(
p_vpar
->
sequence
.
i_chroma_width
<<
(
1
-
p_vpar
->
picture
.
b_frame_structure
));
P_picture
->
i_deccount
=
p_vpar
->
sequence
.
i_mb_size
;
...
...
@@ -749,7 +752,7 @@ fprintf(stderr, "Image trashee\n");
}
else
if
(
p_vpar
->
picture
.
i_current_structure
==
FRAME_STRUCTURE
)
{
fprintf
(
stderr
,
"Image parsee
\n
"
);
fprintf
(
stderr
,
"Image parsee
(%d)
\n
"
,
p_vpar
->
picture
.
i_coding_type
);
/* Frame completely parsed. */
for
(
i_mb
=
1
;
p_vpar
->
picture
.
pp_mb
[
i_mb
];
i_mb
++
)
{
...
...
src/video_parser/vpar_synchro.c
View file @
dd4339a9
...
...
@@ -49,7 +49,7 @@
boolean_t
vpar_SynchroChoose
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
int
i_structure
)
{
return
(
1
);
//
return( 1 );
return
(
i_coding_type
==
I_CODING_TYPE
||
i_coding_type
==
P_CODING_TYPE
);
//return( i_coding_type == I_CODING_TYPE );
}
...
...
@@ -69,7 +69,7 @@ void vpar_SynchroTrash( vpar_thread_t * p_vpar, int i_coding_type,
mtime_t
vpar_SynchroDecode
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
int
i_structure
)
{
return
mdate
()
+
5
00000
;
return
mdate
()
+
30
00000
;
}
/*****************************************************************************
...
...
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