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
85b124f0
Commit
85b124f0
authored
Oct 17, 2007
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added cc data extraction support for mpeg 1/2 when the mpeg packetizer
is used. (Only dvb/atsc CC support is working)
parent
f75f9b5b
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
56 additions
and
0 deletions
+56
-0
modules/packetizer/mpegvideo.c
modules/packetizer/mpegvideo.c
+56
-0
No files found.
modules/packetizer/mpegvideo.c
View file @
85b124f0
...
...
@@ -46,6 +46,7 @@
#include <vlc_block.h>
#include <vlc_codec.h>
#include <vlc_block_helper.h>
#include "../codec/cc.h"
#define SYNC_INTRAFRAME_TEXT N_("Sync on Intra Frame")
#define SYNC_INTRAFRAME_LONGTEXT N_("Normally the packetizer would " \
...
...
@@ -74,6 +75,7 @@ vlc_module_end();
*****************************************************************************/
static
block_t
*
Packetize
(
decoder_t
*
,
block_t
**
);
static
block_t
*
ParseMPEGBlock
(
decoder_t
*
,
block_t
*
);
static
block_t
*
GetCc
(
decoder_t
*
p_dec
,
vlc_bool_t
pb_present
[
4
]
);
struct
decoder_sys_t
{
...
...
@@ -123,6 +125,12 @@ struct decoder_sys_t
/* Sync behaviour */
vlc_bool_t
b_sync_on_intra_frame
;
vlc_bool_t
b_discontinuity
;
/* */
vlc_bool_t
b_cc_reset
;
uint32_t
i_cc_flags
;
mtime_t
i_cc_pts
;
cc_data_t
cc
;
};
enum
{
...
...
@@ -147,6 +155,7 @@ static int Open( vlc_object_t *p_this )
es_format_Init
(
&
p_dec
->
fmt_out
,
VIDEO_ES
,
VLC_FOURCC
(
'm'
,
'p'
,
'g'
,
'v'
)
);
p_dec
->
pf_packetize
=
Packetize
;
p_dec
->
pf_get_cc
=
GetCc
;
p_dec
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
decoder_sys_t
)
);
...
...
@@ -189,6 +198,11 @@ static int Open( vlc_object_t *p_this )
if
(
p_sys
->
b_sync_on_intra_frame
)
msg_Dbg
(
p_dec
,
"syncing on intra frame now"
);
p_sys
->
b_cc_reset
=
VLC_FALSE
;
p_sys
->
i_cc_pts
=
0
;
p_sys
->
i_cc_flags
=
0
;
cc_Init
(
&
p_sys
->
cc
);
return
VLC_SUCCESS
;
}
...
...
@@ -367,6 +381,33 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
}
}
/*****************************************************************************
* GetCc:
*****************************************************************************/
static
block_t
*
GetCc
(
decoder_t
*
p_dec
,
vlc_bool_t
pb_present
[
4
]
)
{
decoder_sys_t
*
p_sys
=
p_dec
->
p_sys
;
block_t
*
p_cc
;
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
pb_present
[
i
]
=
p_sys
->
cc
.
pb_present
[
i
];
if
(
p_sys
->
cc
.
i_data
<=
0
)
return
NULL
;
p_cc
=
block_New
(
p_dec
,
p_sys
->
cc
.
i_data
);
if
(
p_cc
)
{
memcpy
(
p_cc
->
p_buffer
,
p_sys
->
cc
.
p_data
,
p_sys
->
cc
.
i_data
);
p_cc
->
i_dts
=
p_cc
->
i_pts
=
p_sys
->
i_cc_pts
;
p_cc
->
i_flags
=
p_sys
->
i_cc_flags
&
(
BLOCK_FLAG_TYPE_I
|
BLOCK_FLAG_TYPE_P
|
BLOCK_FLAG_TYPE_B
);
}
cc_Flush
(
&
p_sys
->
cc
);
return
p_cc
;
}
/*****************************************************************************
* ParseMPEGBlock: Re-assemble fragments into a block containing a picture
*****************************************************************************/
...
...
@@ -498,6 +539,17 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
{
p_sys
->
b_second_field
=
0
;
}
/* CC */
p_sys
->
b_cc_reset
=
VLC_TRUE
;
p_sys
->
i_cc_pts
=
p_pic
->
i_pts
;
p_sys
->
i_cc_flags
=
p_pic
->
i_flags
;
}
if
(
!
p_pic
&&
p_sys
->
b_cc_reset
)
{
p_sys
->
b_cc_reset
=
VLC_FALSE
;
cc_Flush
(
&
p_sys
->
cc
);
}
/*
...
...
@@ -618,6 +670,10 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
p_sys
->
i_progressive_frame
=
p_frag
->
p_buffer
[
8
]
>>
7
;
}
}
else
if
(
p_frag
->
p_buffer
[
3
]
==
0xb2
&&
p_frag
->
i_buffer
>
4
)
{
cc_Extract
(
&
p_sys
->
cc
,
&
p_frag
->
p_buffer
[
4
],
p_frag
->
i_buffer
-
4
);
}
else
if
(
p_frag
->
p_buffer
[
3
]
==
0x00
)
{
/* Picture start code */
...
...
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