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
eebde404
Commit
eebde404
authored
Aug 03, 2012
by
Stefano Sabatini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
examples/muxing: merge add_audio_stream() and add_video_stream()
Factorize.
parent
eda0a52b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
70 deletions
+55
-70
muxing.c
doc/examples/muxing.c
+55
-70
No files found.
doc/examples/muxing.c
View file @
eebde404
...
@@ -52,16 +52,14 @@ static float t, tincr, tincr2;
...
@@ -52,16 +52,14 @@ static float t, tincr, tincr2;
static
int16_t
*
samples
;
static
int16_t
*
samples
;
static
int
audio_input_frame_size
;
static
int
audio_input_frame_size
;
/*
/* Add an output stream. */
* add an audio output stream
static
AVStream
*
add_stream
(
AVFormatContext
*
oc
,
AVCodec
**
codec
,
*/
static
AVStream
*
add_audio_stream
(
AVFormatContext
*
oc
,
AVCodec
**
codec
,
enum
AVCodecID
codec_id
)
enum
AVCodecID
codec_id
)
{
{
AVCodecContext
*
c
;
AVCodecContext
*
c
;
AVStream
*
st
;
AVStream
*
st
;
/* find the
audio
encoder */
/* find the encoder */
*
codec
=
avcodec_find_encoder
(
codec_id
);
*
codec
=
avcodec_find_encoder
(
codec_id
);
if
(
!
(
*
codec
))
{
if
(
!
(
*
codec
))
{
fprintf
(
stderr
,
"Could not find codec
\n
"
);
fprintf
(
stderr
,
"Could not find codec
\n
"
);
...
@@ -76,19 +74,61 @@ static AVStream *add_audio_stream(AVFormatContext *oc, AVCodec **codec,
...
@@ -76,19 +74,61 @@ static AVStream *add_audio_stream(AVFormatContext *oc, AVCodec **codec,
st
->
id
=
oc
->
nb_streams
-
1
;
st
->
id
=
oc
->
nb_streams
-
1
;
c
=
st
->
codec
;
c
=
st
->
codec
;
/* put sample parameters */
switch
((
*
codec
)
->
type
)
{
case
AVMEDIA_TYPE_AUDIO
:
st
->
id
=
1
;
c
->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
c
->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
c
->
bit_rate
=
64000
;
c
->
bit_rate
=
64000
;
c
->
sample_rate
=
44100
;
c
->
sample_rate
=
44100
;
c
->
channels
=
2
;
c
->
channels
=
2
;
break
;
case
AVMEDIA_TYPE_VIDEO
:
avcodec_get_context_defaults3
(
c
,
*
codec
);
c
->
codec_id
=
codec_id
;
c
->
bit_rate
=
400000
;
/* Resolution must be a multiple of two. */
c
->
width
=
352
;
c
->
height
=
288
;
/* timebase: This is the fundamental unit of time (in seconds) in terms
* of which frame timestamps are represented. For fixed-fps content,
* timebase should be 1/framerate and timestamp increments should be
* identical to 1. */
c
->
time_base
.
den
=
STREAM_FRAME_RATE
;
c
->
time_base
.
num
=
1
;
c
->
gop_size
=
12
;
/* emit one intra frame every twelve frames at most */
c
->
pix_fmt
=
STREAM_PIX_FMT
;
if
(
c
->
codec_id
==
AV_CODEC_ID_MPEG2VIDEO
)
{
/* just for testing, we also add B frames */
c
->
max_b_frames
=
2
;
}
if
(
c
->
codec_id
==
AV_CODEC_ID_MPEG1VIDEO
)
{
/* Needed to avoid using macroblocks in which some coeffs overflow.
* This does not happen with normal video, it just happens here as
* the motion of the chroma plane does not match the luma plane. */
c
->
mb_decision
=
2
;
}
break
;
default:
break
;
}
/
/ some formats want stream headers to be separate
/
* Some formats want stream headers to be separate. */
if
(
oc
->
oformat
->
flags
&
AVFMT_GLOBALHEADER
)
if
(
oc
->
oformat
->
flags
&
AVFMT_GLOBALHEADER
)
c
->
flags
|=
CODEC_FLAG_GLOBAL_HEADER
;
c
->
flags
|=
CODEC_FLAG_GLOBAL_HEADER
;
return
st
;
return
st
;
}
}
/**************************************************************/
/* audio output */
static
float
t
,
tincr
,
tincr2
;
static
int16_t
*
samples
;
static
int
audio_input_frame_size
;
static
void
open_audio
(
AVFormatContext
*
oc
,
AVCodec
*
codec
,
AVStream
*
st
)
static
void
open_audio
(
AVFormatContext
*
oc
,
AVCodec
*
codec
,
AVStream
*
st
)
{
{
AVCodecContext
*
c
;
AVCodecContext
*
c
;
...
@@ -188,62 +228,6 @@ static AVFrame *frame;
...
@@ -188,62 +228,6 @@ static AVFrame *frame;
static
AVPicture
src_picture
,
dst_picture
;
static
AVPicture
src_picture
,
dst_picture
;
static
int
frame_count
;
static
int
frame_count
;
/* Add a video output stream. */
static
AVStream
*
add_video_stream
(
AVFormatContext
*
oc
,
AVCodec
**
codec
,
enum
AVCodecID
codec_id
)
{
AVCodecContext
*
c
;
AVStream
*
st
;
/* find the video encoder */
*
codec
=
avcodec_find_encoder
(
codec_id
);
if
(
!
(
*
codec
))
{
fprintf
(
stderr
,
"codec not found
\n
"
);
exit
(
1
);
}
st
=
avformat_new_stream
(
oc
,
*
codec
);
if
(
!
st
)
{
fprintf
(
stderr
,
"Could not alloc stream
\n
"
);
exit
(
1
);
}
st
->
id
=
oc
->
nb_streams
-
1
;
c
=
st
->
codec
;
avcodec_get_context_defaults3
(
c
,
*
codec
);
c
->
codec_id
=
codec_id
;
/* Put sample parameters. */
c
->
bit_rate
=
400000
;
/* Resolution must be a multiple of two. */
c
->
width
=
352
;
c
->
height
=
288
;
/* timebase: This is the fundamental unit of time (in seconds) in terms
* of which frame timestamps are represented. For fixed-fps content,
* timebase should be 1/framerate and timestamp increments should be
* identical to 1. */
c
->
time_base
.
den
=
STREAM_FRAME_RATE
;
c
->
time_base
.
num
=
1
;
c
->
gop_size
=
12
;
/* emit one intra frame every twelve frames at most */
c
->
pix_fmt
=
STREAM_PIX_FMT
;
if
(
c
->
codec_id
==
AV_CODEC_ID_MPEG2VIDEO
)
{
/* just for testing, we also add B frames */
c
->
max_b_frames
=
2
;
}
if
(
c
->
codec_id
==
AV_CODEC_ID_MPEG1VIDEO
)
{
/* Needed to avoid using macroblocks in which some coeffs overflow.
* This does not happen with normal video, it just happens here as
* the motion of the chroma plane does not match the luma plane. */
c
->
mb_decision
=
2
;
}
/* Some formats want stream headers to be separate. */
if
(
oc
->
oformat
->
flags
&
AVFMT_GLOBALHEADER
)
c
->
flags
|=
CODEC_FLAG_GLOBAL_HEADER
;
return
st
;
}
static
void
open_video
(
AVFormatContext
*
oc
,
AVCodec
*
codec
,
AVStream
*
st
)
static
void
open_video
(
AVFormatContext
*
oc
,
AVCodec
*
codec
,
AVStream
*
st
)
{
{
int
ret
;
int
ret
;
...
@@ -437,11 +421,12 @@ int main(int argc, char **argv)
...
@@ -437,11 +421,12 @@ int main(int argc, char **argv)
* and initialize the codecs. */
* and initialize the codecs. */
video_st
=
NULL
;
video_st
=
NULL
;
audio_st
=
NULL
;
audio_st
=
NULL
;
if
(
fmt
->
video_codec
!=
AV_CODEC_ID_NONE
)
{
if
(
fmt
->
video_codec
!=
AV_CODEC_ID_NONE
)
{
video_st
=
add_
video_
stream
(
oc
,
&
video_codec
,
fmt
->
video_codec
);
video_st
=
add_stream
(
oc
,
&
video_codec
,
fmt
->
video_codec
);
}
}
if
(
fmt
->
audio_codec
!=
AV_CODEC_ID_NONE
)
{
if
(
fmt
->
audio_codec
!=
AV_CODEC_ID_NONE
)
{
audio_st
=
add_
audio_
stream
(
oc
,
&
audio_codec
,
fmt
->
audio_codec
);
audio_st
=
add_stream
(
oc
,
&
audio_codec
,
fmt
->
audio_codec
);
}
}
/* Now that all the parameters are set, we can open the audio and
/* Now that all the parameters are set, we can open the audio and
...
...
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