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
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
Show 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