Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
6fb50124
Commit
6fb50124
authored
Aug 18, 2011
by
Sven Hesse
Committed by
Michael Niedermayer
Aug 18, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
xmv: Merge XMVAudioTrack into XMVAudioPacket
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
d50fc62e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
51 deletions
+37
-51
xmv.c
libavformat/xmv.c
+37
-51
No files found.
libavformat/xmv.c
View file @
6fb50124
...
...
@@ -42,19 +42,6 @@
XMV_AUDIO_ADPCM51_FRONTCENTERLOW | \
XMV_AUDIO_ADPCM51_REARLEFTRIGHT)
typedef
struct
XMVAudioTrack
{
uint16_t
compression
;
uint16_t
channels
;
uint32_t
sample_rate
;
uint16_t
bits_per_sample
;
uint32_t
bit_rate
;
uint16_t
flags
;
uint16_t
block_align
;
uint16_t
block_samples
;
enum
CodecID
codec_id
;
}
XMVAudioTrack
;
typedef
struct
XMVVideoPacket
{
/* The decoder stream index for this video packet. */
int
stream_index
;
...
...
@@ -79,8 +66,16 @@ typedef struct XMVAudioPacket {
/* The decoder stream index for this audio packet. */
int
stream_index
;
/* The audio track this packet encodes. */
XMVAudioTrack
*
track
;
uint16_t
compression
;
uint16_t
channels
;
uint32_t
sample_rate
;
uint16_t
bits_per_sample
;
uint32_t
bit_rate
;
uint16_t
flags
;
uint16_t
block_align
;
uint16_t
block_samples
;
enum
CodecID
codec_id
;
uint32_t
data_size
;
uint64_t
data_offset
;
...
...
@@ -93,8 +88,6 @@ typedef struct XMVAudioPacket {
typedef
struct
XMVDemuxContext
{
uint16_t
audio_track_count
;
XMVAudioTrack
*
audio_tracks
;
uint32_t
this_packet_size
;
uint32_t
next_packet_size
;
...
...
@@ -172,34 +165,28 @@ static int xmv_read_header(AVFormatContext *s,
avio_skip
(
pb
,
2
);
/* Unknown (padding?) */
xmv
->
audio_tracks
=
av_malloc
(
xmv
->
audio_track_count
*
sizeof
(
XMVAudioTrack
));
if
(
!
xmv
->
audio_tracks
)
return
AVERROR
(
ENOMEM
);
xmv
->
audio
=
av_malloc
(
xmv
->
audio_track_count
*
sizeof
(
XMVAudioPacket
));
if
(
!
xmv
->
audio
)
return
AVERROR
(
ENOMEM
);
for
(
audio_track
=
0
;
audio_track
<
xmv
->
audio_track_count
;
audio_track
++
)
{
XMVAudioTrack
*
track
=
&
xmv
->
audio_tracks
[
audio_track
];
XMVAudioPacket
*
packet
=
&
xmv
->
audio
[
audio_track
];
XMVAudioPacket
*
packet
=
&
xmv
->
audio
[
audio_track
];
AVStream
*
ast
=
NULL
;
track
->
compression
=
avio_rl16
(
pb
);
track
->
channels
=
avio_rl16
(
pb
);
track
->
sample_rate
=
avio_rl32
(
pb
);
track
->
bits_per_sample
=
avio_rl16
(
pb
);
track
->
flags
=
avio_rl16
(
pb
);
track
->
bit_rate
=
track
->
bits_per_sample
*
track
->
sample_rate
*
track
->
channels
;
track
->
block_align
=
36
*
track
->
channels
;
track
->
block_samples
=
64
;
track
->
codec_id
=
ff_wav_codec_get_id
(
track
->
compression
,
track
->
bits_per_sample
);
packet
->
track
=
track
;
packet
->
compression
=
avio_rl16
(
pb
);
packet
->
channels
=
avio_rl16
(
pb
);
packet
->
sample_rate
=
avio_rl32
(
pb
);
packet
->
bits_per_sample
=
avio_rl16
(
pb
);
packet
->
flags
=
avio_rl16
(
pb
);
packet
->
bit_rate
=
packet
->
bits_per_sample
*
packet
->
sample_rate
*
packet
->
channels
;
packet
->
block_align
=
36
*
packet
->
channels
;
packet
->
block_samples
=
64
;
packet
->
codec_id
=
ff_wav_codec_get_id
(
packet
->
compression
,
packet
->
bits_per_sample
);
packet
->
stream_index
=
-
1
;
packet
->
frame_size
=
0
;
...
...
@@ -207,24 +194,24 @@ static int xmv_read_header(AVFormatContext *s,
/* TODO: ADPCM'd 5.1 sound is encoded in three separate streams.
* Those need to be interleaved to a proper 5.1 stream. */
if
(
track
->
flags
&
XMV_AUDIO_ADPCM51
)
if
(
packet
->
flags
&
XMV_AUDIO_ADPCM51
)
av_log
(
s
,
AV_LOG_WARNING
,
"Unsupported 5.1 ADPCM audio stream "
"(0x%04X)
\n
"
,
track
->
flags
);
"(0x%04X)
\n
"
,
packet
->
flags
);
ast
=
av_new_stream
(
s
,
audio_track
);
if
(
!
ast
)
return
AVERROR
(
ENOMEM
);
ast
->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
ast
->
codec
->
codec_id
=
track
->
codec_id
;
ast
->
codec
->
codec_tag
=
track
->
compression
;
ast
->
codec
->
channels
=
track
->
channels
;
ast
->
codec
->
sample_rate
=
track
->
sample_rate
;
ast
->
codec
->
bits_per_coded_sample
=
track
->
bits_per_sample
;
ast
->
codec
->
bit_rate
=
track
->
bit_rate
;
ast
->
codec
->
block_align
=
36
*
track
->
channels
;
ast
->
codec
->
codec_id
=
packet
->
codec_id
;
ast
->
codec
->
codec_tag
=
packet
->
compression
;
ast
->
codec
->
channels
=
packet
->
channels
;
ast
->
codec
->
sample_rate
=
packet
->
sample_rate
;
ast
->
codec
->
bits_per_coded_sample
=
packet
->
bits_per_sample
;
ast
->
codec
->
bit_rate
=
packet
->
bit_rate
;
ast
->
codec
->
block_align
=
36
*
packet
->
channels
;
av_set_pts_info
(
ast
,
32
,
track
->
block_samples
,
track
->
sample_rate
);
av_set_pts_info
(
ast
,
32
,
packet
->
block_samples
,
packet
->
sample_rate
);
packet
->
stream_index
=
ast
->
index
;
...
...
@@ -339,7 +326,7 @@ static int xmv_process_packet_header(AVFormatContext *s)
/** Carve up the audio data in frame_count slices */
packet
->
frame_size
=
packet
->
data_size
/
xmv
->
video
.
frame_count
;
packet
->
frame_size
-=
packet
->
frame_size
%
packet
->
track
->
block_align
;
packet
->
frame_size
-=
packet
->
frame_size
%
packet
->
block_align
;
}
/* Packet data offsets */
...
...
@@ -443,7 +430,7 @@ static int xmv_fetch_audio_packet(AVFormatContext *s,
/* Calculate the PTS */
block_count
=
data_size
/
audio
->
track
->
block_align
;
block_count
=
data_size
/
audio
->
block_align
;
pkt
->
duration
=
block_count
;
pkt
->
pts
=
audio
->
block_count
;
...
...
@@ -560,7 +547,6 @@ static int xmv_read_close(AVFormatContext *s)
XMVDemuxContext
*
xmv
=
s
->
priv_data
;
av_free
(
xmv
->
audio
);
av_free
(
xmv
->
audio_tracks
);
return
0
;
}
...
...
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