Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
1e6848bd
Commit
1e6848bd
authored
Jan 26, 2000
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vpar_motion.c n'est plus n�cessaire d�sormais.
parent
93ff7f1c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
264 deletions
+0
-264
Makefile
Makefile
+0
-1
src/video_parser/vpar_motion.c
src/video_parser/vpar_motion.c
+0
-263
No files found.
Makefile
View file @
1e6848bd
...
...
@@ -234,7 +234,6 @@ else
video_parser_obj
=
video_parser/video_parser.o
\
video_parser/vpar_headers.o
\
video_parser/vpar_blocks.o
\
video_parser/vpar_motion.o
\
video_parser/vpar_synchro.o
\
video_parser/video_fifo.o
...
...
src/video_parser/vpar_motion.c
deleted
100644 → 0
View file @
93ff7f1c
/*****************************************************************************
* vpar_motion.c : motion vectors parsing
* (c)1999 VideoLAN
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/uio.h>
#include "config.h"
#include "common.h"
#include "mtime.h"
#include "vlc_thread.h"
#include "intf_msg.h"
#include "debug.h"
/* ?? temporaire, requis par netlist.h */
#include "input.h"
#include "input_netlist.h"
#include "decoder_fifo.h"
#include "video.h"
#include "video_output.h"
#include "vdec_idct.h"
#include "video_decoder.h"
#include "vdec_motion.h"
#include "vpar_blocks.h"
#include "vpar_headers.h"
#include "vpar_synchro.h"
#include "video_parser.h"
#include "vpar_motion.h"
#include "video_fifo.h"
/*
* Local prototypes
*/
/****************************************************************************
* vpar_MotionCode : Parse the next motion code
****************************************************************************/
static
__inline__
int
vpar_MotionCode
(
vpar_thread_t
*
p_vpar
)
{
int
i_code
;
static
lookup_t
pl_mv_tab0
[
8
]
=
{
{
-
1
,
0
},
{
3
,
3
},
{
2
,
2
},
{
2
,
2
},
{
1
,
1
},
{
1
,
1
},
{
1
,
1
},
{
1
,
1
}
};
/* Table B-10, motion_code, codes 0000011 ... 000011x */
static
lookup_t
pl_mv_tab1
[
8
]
=
{
{
-
1
,
0
},
{
-
1
,
0
},
{
-
1
,
0
},
{
7
,
6
},
{
6
,
6
},
{
5
,
6
},
{
4
,
5
},
{
4
,
5
}
};
/* Table B-10, motion_code, codes 0000001100 ... 000001011x */
static
lookup_t
pl_mv_tab2
[
12
]
=
{
{
16
,
9
},
{
15
,
9
},
{
14
,
9
},
{
13
,
9
},
{
12
,
9
},
{
11
,
9
},
{
10
,
8
},
{
10
,
8
},
{
9
,
8
},
{
9
,
8
},
{
8
,
8
},
{
8
,
8
}
};
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
return
0
;
}
if
(
(
i_code
=
ShowBits
(
&
p_vpar
->
bit_stream
,
9
))
>=
64
)
{
i_code
>>=
6
;
RemoveBits
(
&
p_vpar
->
bit_stream
,
pl_mv_tab0
[
i_code
].
i_length
);
return
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
?
-
pl_mv_tab0
[
i_code
].
i_value
:
pl_mv_tab0
[
i_code
].
i_value
);
}
if
(
i_code
>=
24
)
{
i_code
>>=
3
;
RemoveBits
(
&
p_vpar
->
bit_stream
,
pl_mv_tab1
[
i_code
].
i_length
);
return
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
?
-
pl_mv_tab1
[
i_code
].
i_value
:
pl_mv_tab1
[
i_code
].
i_value
);
}
if
(
(
i_code
-=
12
)
<
0
)
{
p_vpar
->
picture
.
b_error
=
1
;
intf_DbgMsg
(
"vpar debug: Invalid motion_vector code
\n
"
);
return
0
;
}
RemoveBits
(
&
p_vpar
->
bit_stream
,
pl_mv_tab2
[
i_code
].
i_length
);
return
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
?
-
pl_mv_tab2
[
i_code
].
i_value
:
pl_mv_tab2
[
i_code
].
i_value
);
}
/****************************************************************************
* vpar_DecodeMotionVector : decode a motion_vector
****************************************************************************/
static
__inline__
void
vpar_DecodeMotionVector
(
int
*
pi_prediction
,
int
i_r_size
,
int
i_motion_code
,
int
i_motion_residual
,
int
i_full_pel
)
{
int
i_limit
,
i_vector
;
/* ISO/IEC 13818-1 section 7.6.3.1 */
i_limit
=
16
<<
i_r_size
;
i_vector
=
*
pi_prediction
>>
i_full_pel
;
if
(
i_motion_code
>
0
)
{
i_vector
+=
((
i_motion_code
-
1
)
<<
i_r_size
)
+
i_motion_residual
+
1
;
if
(
i_vector
>=
i_limit
)
i_vector
-=
i_limit
+
i_limit
;
}
else
if
(
i_motion_code
<
0
)
{
i_vector
-=
((
-
i_motion_code
-
1
)
<<
i_r_size
)
+
i_motion_residual
+
1
;
if
(
i_vector
<
-
i_limit
)
i_vector
+=
i_limit
+
i_limit
;
}
*
pi_prediction
=
i_vector
<<
i_full_pel
;
}
/****************************************************************************
* vpar_MotionVector : Parse the next motion_vector field
****************************************************************************/
void
vpar_MotionVector
(
vpar_thread_t
*
p_vpar
,
macroblock_t
*
p_mb
,
int
i_r
,
int
i_s
,
int
i_full_pel
)
{
int
i_motion_code
,
i_motion_residual
;
int
i_r_size
;
int
pi_dm_vector
[
2
];
i_r_size
=
p_vpar
->
picture
.
ppi_f_code
[
i_s
][
0
]
-
1
;
i_motion_code
=
vpar_MotionCode
(
p_vpar
);
i_motion_residual
=
(
i_r_size
!=
0
&&
i_motion_code
!=
0
)
?
GetBits
(
&
p_vpar
->
bit_stream
,
i_r_size
)
:
0
;
vpar_DecodeMotionVector
(
&
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
0
],
i_r_size
,
i_motion_code
,
i_motion_residual
,
i_full_pel
);
p_mb
->
pppi_motion_vectors
[
i_r
][
i_s
][
0
]
=
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
0
];
if
(
p_vpar
->
mb
.
b_dmv
)
{
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
pi_dm_vector
[
0
]
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
?
-
1
:
1
;
}
else
{
pi_dm_vector
[
0
]
=
0
;
}
}
i_r_size
=
p_vpar
->
picture
.
ppi_f_code
[
i_s
][
1
]
-
1
;
i_motion_code
=
vpar_MotionCode
(
p_vpar
);
i_motion_residual
=
(
i_r_size
!=
0
&&
i_motion_code
!=
0
)
?
GetBits
(
&
p_vpar
->
bit_stream
,
i_r_size
)
:
0
;
if
(
(
p_vpar
->
mb
.
i_mv_format
==
MOTION_FIELD
)
&&
(
p_vpar
->
picture
.
i_structure
==
FRAME_STRUCTURE
)
)
{
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
1
]
>>=
1
;
}
vpar_DecodeMotionVector
(
&
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
1
],
i_r_size
,
i_motion_code
,
i_motion_residual
,
i_full_pel
);
if
(
(
p_vpar
->
mb
.
i_mv_format
==
MOTION_FIELD
)
&&
(
p_vpar
->
picture
.
i_structure
==
FRAME_STRUCTURE
)
)
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
1
]
<<=
1
;
p_mb
->
pppi_motion_vectors
[
i_r
][
i_s
][
1
]
=
p_vpar
->
slice
.
pppi_pmv
[
i_r
][
i_s
][
1
];
if
(
p_vpar
->
mb
.
b_dmv
)
{
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
pi_dm_vector
[
1
]
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
?
-
1
:
1
;
}
else
{
pi_dm_vector
[
1
]
=
0
;
}
/* Dual Prime Arithmetic (ISO/IEC 13818-2 section 7.6.3.6) */
#define i_mv_x p_mb->pppi_motion_vectors[0][0][0]
if
(
p_vpar
->
picture
.
i_structure
==
FRAME_STRUCTURE
)
{
#define i_mv_y (p_mb->pppi_motion_vectors[0][0][1] << 1)
if
(
p_vpar
->
picture
.
b_top_field_first
)
{
/* vector for prediction of top field from bottom field */
p_mb
->
ppi_dmv
[
0
][
0
]
=
((
i_mv_x
+
(
i_mv_x
>
0
))
>>
1
)
+
pi_dm_vector
[
0
];
p_mb
->
ppi_dmv
[
0
][
1
]
=
((
i_mv_y
+
(
i_mv_y
>
0
))
>>
1
)
+
pi_dm_vector
[
1
]
-
1
;
/* vector for prediction of bottom field from top field */
p_mb
->
ppi_dmv
[
1
][
0
]
=
((
3
*
i_mv_x
+
(
i_mv_x
>
0
))
>>
1
)
+
pi_dm_vector
[
0
];
p_mb
->
ppi_dmv
[
1
][
1
]
=
((
3
*
i_mv_y
+
(
i_mv_y
>
0
))
>>
1
)
+
pi_dm_vector
[
1
]
+
1
;
}
else
{
/* vector for prediction of top field from bottom field */
p_mb
->
ppi_dmv
[
0
][
0
]
=
((
3
*
i_mv_x
+
(
i_mv_x
>
0
))
>>
1
)
+
pi_dm_vector
[
0
];
p_mb
->
ppi_dmv
[
0
][
1
]
=
((
3
*
i_mv_y
+
(
i_mv_y
>
0
))
>>
1
)
+
pi_dm_vector
[
1
]
-
1
;
/* vector for prediction of bottom field from top field */
p_mb
->
ppi_dmv
[
1
][
0
]
=
((
i_mv_x
+
(
i_mv_x
>
0
))
>>
1
)
+
pi_dm_vector
[
0
];
p_mb
->
ppi_dmv
[
1
][
1
]
=
((
i_mv_y
+
(
i_mv_y
>
0
))
>>
1
)
+
pi_dm_vector
[
1
]
+
1
;
}
#undef i_mv_y
}
else
{
#define i_mv_y p_mb->pppi_motion_vectors[0][0][1]
/* vector for prediction from field of opposite 'parity' */
p_mb
->
ppi_dmv
[
0
][
0
]
=
((
i_mv_x
+
(
i_mv_x
>
0
))
>>
1
)
+
pi_dm_vector
[
0
];
p_mb
->
ppi_dmv
[
0
][
1
]
=
((
i_mv_y
+
(
i_mv_y
>
0
))
>>
1
)
+
pi_dm_vector
[
1
];
/* correct for vertical field shift */
if
(
p_vpar
->
picture
.
i_structure
==
TOP_FIELD
)
p_mb
->
ppi_dmv
[
0
][
1
]
--
;
else
p_mb
->
ppi_dmv
[
0
][
1
]
++
;
#undef i_mv_y
}
#undef i_mv_x
}
}
/*****************************************************************************
* vpar_MPEG1MotionVector : Parse the next MPEG-1 motion vectors
*****************************************************************************/
void
vpar_MPEG1MotionVector
(
vpar_thread_t
*
p_vpar
,
macroblock_t
*
p_mb
,
int
i_s
)
{
vpar_MotionVector
(
p_vpar
,
p_mb
,
0
,
i_s
,
p_vpar
->
picture
.
pb_full_pel_vector
[
i_s
]
);
}
/*****************************************************************************
* vpar_MPEG2MotionVector : Parse the next MPEG-2 motion_vectors field
*****************************************************************************/
void
vpar_MPEG2MotionVector
(
vpar_thread_t
*
p_vpar
,
macroblock_t
*
p_mb
,
int
i_s
)
{
if
(
p_vpar
->
mb
.
i_mv_count
==
1
)
{
if
(
p_vpar
->
mb
.
i_mv_format
==
MOTION_FIELD
&&
!
p_vpar
->
mb
.
b_dmv
)
{
p_mb
->
ppi_field_select
[
0
][
i_s
]
=
p_mb
->
ppi_field_select
[
1
][
i_s
]
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
}
vpar_MotionVector
(
p_vpar
,
p_mb
,
0
,
i_s
,
0
);
p_vpar
->
slice
.
pppi_pmv
[
1
][
i_s
][
0
]
=
p_vpar
->
slice
.
pppi_pmv
[
0
][
i_s
][
0
];
p_vpar
->
slice
.
pppi_pmv
[
1
][
i_s
][
1
]
=
p_vpar
->
slice
.
pppi_pmv
[
0
][
i_s
][
1
];
p_mb
->
pppi_motion_vectors
[
1
][
i_s
][
0
]
=
p_vpar
->
slice
.
pppi_pmv
[
0
][
i_s
][
0
];
p_mb
->
pppi_motion_vectors
[
1
][
i_s
][
1
]
=
p_vpar
->
slice
.
pppi_pmv
[
0
][
i_s
][
1
];
}
else
{
p_mb
->
ppi_field_select
[
0
][
i_s
]
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
vpar_MotionVector
(
p_vpar
,
p_mb
,
0
,
i_s
,
0
);
p_mb
->
ppi_field_select
[
1
][
i_s
]
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
vpar_MotionVector
(
p_vpar
,
p_mb
,
1
,
i_s
,
0
);
}
}
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