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
77e0c758
Commit
77e0c758
authored
Nov 30, 2011
by
Martin Storsjö
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rtpenc: Change rtp_send_samples to handle sample sizes other than even bytes
Signed-off-by:
Martin Storsjö
<
martin@martin.st
>
parent
2d31d890
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
12 additions
and
9 deletions
+12
-9
rtpenc.c
libavformat/rtpenc.c
+12
-9
No files found.
libavformat/rtpenc.c
View file @
77e0c758
...
...
@@ -248,14 +248,16 @@ void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
/* send an integer number of samples and compute time stamp and fill
the rtp send buffer before sending. */
static
void
rtp_send_samples
(
AVFormatContext
*
s1
,
const
uint8_t
*
buf1
,
int
size
,
int
sample_size
)
const
uint8_t
*
buf1
,
int
size
,
int
sample_size
_bits
)
{
RTPMuxContext
*
s
=
s1
->
priv_data
;
int
len
,
max_packet_size
,
n
;
/* Calculate the number of bytes to get samples aligned on a byte border */
int
aligned_samples_size
=
sample_size_bits
/
av_gcd
(
sample_size_bits
,
8
);
max_packet_size
=
(
s
->
max_payload_size
/
sample_size
)
*
sample
_size
;
/*
not needed, but who nows
*/
if
((
s
ize
%
sample_size
)
!=
0
)
max_packet_size
=
(
s
->
max_payload_size
/
aligned_samples_size
)
*
aligned_samples
_size
;
/*
Not needed, but who knows. Don't check if samples aren't an even number of bytes.
*/
if
((
s
ample_size_bits
%
8
)
==
0
&&
((
8
*
size
)
%
sample_size_bits
)
!=
0
)
av_abort
();
n
=
0
;
while
(
size
>
0
)
{
...
...
@@ -267,7 +269,7 @@ static void rtp_send_samples(AVFormatContext *s1,
s
->
buf_ptr
+=
len
;
buf1
+=
len
;
size
-=
len
;
s
->
timestamp
=
s
->
cur_timestamp
+
n
/
sample_size
;
s
->
timestamp
=
s
->
cur_timestamp
+
n
*
8
/
sample_size_bits
;
ff_rtp_send_data
(
s1
,
s
->
buf
,
s
->
buf_ptr
-
s
->
buf
,
0
);
n
+=
(
s
->
buf_ptr
-
s
->
buf
);
}
...
...
@@ -394,19 +396,20 @@ static int rtp_write_packet(AVFormatContext *s1, AVPacket *pkt)
case
CODEC_ID_PCM_ALAW
:
case
CODEC_ID_PCM_U8
:
case
CODEC_ID_PCM_S8
:
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
1
*
st
->
codec
->
channels
);
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
8
*
st
->
codec
->
channels
);
break
;
case
CODEC_ID_PCM_U16BE
:
case
CODEC_ID_PCM_U16LE
:
case
CODEC_ID_PCM_S16BE
:
case
CODEC_ID_PCM_S16LE
:
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
2
*
st
->
codec
->
channels
);
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
16
*
st
->
codec
->
channels
);
break
;
case
CODEC_ID_ADPCM_G722
:
/* The actual sample size is half a byte per sample, but since the
* stream clock rate is 8000 Hz while the sample rate is 16000 Hz,
* the correct parameter for send_samples is 1 byte per stream clock. */
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
1
*
st
->
codec
->
channels
);
* the correct parameter for send_samples_bits is 8 bits per stream
* clock. */
rtp_send_samples
(
s1
,
pkt
->
data
,
size
,
8
*
st
->
codec
->
channels
);
break
;
case
CODEC_ID_MP2
:
case
CODEC_ID_MP3
:
...
...
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