Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
ea23960c
Commit
ea23960c
authored
Jan 04, 2000
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
video_fifo.c et vpar_headers.c compilent � peu pr�s. Correction d'environ
4212 fautes de frappe.
parent
56bb1291
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
139 additions
and
101 deletions
+139
-101
include/video_fifo.h
include/video_fifo.h
+2
-2
include/vpar_blocks.h
include/vpar_blocks.h
+12
-0
include/vpar_headers.h
include/vpar_headers.h
+6
-3
src/video_parser/video_fifo.c
src/video_parser/video_fifo.c
+36
-31
src/video_parser/vpar_headers.c
src/video_parser/vpar_headers.c
+83
-65
No files found.
include/video_fifo.h
View file @
ea23960c
...
...
@@ -31,7 +31,7 @@
*****************************************************************************
* This rotative FIFO contains undecoded macroblocks that are to be decoded
*****************************************************************************/
struct
v
ideo_parser
_s
;
struct
v
par_thread
_s
;
typedef
struct
video_fifo_s
{
...
...
@@ -43,7 +43,7 @@ typedef struct video_fifo_s
int
i_start
;
int
i_end
;
struct
v
ideo_parser_s
*
p_vpar
;
struct
v
par_thread_s
*
p_vpar
;
}
video_fifo_t
;
/*****************************************************************************
...
...
include/vpar_blocks.h
View file @
ea23960c
...
...
@@ -77,3 +77,15 @@ typedef struct
#define MOTION_FRAME 2
#define MOTION_16X8 2
#define MOTION_DMV 3
/*****************************************************************************
* Prototypes
*****************************************************************************/
void
vpar_CodedPattern420
(
struct
vpar_thread_s
*
p_vpar
);
void
vpar_CodedPattern422
(
struct
vpar_thread_s
*
p_vpar
);
void
vpar_CodedPattern444
(
struct
vpar_thread_s
*
p_vpar
);
int
vpar_IMBType
(
struct
vpar_thread_s
*
p_vpar
);
int
vpar_PMBType
(
struct
vpar_thread_s
*
p_vpar
);
int
vpar_BMBType
(
struct
vpar_thread_s
*
p_vpar
);
int
vpar_DMBType
(
struct
vpar_thread_s
*
p_vpar
);
include/vpar_headers.h
View file @
ea23960c
...
...
@@ -20,7 +20,9 @@
*****************************************************************************/
struct
vpar_thread_s
;
typedef
void
(
*
f_slice_header_t
)(
struct
vpar_thread_s
*
,
int
*
,
int
,
elem_t
*
,
u32
);
typedef
void
(
*
f_slice_header_t
)(
struct
vpar_thread_s
*
,
int
*
,
int
,
u32
);
typedef
void
(
*
f_chroma_pattern_t
)(
struct
vpar_thread_s
*
);
typedef
int
(
*
f_macroblock_type_t
)(
struct
vpar_thread_s
*
);
/*****************************************************************************
* quant_matrix_t : Quantization Matrix
...
...
@@ -53,7 +55,7 @@ typedef struct sequence_s
quant_matrix_t
intra_quant
,
nonintra_quant
;
quant_matrix_t
chroma_intra_quant
,
chroma_nonintra_quant
;
void
(
*
pf_decode_mv
)(
struct
vpar_thread_s
*
,
int
);
void
(
*
pf_decode_pattern
)(
struct
vpar_thread_s
*
)
;
f_chroma_pattern_t
pf_decode_pattern
;
/* Parser context */
picture_t
*
p_forward
;
...
...
@@ -79,6 +81,7 @@ typedef struct picture_parsing_s
int
ppi_f_code
[
2
][
2
];
int
i_intra_dc_precision
;
boolean_t
b_frame_pred_frame_dct
,
b_q_scale_type
;
boolean_t
b_intra_vlc_format
;
boolean_t
b_alternate_scan
,
b_progressive_frame
;
boolean_t
b_top_field_first
,
b_concealment_mv
;
boolean_t
b_repeat_first_field
;
...
...
@@ -93,7 +96,7 @@ typedef struct picture_parsing_s
/* Relative to the current field */
int
i_coding_type
,
i_structure
;
boolean_t
b_frame_structure
;
int
(
*
pf_macroblock_type
)(
struct
vpar_thread_s
*
)
;
f_macroblock_type_t
pf_macroblock_type
;
boolean_t
b_error
;
}
picture_parsing_t
;
...
...
src/video_parser/video_fifo.c
View file @
ea23960c
...
...
@@ -28,11 +28,15 @@
#include "decoder_fifo.h"
#include "video.h"
#include "video_output.h"
#include "video_parser.h"
#include "macroblock.h"
#include "video_fifo.h"
#include "vdec_idct.h"
#include "video_decoder.h"
#include "vdec_motion.h"
#include "vpar_blocks.h"
#include "vpar_headers.h"
#include "video_fifo.h"
#include "video_parser.h"
/*****************************************************************************
* vpar_InitFIFO : initialize the video FIFO
...
...
@@ -42,19 +46,20 @@ void vpar_InitFIFO( vpar_thread_t * p_vpar )
int
i_dummy
;
/* Initialize mutex and cond */
vlc_mutex_init
(
p_vpar
->
vfifo
.
lock
);
vlc_cond_init
(
p_vpar
->
vfifo
.
wait
);
vlc_mutex_init
(
p_vpar
->
vbuffer
.
lock
);
vlc_mutex_init
(
&
p_vpar
->
vfifo
.
lock
);
vlc_cond_init
(
&
p_vpar
->
vfifo
.
wait
);
vlc_mutex_init
(
&
p_vpar
->
vbuffer
.
lock
);
/* Initialize FIFO properties */
p_vpar
->
vfifo
.
i_start
=
p_vpar
->
vfifo
.
i_end
=
0
;
p_vpar
->
vfifo
.
p_vpar
=
p_vpar
;
/* Initialize buffer properties */
i_index
=
VFIFO_SIZE
;
/* all structures are available */
p_vpar
->
vbuffer
.
i_index
=
VFIFO_SIZE
;
/* all structures are available */
for
(
i_dummy
=
0
;
i_dummy
<
VFIFO_SIZE
+
1
;
i_dummy
++
)
{
p_vpar
->
vfifo
.
pp_mb_free
[
i_dummy
]
=
p_vpar
->
vfifo
.
p_macroblocks
+
i
;
p_vpar
->
vbuffer
.
pp_mb_free
[
i_dummy
]
=
p_vpar
->
vbuffer
.
p_macroblocks
+
i_dummy
;
}
}
...
...
@@ -91,18 +96,18 @@ macroblock_t * vpar_NewMacroblock( video_fifo_t * p_fifo )
{
macroblock_t
*
p_mb
;
#define P_buffer p_fifo->p_vpar
.
vbuffer
vlc_mutex_lock
(
&
P_buffer
->
lock
);
#define P_buffer p_fifo->p_vpar
->
vbuffer
vlc_mutex_lock
(
&
P_buffer
.
lock
);
if
(
P_buffer
.
i_index
==
-
1
)
{
/* No more structures available. This should not happen ! */
return
NULL
;
}
p_mb
=
P_buffer
->
pp_undec_free
[
P_buffer
->
i_index
--
];
#undef P_buffer
p_mb
=
P_buffer
.
pp_mb_free
[
P_buffer
.
i_index
--
];
vlc_mutex_unlock
(
&
P_buffer
->
lock
);
vlc_mutex_unlock
(
&
P_buffer
.
lock
);
#undef P_buffer
return
(
p_mb
);
}
...
...
@@ -117,7 +122,7 @@ void vpar_DecodeMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
/* By construction, the video FIFO cannot be full */
VIDEO_FIFO_END
(
*
p_fifo
)
=
p_mb
;
VIDEO_FIFO_INCEND
(
*
p_fifo
);
vlc_mutex_unlock
(
&
p_fifo
->
lock
);
}
...
...
@@ -130,19 +135,19 @@ void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
/* Unlink referenced pictures */
if
(
p_mb
->
p_forw_top
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_forw_top
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_forw_top
);
}
if
(
p_mb
->
p_backw_top
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_backw_top
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_backw_top
);
}
if
(
p_mb
->
p_forw_bot
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_forw_bot
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_forw_bot
);
}
if
(
p_mb
->
p_backw_bot
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_backw_bot
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_backw_bot
);
}
/* Unlink picture buffer */
...
...
@@ -151,7 +156,7 @@ void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
if
(
p_mb
->
p_picture
->
i_deccount
==
0
)
{
/* Mark the picture to be displayed */
vout_DisplayPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_picture
);
vout_DisplayPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_picture
);
/* Warn Synchro for its records. */
vpar_SynchroEnd
(
p_fifo
->
p_vpar
);
...
...
@@ -159,10 +164,10 @@ void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
vlc_mutex_unlock
(
&
p_mb
->
p_picture
->
lock_deccount
);
/* Release the macroblock_t structure */
#define P_buffer p_fifo->p_vpar
.
vbuffer
vlc_mutex_lock
(
&
P_buffer
->
lock
);
P_buffer
->
pp_mb_free
[
++
P_buffer
->
i_index
]
=
p_mb
;
vlc_mutex_unlock
(
&
P_buffer
->
lock
);
#define P_buffer p_fifo->p_vpar
->
vbuffer
vlc_mutex_lock
(
&
P_buffer
.
lock
);
P_buffer
.
pp_mb_free
[
++
P_buffer
.
i_index
]
=
p_mb
;
vlc_mutex_unlock
(
&
P_buffer
.
lock
);
#undef P_buffer
}
...
...
@@ -174,25 +179,25 @@ void vpar_DestroyMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
/* Unlink referenced pictures */
if
(
p_mb
->
p_forw_top
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_forw_top
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_forw_top
);
}
if
(
p_mb
->
p_backw_top
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_backw_top
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_backw_top
);
}
if
(
p_mb
->
p_forw_bot
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_forw_bot
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_forw_bot
);
}
if
(
p_mb
->
p_backw_bot
!=
NULL
)
{
vout_UnlinkPicture
(
p_fifo
->
p_vpar
.
p_vout
,
p_mb
->
p_backw_bot
);
vout_UnlinkPicture
(
p_fifo
->
p_vpar
->
p_vout
,
p_mb
->
p_backw_bot
);
}
/* Release the macroblock_t structure */
#define P_buffer p_fifo->p_vpar
.
vbuffer
vlc_mutex_lock
(
&
P_buffer
->
lock
);
P_buffer
->
pp_mb_free
[
++
P_buffer
->
i_index
]
=
p_mb
;
vlc_mutex_unlock
(
&
P_buffer
->
lock
);
#define P_buffer p_fifo->p_vpar
->
vbuffer
vlc_mutex_lock
(
&
P_buffer
.
lock
);
P_buffer
.
pp_mb_free
[
++
P_buffer
.
i_index
]
=
p_mb
;
vlc_mutex_unlock
(
&
P_buffer
.
lock
);
#undef P_buffer
}
src/video_parser/vpar_headers.c
View file @
ea23960c
...
...
@@ -28,41 +28,54 @@
#include "decoder_fifo.h"
#include "video.h"
#include "video_output.h"
#include "vpar_blocks.h"
#include "video_parser.h"
#include "macroblock.h"
#include "video_fifo.h"
#include "vdec_idct.h"
#include "video_decoder.h"
#include "vdec_motion.h"
#include "vpar_blocks.h"
#include "vpar_headers.h"
#include "video_fifo.h"
#include "video_parser.h"
/*
* Local prototypes
*/
static
__inline__
void
NextStartCode
(
vpar_thread_t
*
p_vpar
);
static
void
GroupHeader
(
vpar_thread_t
*
p_vpar
)
static
void
PictureHeader
(
vpar_thread_t
*
p_vpar
)
static
void
SequenceHeader
(
vpar_thread_t
*
p_vpar
);
static
void
GroupHeader
(
vpar_thread_t
*
p_vpar
);
static
void
PictureHeader
(
vpar_thread_t
*
p_vpar
);
static
void
__inline__
ReferenceUpdate
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
picture_t
*
p_newref
)
picture_t
*
p_newref
)
;
static
void
__inline__
ReferenceReplace
(
vpar_thread_t
*
p_vpar
,
int
i_coding_type
,
picture_t
*
p_newref
)
picture_t
*
p_newref
)
;
static
void
SliceHeader00
(
vpar_thread_t
*
p_vpar
,
int
*
pi_mb_address
,
int
i_mb_base
,
elem_t
*
p_y
,
p_u
,
p_v
,
u32
i_vert_code
)
u32
i_vert_code
);
static
void
SliceHeader01
(
vpar_thread_t
*
p_vpar
,
int
*
pi_mb_address
,
int
i_mb_base
,
elem_t
*
p_y
,
p_u
,
p_v
,
u32
i_vert_code
)
u32
i_vert_code
);
static
void
SliceHeader10
(
vpar_thread_t
*
p_vpar
,
int
*
pi_mb_address
,
int
i_mb_base
,
elem_t
*
p_y
,
p_u
,
p_v
,
u32
i_vert_code
)
u32
i_vert_code
);
static
void
SliceHeader11
(
vpar_thread_t
*
p_vpar
,
int
*
pi_mb_address
,
int
i_mb_base
,
elem_t
*
p_y
,
p_u
,
p_v
,
u32
i_vert_code
)
u32
i_vert_code
);
static
__inline__
void
SliceHeader
(
vpar_thread_t
*
p_vpar
,
int
*
pi_mb_address
,
int
i_mb_base
,
elem_t
*
p_y
,
p_u
,
p_v
,
u32
i_vert_code
)
static
void
ExtensionAndUserData
(
vpar_thread_t
*
p_vpar
)
u32
i_vert_code
);
static
void
ExtensionAndUserData
(
vpar_thread_t
*
p_vpar
);
static
void
QuantMatrixExtension
(
vpar_thread_t
*
p_vpar
);
static
void
SequenceScalableExtension
(
vpar_thread_t
*
p_vpar
);
static
void
SequenceDisplayExtension
(
vpar_thread_t
*
p_vpar
);
static
void
PictureDisplayExtension
(
vpar_thread_t
*
p_vpar
);
static
void
PictureSpatialScalableExtension
(
vpar_thread_t
*
p_vpar
);
static
void
PictureTemporalScalableExtension
(
vpar_thread_t
*
p_vpar
);
static
void
CopyrightExtension
(
vpar_thread_t
*
p_vpar
);
static
__inline__
void
LoadMatrix
(
vpar_thread_t
*
p_vpar
,
quant_matrix_t
*
p_matrix
);
static
__inline__
void
LinkMatrix
(
quant_matrix_t
*
p_matrix
,
int
*
pi_array
);
/*****************************************************************************
* vpar_NextSequenceHeader : Find the next sequence header
...
...
@@ -72,7 +85,7 @@ int vpar_NextSequenceHeader( vpar_thread_t * p_vpar )
while
(
!
p_vpar
->
b_die
)
{
NextStartCode
(
p_vpar
);
if
(
ShowBits
(
&
p_vpar
->
bit_stream
,
32
)
==
SEQUENCE_
START
_CODE
)
if
(
ShowBits
(
&
p_vpar
->
bit_stream
,
32
)
==
SEQUENCE_
HEADER
_CODE
)
return
0
;
}
return
1
;
...
...
@@ -158,20 +171,20 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
i_height_save
=
p_vpar
->
sequence
.
i_height
;
i_width_save
=
p_vpar
->
sequence
.
i_width
;
p_vpar
->
sequence
.
i_height
=
GetBits
(
p_vpar
->
bit_stream
,
12
);
p_vpar
->
sequence
.
i_width
=
GetBits
(
p_vpar
->
bit_stream
,
12
);
p_vpar
->
sequence
.
i_
ratio
=
GetBits
(
p_vpar
->
bit_stream
,
4
);
p_vpar
->
sequence
.
i_height
=
GetBits
(
&
p_vpar
->
bit_stream
,
12
);
p_vpar
->
sequence
.
i_width
=
GetBits
(
&
p_vpar
->
bit_stream
,
12
);
p_vpar
->
sequence
.
i_
aspect_ratio
=
GetBits
(
&
p_vpar
->
bit_stream
,
4
);
p_vpar
->
sequence
.
d_frame_rate
=
d_frame_rate_table
(
GetBits
(
p_vpar
->
bit_stream
,
4
)
)
;
d_frame_rate_table
[
GetBits
(
&
p_vpar
->
bit_stream
,
4
)
]
;
/* We don't need bit_rate_value, marker_bit, vbv_buffer_size,
* constrained_parameters_flag */
DumpBits
(
p_vpar
->
bit_stream
,
30
);
DumpBits
(
&
p_vpar
->
bit_stream
,
30
);
/*
* Quantization matrices
*/
if
(
GetBits
(
p_vpar
->
bit_stream
,
1
)
)
/* load_intra_quantizer_matrix */
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
/* load_intra_quantizer_matrix */
{
LoadMatrix
(
p_vpar
,
&
p_vpar
->
sequence
.
intra_quant
);
}
...
...
@@ -181,7 +194,7 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
LinkMatrix
(
&
p_vpar
->
sequence
.
intra_quant
,
pi_default_intra_quant
);
}
if
(
GetBits
(
p_vpar
->
bit_stream
,
1
)
)
/* load_non_intra_quantizer_matrix */
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
/* load_non_intra_quantizer_matrix */
{
LoadMatrix
(
p_vpar
,
&
p_vpar
->
sequence
.
nonintra_quant
);
}
...
...
@@ -204,9 +217,9 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
NextStartCode
(
p_vpar
);
if
(
ShowBits
(
&
p_vpar
->
bit_stream
,
32
)
==
EXTENSION_START_CODE
)
{
int
i_dummy
;
static
int
pi_chroma_nb_blocks
[
4
]
=
{
0
,
1
,
2
,
4
};
static
(
void
*
)
ppf_chroma_pattern
[
4
](
vpar_thread_t
*
)
=
int
i_dummy
;
static
int
pi_chroma_nb_blocks
[
4
]
=
{
0
,
1
,
2
,
4
};
static
f_chroma_pattern_t
ppf_chroma_pattern
[
4
]
=
{
NULL
,
vpar_CodedPattern420
,
vpar_CodedPattern422
,
vpar_CodedPattern444
};
...
...
@@ -239,7 +252,7 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
/* It's an MPEG-1 stream. Put adequate parameters. */
p_vpar
->
sequence
.
b_progressive
=
1
;
p_vpar
->
sequence
.
i_chroma_format
=
CHROMA_420
;
p_vpar
->
sequence
.
i_chroma_width
=
p_vpar
->
sequence
.
i
->
width
>>
2
;
p_vpar
->
sequence
.
i_chroma_width
=
p_vpar
->
sequence
.
i
_
width
>>
2
;
p_vpar
->
sequence
.
i_chroma_nb_blocks
=
2
;
p_vpar
->
sequence
.
pf_decode_pattern
=
vpar_CodedPattern420
;
...
...
@@ -282,10 +295,9 @@ static void SequenceHeader( vpar_thread_t * p_vpar )
}
if
(
p_vpar
->
sequence
.
i_width
!=
i_width_save
||
p_vpar
->
sequence
.
i_height
!=
i_height_save
||
p_vpar
->
sequence
.
p_frame_lum_lookup
==
NULL
)
||
p_vpar
->
sequence
.
i_height
!=
i_height_save
)
{
/* What do we do in case of a size change ??? */
}
/* Extension and User data */
...
...
@@ -307,7 +319,8 @@ static void GroupHeader( vpar_thread_t * p_vpar )
*****************************************************************************/
static
void
PictureHeader
(
vpar_thread_t
*
p_vpar
)
{
static
(
int
*
)
ppf_macroblock_type
[
4
]
=
{
vpar_IMBType
,
vpar_PMBType
,
static
f_macroblock_type_t
ppf_macroblock_type
[
4
]
=
{
vpar_IMBType
,
vpar_PMBType
,
vpar_BMBType
,
vpar_DMBType
};
int
i_structure
;
...
...
@@ -358,7 +371,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
p_vpar
->
picture
.
b_q_scale_type
=
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_repeat_first_field
=
GetBits
(
&
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
* the length of the picture_display_extension structure.
* chroma_420_type (obsolete) */
...
...
@@ -376,15 +389,15 @@ static void PictureHeader( vpar_thread_t * p_vpar )
else
{
/* MPEG-1 compatibility flags */
p_vpar
->
i_intra_dc_precision
=
0
;
/* 8 bits */
p_vpar
->
picture
.
i_intra_dc_precision
=
0
;
/* 8 bits */
i_structure
=
FRAME_STRUCTURE
;
p_vpar
->
b_frame_pred_frame_dct
=
TRUE
;
p_vpar
->
picture
.
b_frame_pred_frame_dct
=
1
;
p_vpar
->
picture
.
b_concealment_mv
=
0
;
p_vpar
->
picture
.
b_q_scale_type
=
0
;
p_vpar
->
picture
.
b_intra_vlc_format
=
0
;
p_vpar
->
picture
.
b_alternate_scan
=
0
;
/* zigzag */
b_repeat_first_field
=
FALSE
;
p_vpar
->
picture
.
b_progressive_frame
=
TRUE
;
p_vpar
->
picture
.
b_repeat_first_field
=
0
;
p_vpar
->
picture
.
b_progressive_frame
=
1
;
}
if
(
p_vpar
->
picture
.
i_current_structure
&&
...
...
@@ -392,10 +405,10 @@ static void PictureHeader( vpar_thread_t * p_vpar )
i_structure
==
p_vpar
->
picture
.
i_current_structure
)
)
{
/* We don't have the second field of the buffered frame. */
if
(
p_
pv
ar
->
picture
.
p_picture
!=
NULL
)
if
(
p_
vp
ar
->
picture
.
p_picture
!=
NULL
)
{
ReferenceReplace
(
p_vpar
,
p_vpar
->
picture
.
p_second_field_buffer
->
i_coding_type
,
p_vpar
->
picture
.
i_coding_type
,
NULL
);
for
(
i_mb
=
0
;
i_mb
<
p_vpar
->
sequence
.
i_mb_size
>>
1
;
i_mb
++
)
...
...
@@ -406,7 +419,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
vout_DestroyPicture
(
p_vpar
->
p_vout
,
p_vpar
->
picture
.
p_picture
);
}
p_
pv
ar
->
picture
.
i_current_structure
=
0
;
p_
vp
ar
->
picture
.
i_current_structure
=
0
;
intf_DbgMsg
(
"vpar debug: odd number of field picture."
);
}
...
...
@@ -415,28 +428,32 @@ static void PictureHeader( vpar_thread_t * p_vpar )
{
/* Second field of a frame. We will decode it if, and only if we
* have decoded the first frame. */
b_parsable
=
(
p_vpar
->
picture
.
p_
second_field_buffer
!=
NULL
);
b_parsable
=
(
p_vpar
->
picture
.
p_
picture
!=
NULL
);
}
else
{
/* Do we have the reference pictures ? */
b_parsable
=
!
((
i_coding_type
==
P_CODING_TYPE
)
&&
b_parsable
=
!
((
p_vpar
->
picture
.
i_coding_type
==
P_CODING_TYPE
)
&&
(
p_vpar
->
sequence
.
p_forward
==
NULL
))
||
((
i_coding_type
==
B_CODING_TYPE
)
&&
((
p_vpar
->
picture
.
i_coding_type
==
B_CODING_TYPE
)
&&
(
p_vpar
->
sequence
.
p_forward
==
NULL
||
p_vpar
->
sequence
.
p_backward
==
NULL
));
/* Does synchro say we have enough time to decode it ? */
b_parsable
&&=
vpar_SynchroChoose
(
p_vpar
,
i_coding_type
,
i_structure
);
if
(
b_parsable
)
{
/* Does synchro say we have enough time to decode it ? */
b_parsable
=
vpar_SynchroChoose
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
i_structure
);
}
}
if
(
!
b_parsable
)
{
/* Update the reference pointers. */
ReferenceUpdate
(
p_vpar
,
i_coding_type
,
NULL
);
ReferenceUpdate
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
NULL
);
/* Warn Synchro we have trashed a picture. */
vpar_SynchroTrash
(
p_vpar
,
i_coding_type
,
i_structure
);
vpar_SynchroTrash
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
i_structure
);
/* Update context. */
if
(
i_structure
!=
FRAME_STRUCTURE
)
...
...
@@ -448,7 +465,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
/* OK, now we are sure we will decode the picture. */
#define P_picture p_vpar->picture.p_picture
p_vpar
->
picture
.
b_error
=
FALSE
;
p_vpar
->
picture
.
b_error
=
0
;
if
(
!
p_vpar
->
picture
.
i_current_structure
)
{
...
...
@@ -460,7 +477,8 @@ static void PictureHeader( vpar_thread_t * p_vpar )
p_vpar
->
sequence
.
i_chroma_format
);
/* Initialize values. */
P_picture
->
date
=
vpar_SynchroDecode
(
p_vpar
,
i_coding_type
,
P_picture
->
date
=
vpar_SynchroDecode
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
i_structure
);
p_vpar
->
picture
.
i_lum_incr
=
-
8
+
(
p_vpar
->
sequence
.
i_width
<<
(
i_structure
!=
FRAME_STRUCTURE
)
);
...
...
@@ -469,7 +487,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
(
3
-
p_vpar
->
sequence
.
i_chroma_format
))
);
/* Update the reference pointers. */
ReferenceUpdate
(
p_vpar
,
i_coding_type
,
p
_picture
);
ReferenceUpdate
(
p_vpar
,
p_vpar
->
picture
.
i_coding_type
,
P
_picture
);
}
p_vpar
->
picture
.
i_current_structure
|=
i_structure
;
p_vpar
->
picture
.
i_structure
=
i_structure
;
...
...
@@ -499,7 +517,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
(
i_dummy
>
SLICE_START_CODE_MAX
)
)
{
intf_DbgMsg
(
"vpar debug: premature end of picture"
);
p_vpar
->
picture
.
b_error
=
TRUE
;
p_vpar
->
picture
.
b_error
=
1
;
break
;
}
DumpBits32
(
&
p_vpar
->
bit_stream
);
...
...
@@ -520,7 +538,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
vout_DestroyPicture
(
p_vpar
->
p_vout
,
P_picture
);
/* Prepare context for the next picture. */
P_picture
=
NULL
:
P_picture
=
NULL
;
}
else
if
(
p_vpar
->
picture
.
i_current_structure
==
FRAME_STRUCTURE
)
{
...
...
@@ -640,8 +658,8 @@ static __inline__ void SliceHeader( vpar_thread_t * p_vpar,
/* Reset DC coefficients predictors (ISO/IEC 13818-2 7.2.1). Why
* does the reference decoder put 0 instead of the normative values ? */
p_vpar
->
slice
.
pi_dc
t_pred
[
0
]
=
p_vpar
->
slice
.
pi
_dct_pred
[
1
]
=
p_vpar
->
slice
.
pi_dct_pred
[
2
]
p_vpar
->
slice
.
pi_dc
_dct_pred
[
0
]
=
p_vpar
->
slice
.
pi_dc
_dct_pred
[
1
]
=
p_vpar
->
slice
.
pi_dc
_dc
t_pred
[
2
]
=
pi_dc_dct_reinit
[
p_vpar
->
picture
.
i_intra_dc_precision
];
/* Reset motion vector predictors (ISO/IEC 13818-2 7.6.3.4). */
...
...
@@ -747,7 +765,7 @@ static void QuantMatrixExtension( vpar_thread_t * p_vpar )
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
/* Load non_intra_quantiser_matrix for luminance. */
LoadMatrix
(
p_vpar
,
&
p_vpar
->
sequence
.
non
_
intra_quant
);
LoadMatrix
(
p_vpar
,
&
p_vpar
->
sequence
.
nonintra_quant
);
}
else
{
...
...
@@ -764,7 +782,7 @@ static void QuantMatrixExtension( vpar_thread_t * p_vpar )
{
/* Link the chrominance intra matrix to the luminance one. */
LinkMatrix
(
&
p_vpar
->
sequence
.
chroma_intra_quant
,
&
p_vpar
->
sequence
.
intra_quant
);
p_vpar
->
sequence
.
intra_quant
.
pi_matrix
);
}
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
...
...
@@ -775,7 +793,7 @@ static void QuantMatrixExtension( vpar_thread_t * p_vpar )
{
/* Link the chrominance intra matrix to the luminance one. */
LinkMatrix
(
&
p_vpar
->
sequence
.
chroma_intra_quant
,
&
p_vpar
->
sequence
.
intra_quant
);
p_vpar
->
sequence
.
intra_quant
.
pi_matrix
);
}
if
(
GetBits
(
&
p_vpar
->
bit_stream
,
1
)
)
{
...
...
@@ -786,7 +804,7 @@ static void QuantMatrixExtension( vpar_thread_t * p_vpar )
{
/* Link the chrominance nonintra matrix to the luminance one. */
LinkMatrix
(
&
p_vpar
->
sequence
.
chroma_nonintra_quant
,
&
p_vpar
->
sequence
.
nonintra_quant
);
p_vpar
->
sequence
.
nonintra_quant
.
pi_matrix
);
}
}
...
...
@@ -860,7 +878,7 @@ static void PictureTemporalScalableExtension( vpar_thread_t * p_vpar )
* CopyrightExtension : Keeps some legal informations *
*****************************************************************************/
static
void
Copy
t
rightExtension
(
vpar_thread_t
*
p_vpar
)
static
void
CopyrightExtension
(
vpar_thread_t
*
p_vpar
)
{
u32
i_copyright_nb_1
,
i_copyright_nb_2
;
/* local integers */
p_vpar
->
sequence
.
b_copyright_flag
=
GetBits
(
&
p_vpar
->
bit_stream
,
1
);
...
...
@@ -878,16 +896,16 @@ static void CopytrightExtension( vpar_thread_t * p_vpar )
i_copyright_nb_2
=
GetBits
(
&
p_vpar
->
bit_stream
,
22
);
DumpBits
(
&
p_vpar
->
bit_stream
,
1
);
/* third part and sum */
p_vpar
->
sequence
.
i_copyright_nb
=
(
i_copyright_nb_1
<<
44
)
+
(
i_copyright_nb_2
<<
22
)
+
(
GetBits
(
&
p_vpar
->
bit_stream
,
22
)
);
p_vpar
->
sequence
.
i_copyright_nb
=
(
(
u64
)
i_copyright_nb_1
<<
44
)
+
(
(
u64
)
i_copyright_nb_2
<<
22
)
+
(
(
u64
)
GetBits
(
&
p_vpar
->
bit_stream
,
22
)
);
}
/*****************************************************************************
* LoadMatrix : Load a quantization matrix
*****************************************************************************/
static
void
LoadMatrix
(
vpar_thread_t
*
p_vpar
,
quant_matrix_t
*
p_matrix
)
static
__inline__
void
LoadMatrix
(
vpar_thread_t
*
p_vpar
,
quant_matrix_t
*
p_matrix
)
{
int
i_dummy
;
...
...
@@ -895,13 +913,13 @@ static void LoadMatrix( vpar_thread_t * p_vpar, quant_matrix_t * p_matrix )
{
/* Allocate a piece of memory to load the matrix. */
p_matrix
->
pi_matrix
=
(
int
*
)
malloc
(
64
*
sizeof
(
int
)
);
p_matrix
->
b_allocated
=
TRUE
;
p_matrix
->
b_allocated
=
1
;
}
for
(
i_dummy
=
0
;
i_dummy
<
64
;
i_dummy
++
)
{
p_matrix
->
pi_matrix
[
pi_scan
[
SCAN_ZIGZAG
][
i_dummy
]]
=
GetBits
(
p_vpar
->
bit_stream
,
8
);
=
GetBits
(
&
p_vpar
->
bit_stream
,
8
);
}
#ifdef FOURIER_IDCT
...
...
@@ -914,7 +932,7 @@ static void LoadMatrix( vpar_thread_t * p_vpar, quant_matrix_t * p_matrix )
/*****************************************************************************
* LinkMatrix : Link a quantization matrix to another
*****************************************************************************/
static
void
LinkMatrix
(
quant_matrix_t
*
p_matrix
,
int
*
pi_array
)
static
__inline__
void
LinkMatrix
(
quant_matrix_t
*
p_matrix
,
int
*
pi_array
)
{
int
i_dummy
;
...
...
@@ -922,7 +940,7 @@ static void LinkMatrix( quant_matrix_t * p_matrix, int * pi_array )
{
/* Deallocate the piece of memory. */
free
(
p_matrix
->
pi_matrix
);
p_matrix
->
b_allocated
=
FALSE
;
p_matrix
->
b_allocated
=
0
;
}
p_matrix
->
pi_matrix
=
pi_array
;
...
...
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