Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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
Hide 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
,
*/
enum
AVCodecID
codec_id
)
static
AVStream
*
add_audio_stream
(
AVFormatContext
*
oc
,
AVCodec
**
codec
,
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
)
{
c
->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
case
AVMEDIA_TYPE_AUDIO
:
c
->
bit_rate
=
64000
;
st
->
id
=
1
;
c
->
sample_rate
=
44100
;
c
->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
c
->
channels
=
2
;
c
->
bit_rate
=
64000
;
c
->
sample_rate
=
44100
;
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