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
1d728604
Commit
1d728604
authored
Sep 06, 2001
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reworked jlj's patch for field pictures.
parent
51705951
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
39 deletions
+69
-39
src/video_decoder/vpar_blocks.c
src/video_decoder/vpar_blocks.c
+2
-3
src/video_decoder/vpar_headers.c
src/video_decoder/vpar_headers.c
+67
-36
No files found.
src/video_decoder/vpar_blocks.c
View file @
1d728604
...
...
@@ -2,7 +2,7 @@
* vpar_blocks.c : blocks parsing
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_blocks.c,v 1.
9 2001/09/05 16:07:50
massiot Exp $
* $Id: vpar_blocks.c,v 1.
10 2001/09/06 13:16:26
massiot Exp $
*
* Authors: Michel Lespinasse <walken@zoy.org>
* Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
...
...
@@ -1812,8 +1812,7 @@ static __inline__ void ParseSlice( vpar_thread_t * p_vpar,
pp_forward_ref
[
!
p_vpar
->
picture
.
b_current_field
]
=
p_vpar
->
picture
.
p_picture
;
}
if
(
(
i_coding_type
!=
I_CODING_TYPE
||
p_vpar
->
picture
.
b_concealment_mv
)
&&
pp_forward_ref
[
1
]
!=
NULL
)
if
(
i_coding_type
!=
I_CODING_TYPE
||
p_vpar
->
picture
.
b_concealment_mv
)
{
p_f_motion
->
pppi_ref
[
1
][
0
]
=
pp_forward_ref
[
1
]
->
p_y
+
i_offset
*
4
+
i_width
;
...
...
src/video_decoder/vpar_headers.c
View file @
1d728604
...
...
@@ -2,7 +2,7 @@
* vpar_headers.c : headers parsing
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_headers.c,v 1.
7 2001/08/22 17:21:4
6 massiot Exp $
* $Id: vpar_headers.c,v 1.
8 2001/09/06 13:16:2
6 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr>
...
...
@@ -458,11 +458,8 @@ static void GroupHeader( vpar_thread_t * p_vpar )
*****************************************************************************/
static
void
PictureHeader
(
vpar_thread_t
*
p_vpar
)
{
int
i_structure
;
boolean_t
b_parsable
;
#ifdef VDEC_SMP
int
i_mb
;
#endif
int
i_structure
,
i_previous_coding_type
;
boolean_t
b_parsable
=
0
;
/* Recover in case of stream discontinuity. */
if
(
p_vpar
->
sequence
.
b_expect_discontinuity
)
...
...
@@ -480,6 +477,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
/* Parse the picture header. */
RemoveBits
(
&
p_vpar
->
bit_stream
,
10
);
/* temporal_reference */
i_previous_coding_type
=
p_vpar
->
picture
.
i_coding_type
;
p_vpar
->
picture
.
i_coding_type
=
GetBits
(
&
p_vpar
->
bit_stream
,
3
);
RemoveBits
(
&
p_vpar
->
bit_stream
,
16
);
/* vbv_delay */
...
...
@@ -565,40 +563,30 @@ static void PictureHeader( vpar_thread_t * p_vpar )
p_vpar
->
pc_pictures
[
p_vpar
->
picture
.
i_coding_type
]
++
;
#endif
if
(
p_vpar
->
picture
.
i_current_structure
&&
(
i_structure
==
FRAME_STRUCTURE
||
i_structure
==
p_vpar
->
picture
.
i_current_structure
)
)
if
(
p_vpar
->
picture
.
i_current_structure
)
{
/* We don't have the second field of the buffered frame. */
if
(
p_vpar
->
picture
.
p_picture
!=
NULL
)
if
(
(
i_structure
==
FRAME_STRUCTURE
||
i_structure
==
p_vpar
->
picture
.
i_current_structure
)
)
{
ReferenceReplace
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
NULL
);
vout_DestroyPicture
(
p_vpar
->
p_vout
,
p_vpar
->
picture
.
p_picture
);
p_vpar
->
picture
.
p_picture
=
NULL
;
}
p_vpar
->
picture
.
i_current_structure
=
0
;
intf_WarnMsg
(
2
,
"Odd number of field pictures."
);
}
/* We don't have the second field of the buffered frame. */
if
(
p_vpar
->
picture
.
p_picture
!=
NULL
)
{
ReferenceReplace
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
NULL
);
vout_DestroyPicture
(
p_vpar
->
p_vout
,
p_vpar
->
picture
.
p_picture
);
p_vpar
->
picture
.
p_picture
=
NULL
;
}
/* Do we have the reference pictures ? */
b_parsable
=
!
(((
p_vpar
->
picture
.
i_coding_type
==
P_CODING_TYPE
||
p_vpar
->
picture
.
b_concealment_mv
)
&&
(
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
)));
p_vpar
->
picture
.
i_current_structure
=
0
;
if
(
p_vpar
->
picture
.
i_current_structure
)
{
/* Second field of a frame. We will decode it if, and only if we
* have decoded the first field. */
if
(
b_parsable
)
intf_WarnMsg
(
2
,
"Odd number of field pictures."
);
}
else
{
/* Second field of a frame. We will decode it if, and only if we
* have decoded the first field. */
if
(
p_vpar
->
picture
.
p_picture
==
NULL
)
{
if
(
(
p_vpar
->
picture
.
i_coding_type
==
I_CODING_TYPE
...
...
@@ -615,12 +603,47 @@ static void PictureHeader( vpar_thread_t * p_vpar )
b_parsable
=
0
;
}
}
else
{
/* We suppose we have the reference pictures, since we already
* decoded the first field and the second field will not need
* any extra reference picture. There is a special case of
* P field being the second field of an I field, but ISO/IEC
* 13818-2 section 7.6.3.5 specifies that this P field will
* not need any reference picture besides the I field. So far
* so good. */
b_parsable
=
1
;
if
(
p_vpar
->
picture
.
i_coding_type
==
P_CODING_TYPE
&&
i_previous_coding_type
==
I_CODING_TYPE
&&
p_vpar
->
sequence
.
p_forward
==
NULL
)
{
/* This is the special case of section 7.6.3.5. Create
* a fake reference picture (which will not be used)
* but will prevent us from segfaulting in the slice
* parsing. */
static
picture_t
fake_picture
;
fake_picture
.
p_data
=
NULL
;
/* We will use it later */
p_vpar
->
sequence
.
p_forward
=
&
fake_picture
;
}
}
}
}
else
if
(
!
p_vpar
->
picture
.
i_current_structure
)
{
/* First field of a frame, or new frame picture. */
int
i_repeat_field
;
/* Do we have the reference pictures ? */
b_parsable
=
!
(((
p_vpar
->
picture
.
i_coding_type
==
P_CODING_TYPE
||
p_vpar
->
picture
.
b_concealment_mv
)
&&
(
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
)));
/* Compute the number of times the frame will be emitted by the
* decoder (number of half-periods). */
if
(
p_vpar
->
sequence
.
b_progressive
)
...
...
@@ -797,6 +820,14 @@ static void PictureHeader( vpar_thread_t * p_vpar )
return
;
}
if
(
p_vpar
->
sequence
.
p_forward
!=
NULL
&&
p_vpar
->
sequence
.
p_forward
->
p_data
==
NULL
)
{
/* This can only happen with the fake picture created for section
* 7.6.3.5. Clean up our mess. */
p_vpar
->
sequence
.
p_forward
=
NULL
;
}
if
(
p_vpar
->
picture
.
b_error
)
{
/* Trash picture. */
...
...
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