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
3a3f1725
Commit
3a3f1725
authored
Jan 15, 2001
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* Finally fixed repeat_first_field and co. (pas encore tout compris...)
parent
4bcf1bae
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
28 deletions
+43
-28
src/video_decoder/vpar_headers.h
src/video_decoder/vpar_headers.h
+2
-2
src/video_decoder/vpar_synchro.h
src/video_decoder/vpar_synchro.h
+2
-1
src/video_parser/vpar_headers.c
src/video_parser/vpar_headers.c
+28
-10
src/video_parser/vpar_synchro.c
src/video_parser/vpar_synchro.c
+11
-15
No files found.
src/video_decoder/vpar_headers.h
View file @
3a3f1725
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vpar_headers.h : video parser : headers parsing
* vpar_headers.h : video parser : headers parsing
*****************************************************************************
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_headers.h,v 1.
2 2001/01/15 13:25:09
massiot Exp $
* $Id: vpar_headers.h,v 1.
3 2001/01/15 18:02:48
massiot Exp $
*
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr>
...
@@ -110,7 +110,7 @@ typedef struct picture_parsing_s
...
@@ -110,7 +110,7 @@ typedef struct picture_parsing_s
int
i_intra_dc_precision
;
int
i_intra_dc_precision
;
boolean_t
b_frame_pred_frame_dct
,
b_q_scale_type
;
boolean_t
b_frame_pred_frame_dct
,
b_q_scale_type
;
boolean_t
b_intra_vlc_format
;
boolean_t
b_intra_vlc_format
;
boolean_t
b_alternate_scan
,
b_progressive
_frame
;
boolean_t
b_alternate_scan
,
b_progressive
;
boolean_t
b_top_field_first
,
b_concealment_mv
;
boolean_t
b_top_field_first
,
b_concealment_mv
;
boolean_t
b_repeat_first_field
;
boolean_t
b_repeat_first_field
;
/* Relative to the current field */
/* Relative to the current field */
...
...
src/video_decoder/vpar_synchro.h
View file @
3a3f1725
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vpar_synchro.h : video parser blocks management
* vpar_synchro.h : video parser blocks management
*****************************************************************************
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_synchro.h,v 1.
4 2000/12/29 12:49:2
9 massiot Exp $
* $Id: vpar_synchro.h,v 1.
5 2001/01/15 18:02:4
9 massiot Exp $
*
*
* Author: Christophe Massiot <massiot@via.ecp.fr>
* Author: Christophe Massiot <massiot@via.ecp.fr>
*
*
...
@@ -64,6 +64,7 @@ typedef struct video_synchro_s
...
@@ -64,6 +64,7 @@ typedef struct video_synchro_s
unsigned
int
i_eta_p
,
i_eta_b
;
unsigned
int
i_eta_p
,
i_eta_b
;
boolean_t
b_dropped_last
;
/* for special synchros below */
boolean_t
b_dropped_last
;
/* for special synchros below */
mtime_t
backward_pts
,
current_pts
;
mtime_t
backward_pts
,
current_pts
;
mtime_t
next_period
;
/* period to add to the next picture */
#ifdef STATS
#ifdef STATS
unsigned
int
i_trashed_pic
,
i_not_chosen_pic
,
i_pic
;
unsigned
int
i_trashed_pic
,
i_not_chosen_pic
,
i_pic
;
...
...
src/video_parser/vpar_headers.c
View file @
3a3f1725
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vpar_headers.c : headers parsing
* vpar_headers.c : headers parsing
*****************************************************************************
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_headers.c,v 1.6
8 2001/01/13 12:57:21 sam
Exp $
* $Id: vpar_headers.c,v 1.6
9 2001/01/15 18:02:49 massiot
Exp $
*
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr>
...
@@ -542,11 +542,9 @@ static void PictureHeader( vpar_thread_t * p_vpar )
...
@@ -542,11 +542,9 @@ static void PictureHeader( vpar_thread_t * p_vpar )
p_vpar
->
picture
.
b_intra_vlc_format
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_intra_vlc_format
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_alternate_scan
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_alternate_scan
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_repeat_first_field
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_repeat_first_field
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
/* repeat_first_field (ISO/IEC 13818-2 6.3.10 is necessary to know
/* chroma_420_type (obsolete) */
* the length of the picture_display_extension structure.
* chroma_420_type (obsolete) */
RemoveBits
(
&
p_vpar
->
bit_stream
,
1
);
RemoveBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_progressive
_frame
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
p_vpar
->
picture
.
b_progressive
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
/* composite_display_flag */
/* composite_display_flag */
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
...
@@ -561,13 +559,14 @@ static void PictureHeader( vpar_thread_t * p_vpar )
...
@@ -561,13 +559,14 @@ static void PictureHeader( vpar_thread_t * p_vpar )
/* MPEG-1 compatibility flags */
/* MPEG-1 compatibility flags */
p_vpar
->
picture
.
i_intra_dc_precision
=
0
;
/* 8 bits */
p_vpar
->
picture
.
i_intra_dc_precision
=
0
;
/* 8 bits */
i_structure
=
FRAME_STRUCTURE
;
i_structure
=
FRAME_STRUCTURE
;
p_vpar
->
picture
.
b_top_field_first
=
0
;
p_vpar
->
picture
.
b_frame_pred_frame_dct
=
1
;
p_vpar
->
picture
.
b_frame_pred_frame_dct
=
1
;
p_vpar
->
picture
.
b_concealment_mv
=
0
;
p_vpar
->
picture
.
b_concealment_mv
=
0
;
p_vpar
->
picture
.
b_q_scale_type
=
0
;
p_vpar
->
picture
.
b_q_scale_type
=
0
;
p_vpar
->
picture
.
b_intra_vlc_format
=
0
;
p_vpar
->
picture
.
b_intra_vlc_format
=
0
;
p_vpar
->
picture
.
b_alternate_scan
=
0
;
/* zigzag */
p_vpar
->
picture
.
b_alternate_scan
=
0
;
/* zigzag */
p_vpar
->
picture
.
b_repeat_first_field
=
0
;
p_vpar
->
picture
.
b_repeat_first_field
=
1
;
p_vpar
->
picture
.
b_progressive
_frame
=
1
;
p_vpar
->
picture
.
b_progressive
=
1
;
}
}
#ifdef STATS
#ifdef STATS
...
@@ -619,9 +618,30 @@ static void PictureHeader( vpar_thread_t * p_vpar )
...
@@ -619,9 +618,30 @@ static void PictureHeader( vpar_thread_t * p_vpar )
}
}
else
else
{
{
int
i_repeat_field
;
/* Compute the number of times the frame will be emitted by the
* decoder (number of periods). */
if
(
p_vpar
->
sequence
.
b_progressive
)
{
i_repeat_field
=
1
+
p_vpar
->
picture
.
b_repeat_first_field
+
p_vpar
->
picture
.
b_top_field_first
;
}
else
{
if
(
p_vpar
->
picture
.
b_progressive
)
{
i_repeat_field
=
2
+
p_vpar
->
picture
.
b_repeat_first_field
;
}
else
{
i_repeat_field
=
2
;
}
}
/* Warn synchro we have a new picture (updates pictures index). */
/* Warn synchro we have a new picture (updates pictures index). */
vpar_SynchroNewPicture
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
vpar_SynchroNewPicture
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
p_vpar
->
picture
.
b_repeat_firs
t_field
);
i_repea
t_field
);
if
(
b_parsable
)
if
(
b_parsable
)
{
{
...
@@ -751,7 +771,6 @@ static void PictureHeader( vpar_thread_t * p_vpar )
...
@@ -751,7 +771,6 @@ static void PictureHeader( vpar_thread_t * p_vpar )
if
(
p_vpar
->
picture
.
b_error
)
if
(
p_vpar
->
picture
.
b_error
)
{
{
/* Trash picture. */
/* Trash picture. */
//fprintf(stderr, "Image trashee\n");
#ifdef VDEC_SMP
#ifdef VDEC_SMP
for
(
i_mb
=
1
;
p_vpar
->
picture
.
pp_mb
[
i_mb
]
!=
NULL
;
i_mb
++
)
for
(
i_mb
=
1
;
p_vpar
->
picture
.
pp_mb
[
i_mb
]
!=
NULL
;
i_mb
++
)
{
{
...
@@ -778,7 +797,6 @@ static void PictureHeader( vpar_thread_t * p_vpar )
...
@@ -778,7 +797,6 @@ static void PictureHeader( vpar_thread_t * p_vpar )
}
}
else
if
(
p_vpar
->
picture
.
i_current_structure
==
FRAME_STRUCTURE
)
else
if
(
p_vpar
->
picture
.
i_current_structure
==
FRAME_STRUCTURE
)
{
{
//fprintf(stderr, "Image parsee (%d)\n", p_vpar->picture.i_coding_type);
/* Frame completely parsed. */
/* Frame completely parsed. */
#ifdef VDEC_SMP
#ifdef VDEC_SMP
for
(
i_mb
=
1
;
p_vpar
->
picture
.
pp_mb
[
i_mb
]
!=
NULL
;
i_mb
++
)
for
(
i_mb
=
1
;
p_vpar
->
picture
.
pp_mb
[
i_mb
]
!=
NULL
;
i_mb
++
)
...
...
src/video_parser/vpar_synchro.c
View file @
3a3f1725
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vpar_synchro.c : frame dropping routines
* vpar_synchro.c : frame dropping routines
*****************************************************************************
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vpar_synchro.c,v 1.7
2 2001/01/15 13:25:0
9 massiot Exp $
* $Id: vpar_synchro.c,v 1.7
3 2001/01/15 18:02:4
9 massiot Exp $
*
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
...
@@ -130,7 +130,6 @@ static int SynchroType( void );
...
@@ -130,7 +130,6 @@ static int SynchroType( void );
/* Error margins */
/* Error margins */
#define DELTA (int)(0.040*CLOCK_FREQ)
#define DELTA (int)(0.040*CLOCK_FREQ)
#define PTS_THRESHOLD (int)(0.030*CLOCK_FREQ)
#define DEFAULT_NB_P 5
#define DEFAULT_NB_P 5
#define DEFAULT_NB_B 1
#define DEFAULT_NB_B 1
...
@@ -151,7 +150,7 @@ void vpar_SynchroInit( vpar_thread_t * p_vpar )
...
@@ -151,7 +150,7 @@ void vpar_SynchroInit( vpar_thread_t * p_vpar )
memset
(
p_vpar
->
synchro
.
pi_meaningful
,
0
,
4
*
sizeof
(
unsigned
int
)
);
memset
(
p_vpar
->
synchro
.
pi_meaningful
,
0
,
4
*
sizeof
(
unsigned
int
)
);
p_vpar
->
synchro
.
b_dropped_last
=
0
;
p_vpar
->
synchro
.
b_dropped_last
=
0
;
p_vpar
->
synchro
.
current_pts
=
mdate
()
+
DEFAULT_PTS_DELAY
;
p_vpar
->
synchro
.
current_pts
=
mdate
()
+
DEFAULT_PTS_DELAY
;
p_vpar
->
synchro
.
backward_pts
=
0
;
p_vpar
->
synchro
.
backward_pts
=
p_vpar
->
synchro
.
next_period
=
0
;
#ifdef STATS
#ifdef STATS
p_vpar
->
synchro
.
i_trashed_pic
=
p_vpar
->
synchro
.
i_not_chosen_pic
=
p_vpar
->
synchro
.
i_trashed_pic
=
p_vpar
->
synchro
.
i_not_chosen_pic
=
p_vpar
->
synchro
.
i_pic
=
0
;
p_vpar
->
synchro
.
i_pic
=
0
;
...
@@ -419,7 +418,7 @@ mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
...
@@ -419,7 +418,7 @@ mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
* vpar_SynchroNewPicture: Update stream structure and PTS
* vpar_SynchroNewPicture: Update stream structure and PTS
*****************************************************************************/
*****************************************************************************/
void
vpar_SynchroNewPicture
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
void
vpar_SynchroNewPicture
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
boolean_t
b
_repeat_field
)
int
i
_repeat_field
)
{
{
mtime_t
period
=
1000000
/
(
p_vpar
->
sequence
.
i_frame_rate
)
*
1001
;
mtime_t
period
=
1000000
/
(
p_vpar
->
sequence
.
i_frame_rate
)
*
1001
;
...
@@ -469,18 +468,14 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
...
@@ -469,18 +468,14 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
break
;
break
;
}
}
if
(
b_repeat_field
)
p_vpar
->
synchro
.
current_pts
+=
p_vpar
->
synchro
.
next_period
;
{
/* MPEG-2 repeat_first_field */
/* A video frame can be displayed 1, 2 or 3 times, according to
/* FIXME : this is not exactly what we should do, repeat_first_field
* repeat_first_field, top_field_first, progressive_sequence and
* only regards the next picture */
* progressive_frame. */
p_vpar
->
synchro
.
current_pts
+=
period
+
(
period
>>
1
);
p_vpar
->
synchro
.
next_period
=
i_repeat_field
*
(
period
>>
1
);
}
else
{
p_vpar
->
synchro
.
current_pts
+=
period
;
}
#define PTS_THRESHOLD (period >> 2)
if
(
i_coding_type
==
B_CODING_TYPE
)
if
(
i_coding_type
==
B_CODING_TYPE
)
{
{
if
(
p_vpar
->
sequence
.
next_pts
)
if
(
p_vpar
->
sequence
.
next_pts
)
...
@@ -551,6 +546,7 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
...
@@ -551,6 +546,7 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
p_vpar
->
sequence
.
next_pts
=
0
;
p_vpar
->
sequence
.
next_pts
=
0
;
}
}
}
}
#undef PTS_THRESHOLD
#ifdef STATS
#ifdef STATS
p_vpar
->
synchro
.
i_pic
++
;
p_vpar
->
synchro
.
i_pic
++
;
...
...
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