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
8c3538f4
Commit
8c3538f4
authored
May 07, 2009
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cosmetics.
parent
331625d9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
56 additions
and
59 deletions
+56
-59
modules/packetizer/dirac.c
modules/packetizer/dirac.c
+56
-59
No files found.
modules/packetizer/dirac.c
View file @
8c3538f4
...
...
@@ -222,11 +222,11 @@ typedef struct {
static
dirac_block_encap_t
*
dirac_RemoveBlockEncap
(
block_t
*
p_block
)
{
fake_block_t
*
p_fake
=
(
fake_block_t
*
)
p_block
;
dirac_block_encap_t
*
dbe
=
p_fake
->
p_priv
;
if
(
!
dbe
)
return
NULL
;
dirac_block_encap_t
*
p_
dbe
=
p_fake
->
p_priv
;
if
(
!
p_
dbe
)
return
NULL
;
p_fake
->
p_priv
=
NULL
;
dbe
->
pf_blk_release
=
NULL
;
return
dbe
;
p_
dbe
->
pf_blk_release
=
NULL
;
return
p_
dbe
;
}
static
void
dirac_ReleaseBlockAndEncap
(
block_t
*
p_block
)
...
...
@@ -252,9 +252,9 @@ static void dirac_AddBlockEncap( block_t **pp_block, dirac_block_encap_t *p_dbe
static
dirac_block_encap_t
*
dirac_NewBlockEncap
(
block_t
**
pp_block
)
{
dirac_block_encap_t
*
dbe
=
calloc
(
1
,
sizeof
(
*
dbe
)
);
if
(
dbe
)
dirac_AddBlockEncap
(
pp_block
,
dbe
);
return
dbe
;
dirac_block_encap_t
*
p_dbe
=
calloc
(
1
,
sizeof
(
*
p_
dbe
)
);
if
(
p_dbe
)
dirac_AddBlockEncap
(
pp_block
,
p_
dbe
);
return
p_
dbe
;
}
static
dirac_block_encap_t
*
dirac_GetBlockEncap
(
block_t
*
p_block
)
...
...
@@ -275,19 +275,19 @@ static int block_ChainToArray( block_t *p_block, block_t ***ppp_array)
if
(
!
ppp_array
)
return
0
;
int
num_blocks
;
block_ChainProperties
(
p_block
,
&
num_blocks
,
NULL
,
NULL
);
int
i_
num_blocks
;
block_ChainProperties
(
p_block
,
&
i_
num_blocks
,
NULL
,
NULL
);
*
ppp_array
=
malloc
(
sizeof
(
block_t
*
)
*
num_blocks
);
*
ppp_array
=
calloc
(
i_num_blocks
,
sizeof
(
block_t
*
)
);
if
(
!
ppp_array
)
return
0
;
for
(
int
i
=
0
;
i
<
num_blocks
;
i
++
)
for
(
int
i
=
0
;
i
<
i_
num_blocks
;
i
++
)
{
(
*
ppp_array
)[
i
]
=
p_block
;
p_block
=
p_block
->
p_next
;
}
return
num_blocks
;
return
i_
num_blocks
;
}
/**
...
...
@@ -397,9 +397,8 @@ static void dirac_ReorderInit( struct dirac_reorder_buffer *p_rb )
p_rb
->
p_empty
=
p_rb
->
p_entries
;
p_rb
->
p_entries
[
31
].
p_next
=
NULL
;
for
(
int
i
=
0
;
i
<
31
;
i
++
)
{
for
(
int
i
=
0
;
i
<
31
;
i
++
)
p_rb
->
p_entries
[
i
].
p_next
=
&
p_rb
->
p_entries
[
i
+
1
];
}
}
/* simulate the dirac picture reorder buffer */
...
...
@@ -487,15 +486,14 @@ static bool dirac_UnpackParseInfo( parse_info_t *p_pi, block_bytestream_t *p_bs,
static
uint32_t
dirac_uint
(
bs_t
*
p_bs
)
{
uint32_t
count
=
0
,
value
=
0
;
while
(
!
bs_eof
(
p_bs
)
&&
!
bs_read
(
p_bs
,
1
)
)
{
count
++
;
value
<<=
1
;
value
|=
bs_read
(
p_bs
,
1
);
}
return
(
1
<<
count
)
-
1
+
value
;
uint32_t
u_count
=
0
,
u_value
=
0
;
while
(
!
bs_eof
(
p_bs
)
&&
!
bs_read
(
p_bs
,
1
)
)
{
u_count
++
;
u_value
<<=
1
;
u_value
|=
bs_read
(
p_bs
,
1
);
}
return
(
1
<<
u_count
)
-
1
+
u_value
;
}
static
int
dirac_bool
(
bs_t
*
p_bs
)
...
...
@@ -647,11 +645,11 @@ static bool dirac_UnpackSeqHdr( struct seq_hdr_t *p_sh, block_t *p_block )
static
block_t
*
dirac_EmitEOS
(
decoder_t
*
p_dec
,
uint32_t
i_prev_parse_offset
)
{
const
uint8_t
eos
[]
=
{
'B'
,
'B'
,
'C'
,
'D'
,
0x10
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
0
};
const
uint8_t
p_
eos
[]
=
{
'B'
,
'B'
,
'C'
,
'D'
,
0x10
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
0
};
block_t
*
p_block
=
block_New
(
p_dec
,
13
);
if
(
!
p_block
)
return
NULL
;
memcpy
(
p_block
->
p_buffer
,
eos
,
13
);
memcpy
(
p_block
->
p_buffer
,
p_
eos
,
13
);
SetDWBE
(
p_block
->
p_buffer
+
9
,
i_prev_parse_offset
);
...
...
@@ -675,7 +673,8 @@ static block_t *dirac_DoSync( decoder_t *p_dec )
do
{
switch
(
p_sys
->
i_state
)
{
case
NOT_SYNCED
:
{
case
NOT_SYNCED
:
{
if
(
VLC_SUCCESS
!=
block_FindStartcodeFromOffset
(
&
p_sys
->
bytestream
,
&
p_sys
->
i_offset
,
p_parsecode
,
4
)
)
{
...
...
@@ -734,18 +733,18 @@ static block_t *dirac_DoSync( decoder_t *p_dec )
/* attempt to syncronise backwards from pu.u_next_offset */
p_sys
->
i_offset
=
pu
.
u_next_offset
;
/* fall through */
case
TRY_SYNC
:
{
/* -> SYNCED | NOT_SYNCED */
if
(
!
p_sys
->
i_offset
)
{
case
TRY_SYNC
:
/* -> SYNCED | NOT_SYNCED */
{
if
(
!
p_sys
->
i_offset
)
goto
sync_fail
;
/* if a is at start of bytestream, b can't be in buffer */
}
parse_info_t
pu_a
;
bool
a
=
dirac_UnpackParseInfo
(
&
pu_a
,
&
p_sys
->
bytestream
,
p_sys
->
i_offset
);
if
(
!
a
||
(
pu_a
.
u_prev_offset
>
p_sys
->
i_offset
)
)
{
if
(
!
a
||
(
pu_a
.
u_prev_offset
>
p_sys
->
i_offset
)
)
goto
sync_fail
;
/* b lies beyond start of bytestream: can't sync */
}
if
(
!
pu_a
.
u_prev_offset
)
{
if
(
!
pu_a
.
u_prev_offset
)
{
if
(
p_sys
->
i_state
==
TRY_SYNC
)
{
goto
sync_fail
;
/* can't find different pu_b from pu_a */
...
...
@@ -758,7 +757,8 @@ static block_t *dirac_DoSync( decoder_t *p_dec )
parse_info_t
*
pu_b
=
&
pu
;
bool
b
=
dirac_UnpackParseInfo
(
pu_b
,
&
p_sys
->
bytestream
,
p_sys
->
i_offset
-
pu_a
.
u_prev_offset
);
if
(
!
b
||
(
pu_b
->
u_next_offset
&&
pu_a
.
u_prev_offset
!=
pu_b
->
u_next_offset
)
)
{
if
(
!
b
||
(
pu_b
->
u_next_offset
&&
pu_a
.
u_prev_offset
!=
pu_b
->
u_next_offset
)
)
{
/* if pu_b->u_next_offset = 0, have to assume we've synced, ie,
* just rely on finding a valid pu_b from pu_a. */
goto
sync_fail
;
...
...
@@ -806,8 +806,8 @@ sync_fail:
block_GetBytes
(
&
p_sys
->
bytestream
,
p_block
->
p_buffer
,
p_block
->
i_buffer
);
/* save parse offset in private area for later use */
dirac_block_encap_t
*
dbe
=
dirac_NewBlockEncap
(
&
p_block
);
if
(
dbe
)
dbe
->
u_last_next_offset
=
pu
.
u_next_offset
;
dirac_block_encap_t
*
p_
dbe
=
dirac_NewBlockEncap
(
&
p_block
);
if
(
p_dbe
)
p_
dbe
->
u_last_next_offset
=
pu
.
u_next_offset
;
return
p_block
;
}
...
...
@@ -874,12 +874,12 @@ static int dirac_InspectDataUnit( decoder_t *p_dec, block_t **pp_block, block_t
* random access point flags are not set */
p_eu
->
i_flags
&=
~
BLOCK_FLAG_TYPE_I
;
}
dirac_block_encap_t
*
dbe
=
dirac_GetBlockEncap
(
p_block
);
if
(
dbe
&&
p_block
->
i_buffer
>
13
+
4
)
dirac_block_encap_t
*
p_
dbe
=
dirac_GetBlockEncap
(
p_block
);
if
(
p_
dbe
&&
p_block
->
i_buffer
>
13
+
4
)
{
/* record the picture number to save the time gen functions
* from having to inspect the data for it */
dbe
->
u_picture_number
=
GetDWBE
(
p_block
->
p_buffer
+
13
);
p_
dbe
->
u_picture_number
=
GetDWBE
(
p_block
->
p_buffer
+
13
);
}
return
DIRAC_DU_ENDS_EU
;
}
...
...
@@ -906,8 +906,8 @@ static int dirac_InspectDataUnit( decoder_t *p_dec, block_t **pp_block, block_t
,
p_sys
->
seq_hdr
.
u_fps_num
,
p_sys
->
seq_hdr
.
u_fps_den
,
0
);
/* when field coding, dts needs to be incremented in terms of field periods */
int
u_pics_per_sec
=
p_sys
->
seq_hdr
.
u_fps_num
;
if
(
p_sys
->
seq_hdr
.
u_picture_coding_mode
==
DIRAC_FIELD_CODING
)
unsigned
u_pics_per_sec
=
p_sys
->
seq_hdr
.
u_fps_num
;
if
(
p_sys
->
seq_hdr
.
u_picture_coding_mode
==
DIRAC_FIELD_CODING
)
{
u_pics_per_sec
*=
2
;
}
...
...
@@ -988,14 +988,14 @@ static block_t *dirac_BuildEncapsulationUnit( decoder_t *p_dec, block_t *p_block
block_ChainLastAppend
(
&
p_sys
->
pp_eu_last
,
p_block
);
dirac_block_encap_t
*
dbe
=
dirac_GetBlockEncap
(
p_block
);
dirac_block_encap_t
*
p_
dbe
=
dirac_GetBlockEncap
(
p_block
);
#ifdef SANITIZE_PREV_PARSE_OFFSET
/* fixup prev_parse_offset to point to the last data unit
* to arrive */
if
(
dbe
)
if
(
p_
dbe
)
{
SetDWBE
(
p_block
->
p_buffer
+
9
,
p_sys
->
u_eu_last_npo
);
p_sys
->
u_eu_last_npo
=
dbe
->
u_last_next_offset
;
p_sys
->
u_eu_last_npo
=
p_
dbe
->
u_last_next_offset
;
}
#endif
...
...
@@ -1008,7 +1008,7 @@ static block_t *dirac_BuildEncapsulationUnit( decoder_t *p_dec, block_t *p_block
/* gather up encapsulation unit, reassociating the final
* private state with the gathered block */
block_t
*
p_eu_last
=
(
block_t
*
)
p_sys
->
pp_eu_last
-
offsetof
(
block_t
,
p_next
);
dbe
=
dirac_RemoveBlockEncap
(
p_eu_last
);
p_
dbe
=
dirac_RemoveBlockEncap
(
p_eu_last
);
uint8_t
u_parse_code
=
p_block
->
p_buffer
[
4
];
...
...
@@ -1017,9 +1017,9 @@ static block_t *dirac_BuildEncapsulationUnit( decoder_t *p_dec, block_t *p_block
assert
(
p_block
);
/* block_ChainGather doesn't define when it frees chain */
p_block
->
i_flags
|=
DIRAC_NON_DATED
;
if
(
dbe
)
if
(
p_
dbe
)
{
dirac_AddBlockEncap
(
&
p_block
,
dbe
);
dirac_AddBlockEncap
(
&
p_block
,
p_
dbe
);
if
(
dirac_isPicture
(
u_parse_code
)
)
p_block
->
i_flags
&=
~
DIRAC_NON_DATED
;
}
p_sys
->
p_eu
=
NULL
;
...
...
@@ -1040,7 +1040,7 @@ static block_t *dirac_BuildEncapsulationUnit( decoder_t *p_dec, block_t *p_block
static
int
dirac_TimeGenPush
(
decoder_t
*
p_dec
,
block_t
*
p_block_in
)
{
decoder_sys_t
*
p_sys
=
p_dec
->
p_sys
;
dirac_block_encap_t
*
dbe
;
dirac_block_encap_t
*
p_
dbe
;
if
(
p_block_in
->
i_flags
&
BLOCK_FLAG_END_OF_SEQUENCE
)
{
...
...
@@ -1056,8 +1056,8 @@ static int dirac_TimeGenPush( decoder_t *p_dec, block_t *p_block_in )
return
0
;
}
dbe
=
dirac_GetBlockEncap
(
p_block_in
);
uint32_t
u_picnum
=
dbe
?
dbe
->
u_picture_number
:
0
;
p_
dbe
=
dirac_GetBlockEncap
(
p_block_in
);
uint32_t
u_picnum
=
p_dbe
?
p_
dbe
->
u_picture_number
:
0
;
/*
* Simple DTS regeneration:
* - DTS values linearly increase in stream order.
...
...
@@ -1152,8 +1152,8 @@ static int dirac_TimeGenPush( decoder_t *p_dec, block_t *p_block_in )
* the first packet is output -- interpolate the past and freewheel for
* the future */
dbe
=
dirac_GetBlockEncap
(
p_block
);
u_picnum
=
dbe
?
dbe
->
u_picture_number
:
0
;
p_
dbe
=
dirac_GetBlockEncap
(
p_block
);
u_picnum
=
p_dbe
?
p_
dbe
->
u_picture_number
:
0
;
if
(
p_sys
->
b_tg_last_picnum
)
{
if
(
dirac_PictureNbeforeM
(
u_picnum
,
p_sys
->
u_tg_last_picnum
)
)
...
...
@@ -1165,8 +1165,8 @@ static int dirac_TimeGenPush( decoder_t *p_dec, block_t *p_block_in )
* a discontinuity, some pictures will get stuck in the RoB.
* flush the RoB. */
/* this could be a bit less indiscriminate */
dbe
=
dirac_GetBlockEncap
(
p_sys
->
p_outqueue
);
uint32_t
u_prev_parse_offset
=
dbe
?
dbe
->
u_last_next_offset
:
0
;
p_
dbe
=
dirac_GetBlockEncap
(
p_sys
->
p_outqueue
);
uint32_t
u_prev_parse_offset
=
p_dbe
?
p_
dbe
->
u_last_next_offset
:
0
;
block_ChainRelease
(
p_sys
->
p_outqueue
);
p_sys
->
p_outqueue
=
dirac_EmitEOS
(
p_dec
,
u_prev_parse_offset
);
if
(
p_sys
->
p_outqueue
)
...
...
@@ -1319,12 +1319,9 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
* the output queue would grow bounded by the stream length.
* If there are 10 data units in the output queue, assume this
* has happened and purge all blocks that fail extraction criteria */
unsigned
count
=
0
;
for
(
p_block
=
p_sys
->
p_outqueue
;
p_block
;
p_block
=
p_block
->
p_next
)
{
count
++
;
}
if
(
count
>
9
)
int
i_count
;
block_ChainProperties
(
p_sys
->
p_outqueue
,
&
i_count
,
NULL
,
NULL
);
if
(
i_count
>
9
)
{
p_block
=
p_sys
->
p_outqueue
;
while
(
p_block
)
...
...
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