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
c490aa52
Commit
c490aa52
authored
Oct 06, 2005
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* mp4: support for tx3g subtitle (close #332)
parent
e76d87b9
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
101 additions
and
30 deletions
+101
-30
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.c
+65
-19
modules/demux/mp4/libmp4.h
modules/demux/mp4/libmp4.h
+34
-11
modules/demux/mp4/mp4.c
modules/demux/mp4/mp4.c
+2
-0
No files found.
modules/demux/mp4/libmp4.c
View file @
c490aa52
...
...
@@ -1280,46 +1280,90 @@ static int MP4_ReadBox_sample_mp4s( stream_t *p_stream, MP4_Box_t *p_box )
static
int
MP4_ReadBox_sample_text
(
stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
unsigned
int
i
;
int32_t
t
;
MP4_READBOX_ENTER
(
MP4_Box_data_sample_text_t
);
for
(
i
=
0
;
i
<
6
;
i
++
)
{
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_reserved1
[
i
]
);
}
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved1
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved2
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_data_reference_index
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_text
->
i_display_flags
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_text
->
i_justification
);
MP4_GET4BYTES
(
t
);
switch
(
t
)
{
/* FIXME search right signification */
case
1
:
// Center
p_box
->
data
.
p_sample_text
->
i_justification_horizontal
=
1
;
p_box
->
data
.
p_sample_text
->
i_justification_vertical
=
1
;
break
;
case
-
1
:
// Flush Right
p_box
->
data
.
p_sample_text
->
i_justification_horizontal
=
-
1
;
p_box
->
data
.
p_sample_text
->
i_justification_vertical
=
-
1
;
break
;
case
-
2
:
// Flush Left
p_box
->
data
.
p_sample_text
->
i_justification_horizontal
=
0
;
p_box
->
data
.
p_sample_text
->
i_justification_vertical
=
0
;
break
;
case
0
:
// Flush Default
default:
p_box
->
data
.
p_sample_text
->
i_justification_horizontal
=
1
;
p_box
->
data
.
p_sample_text
->
i_justification_vertical
=
-
1
;
break
;
}
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
0
]
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
1
]
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
2
]
);
p_box
->
data
.
p_sample_text
->
i_background_color
[
3
]
=
0
;
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_top
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_left
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_bottom
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_right
);
#ifdef MP4_VERBOSE
msg_Dbg
(
p_stream
,
"read box:
\"
text
\"
in stsd text"
);
#endif
MP4_READBOX_EXIT
(
1
);
}
MP4_GET8BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box
);
MP4_GET8BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved2
);
static
int
MP4_ReadBox_sample_tx3g
(
stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
unsigned
int
i
;
int32_t
t
;
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_font_number
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_font_face
);
MP4_READBOX_ENTER
(
MP4_Box_data_sample_text_t
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved3
);
MP4_GET4BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved1
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_reserved2
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_
foreground_color
[
0
]
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_foreground_color
[
1
]
);
MP4_GET
2BYTES
(
p_box
->
data
.
p_sample_text
->
i_foreground_color
[
2
]
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_
data_reference_index
);
MP4_GET
4BYTES
(
p_box
->
data
.
p_sample_text
->
i_display_flags
);
MP4_GET1BYTE
(
i
);
p_box
->
data
.
p_sample_text
->
psz_text_name
=
malloc
(
i
+
1
);
memcpy
(
p_box
->
data
.
p_sample_text
->
psz_text_name
,
p_peek
,
i
);
p_box
->
data
.
p_sample_text
->
psz_text_name
[
i
]
=
'\0'
;
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_justification_horizontal
);
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_justification_vertical
);
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
0
]
);
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
1
]
);
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
2
]
);
MP4_GET1BYTE
(
p_box
->
data
.
p_sample_text
->
i_background_color
[
3
]
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_top
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_left
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_bottom
);
MP4_GET2BYTES
(
p_box
->
data
.
p_sample_text
->
i_text_box_right
);
#ifdef MP4_VERBOSE
msg_Dbg
(
p_stream
,
"read box:
\"
text
\"
in stsd text name=%s"
,
p_box
->
data
.
p_sample_text
->
psz_text_name
);
msg_Dbg
(
p_stream
,
"read box:
\"
text
\"
in stsd text"
);
#endif
MP4_READBOX_EXIT
(
1
);
}
#if 0
/* We can't easily call it, and anyway ~ 20 bytes lost isn't a real problem */
static void MP4_FreeBox_sample_text( MP4_Box_t *p_box )
...
...
@@ -2066,6 +2110,8 @@ static int MP4_ReadBox_default( stream_t *p_stream, MP4_Box_t *p_box )
return
MP4_ReadBox_sample_vide
(
p_stream
,
p_box
);
case
FOURCC_text
:
return
MP4_ReadBox_sample_text
(
p_stream
,
p_box
);
case
FOURCC_tx3g
:
return
MP4_ReadBox_sample_tx3g
(
p_stream
,
p_box
);
default:
msg_Warn
(
p_stream
,
"unknown handler type in stsd (uncompletetly loaded)"
);
...
...
modules/demux/mp4/libmp4.h
View file @
c490aa52
...
...
@@ -178,6 +178,7 @@
#define FOURCC_priv VLC_FOURCC( 'p', 'r', 'i', 'v' )
#define FOURCC_text VLC_FOURCC( 't', 'e', 'x', 't' )
#define FOURCC_tx3g VLC_FOURCC( 't', 'x', '3', 'g' )
#define FOURCC_subp VLC_FOURCC( 's', 'u', 'b', 'p' )
#define FOURCC_0xa9nam VLC_FOURCC( 0xa9, 'n', 'a', 'm' )
...
...
@@ -458,23 +459,45 @@ typedef struct MP4_Box_data_sample_vide_s
}
MP4_Box_data_sample_vide_t
;
#define MP4_TEXT_DISPLAY_FLAG_DONT_DISPLAY (1<<0)
#define MP4_TEXT_DISPLAY_FLAG_AUTO_SCALE (1<<1)
#define MP4_TEXT_DISPLAY_FLAG_CLIP_TO_TEXT_BOX (1<<2)
#define MP4_TEXT_DISPLAY_FLAG_USE_MOVIE_BG_COLOR (1<<3)
#define MP4_TEXT_DISPLAY_FLAG_SHRINK_TEXT_BOX_TO_FIT (1<<4)
#define MP4_TEXT_DISPLAY_FLAG_SCROLL_IN (1<<5)
#define MP4_TEXT_DISPLAY_FLAG_SCROLL_OUT (1<<6)
#define MP4_TEXT_DISPLAY_FLAG_HORIZONTAL_SCROLL (1<<7)
#define MP4_TEXT_DISPLAY_FLAG_REVERSE_SCROLL (1<<8)
#define MP4_TEXT_DISPLAY_FLAG_CONTINUOUS_SCROLL (1<<9)
#define MP4_TEXT_DISPLAY_FLAG_FLOW_HORIZONTAL (1<<10)
#define MP4_TEXT_DISPLAY_FLAG_CONTINUOUS_KARAOKE (1<<11)
#define MP4_TEXT_DISPLAY_FLAG_DROP_SHADOW (1<<12)
#define MP4_TEXT_DISPLAY_FLAG_ANTI_ALIAS (1<<13)
#define MP4_TEXT_DISPLAY_FLAG_KEYED_TEXT (1<<14)
#define MP4_TEXT_DISPLAY_FLAG_INVERSE_HILITE (1<<15)
#define MP4_TEXT_DISPLAY_FLAG_COLOR_HILITE (1<<16)
#define MP4_TEXT_DISPLAY_FLAG_WRITE_VERTICALLY (1<<17)
typedef
struct
{
uint8_t
i_reserved1
[
6
];
uint32_t
i_reserved1
;
uint16_t
i_reserved2
;
uint16_t
i_data_reference_index
;
uint32_t
i_display_flags
;
uint32_t
i_justification
;
uint16_t
i_background_color
[
3
];
uint64_t
i_text_box
;
uint64_t
i_reserved2
;
uint16_t
i_font_number
;
uint16_t
i_font_face
;
uint16_t
i_reserved3
;
uint32_t
i_display_flags
;
// TextDescription and Tx3gDescription
int8_t
i_justification_horizontal
;
// left(0), centered(1), right(-1)
int8_t
i_justification_vertical
;
// top(0), centered(1), bottom(-1)
uint16_t
i_background_color
[
4
];
uint16_t
i_foreground_color
[
3
];
uint16_t
i_text_box_top
;
uint16_t
i_text_box_left
;
uint16_t
i_text_box_bottom
;
uint16_t
i_text_box_right
;
char
*
psz_text_name
;
// TODO to complete
}
MP4_Box_data_sample_text_t
;
typedef
struct
MP4_Box_data_sample_hint_s
...
...
modules/demux/mp4/mp4.c
View file @
c490aa52
...
...
@@ -1278,6 +1278,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track,
break
;
case
(
VLC_FOURCC
(
't'
,
'e'
,
'x'
,
't'
)
):
case
(
VLC_FOURCC
(
't'
,
'x'
,
'3'
,
'g'
)
):
p_track
->
fmt
.
i_codec
=
VLC_FOURCC
(
's'
,
'u'
,
'b'
,
't'
);
/* FIXME: Not true, could be UTF-16 with a Byte Order Mark (0xfeff) */
/* FIXME UTF-8 doesn't work here ? */
...
...
@@ -1777,6 +1778,7 @@ static void MP4_TrackCreate( demux_t *p_demux, mp4_track_t *p_track,
case
(
FOURCC_text
):
case
(
FOURCC_subp
):
case
(
FOURCC_tx3g
):
p_track
->
fmt
.
i_cat
=
SPU_ES
;
break
;
...
...
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