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
ba357e98
Commit
ba357e98
authored
Feb 24, 2016
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avprobe: switch to codecpar
parent
567d6d5f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
42 deletions
+65
-42
avprobe.c
avprobe.c
+65
-42
No files found.
avprobe.c
View file @
ba357e98
...
...
@@ -34,6 +34,8 @@
typedef
struct
InputStream
{
AVStream
*
st
;
AVCodecContext
*
dec_ctx
;
}
InputStream
;
typedef
struct
InputFile
{
...
...
@@ -574,7 +576,7 @@ static void show_packet(AVFormatContext *fmt_ctx, AVPacket *pkt)
AVStream
*
st
=
fmt_ctx
->
streams
[
pkt
->
stream_index
];
probe_object_header
(
"packet"
);
probe_str
(
"codec_type"
,
media_type_string
(
st
->
codec
->
codec_type
));
probe_str
(
"codec_type"
,
media_type_string
(
st
->
codec
par
->
codec_type
));
probe_int
(
"stream_index"
,
pkt
->
stream_index
);
probe_str
(
"pts"
,
ts_value_string
(
val_str
,
sizeof
(
val_str
),
pkt
->
pts
));
probe_str
(
"pts_time"
,
time_value_string
(
val_str
,
sizeof
(
val_str
),
...
...
@@ -608,10 +610,11 @@ static void show_packets(InputFile *ifile)
probe_array_footer
(
"packets"
,
0
);
}
static
void
show_stream
(
InputFile
*
ifile
,
int
stream_idx
)
static
void
show_stream
(
InputFile
*
ifile
,
InputStream
*
ist
)
{
AVFormatContext
*
fmt_ctx
=
ifile
->
fmt_ctx
;
AVStream
*
stream
=
fmt_ctx
->
streams
[
stream_idx
];
AVStream
*
stream
=
ist
->
st
;
AVCodecParameters
*
par
;
AVCodecContext
*
dec_ctx
;
const
AVCodecDescriptor
*
codec_desc
;
const
char
*
profile
;
...
...
@@ -623,8 +626,9 @@ static void show_stream(InputFile *ifile, int stream_idx)
probe_int
(
"index"
,
stream
->
index
);
dec_ctx
=
stream
->
codec
;
codec_desc
=
avcodec_descriptor_get
(
dec_ctx
->
codec_id
);
par
=
stream
->
codecpar
;
dec_ctx
=
ist
->
dec_ctx
;
codec_desc
=
avcodec_descriptor_get
(
par
->
codec_id
);
if
(
codec_desc
)
{
probe_str
(
"codec_name"
,
codec_desc
->
name
);
probe_str
(
"codec_long_name"
,
codec_desc
->
long_name
);
...
...
@@ -632,31 +636,32 @@ static void show_stream(InputFile *ifile, int stream_idx)
probe_str
(
"codec_name"
,
"unknown"
);
}
probe_str
(
"codec_type"
,
media_type_string
(
dec_ctx
->
codec_type
));
probe_str
(
"codec_time_base"
,
rational_string
(
val_str
,
sizeof
(
val_str
),
"/"
,
&
dec_ctx
->
time_base
));
probe_str
(
"codec_type"
,
media_type_string
(
par
->
codec_type
));
/* print AVI/FourCC tag */
av_get_codec_tag_string
(
val_str
,
sizeof
(
val_str
),
dec_ctx
->
codec_tag
);
av_get_codec_tag_string
(
val_str
,
sizeof
(
val_str
),
par
->
codec_tag
);
probe_str
(
"codec_tag_string"
,
val_str
);
probe_str
(
"codec_tag"
,
tag_string
(
val_str
,
sizeof
(
val_str
),
dec_ctx
->
codec_tag
));
par
->
codec_tag
));
/* print profile, if there is one */
profile
=
avcodec_profile_name
(
dec_ctx
->
codec_id
,
dec_ctx
->
profile
);
profile
=
avcodec_profile_name
(
par
->
codec_id
,
par
->
profile
);
if
(
profile
)
probe_str
(
"profile"
,
profile
);
switch
(
dec_ctx
->
codec_type
)
{
switch
(
par
->
codec_type
)
{
case
AVMEDIA_TYPE_VIDEO
:
probe_int
(
"width"
,
dec_ctx
->
width
);
probe_int
(
"height"
,
dec_ctx
->
height
);
probe_int
(
"coded_width"
,
dec_ctx
->
coded_width
);
probe_int
(
"coded_height"
,
dec_ctx
->
coded_height
);
probe_int
(
"has_b_frames"
,
dec_ctx
->
has_b_frames
);
if
(
dec_ctx
->
sample_aspect_ratio
.
num
)
probe_int
(
"width"
,
par
->
width
);
probe_int
(
"height"
,
par
->
height
);
if
(
dec_ctx
)
{
probe_int
(
"coded_width"
,
dec_ctx
->
coded_width
);
probe_int
(
"coded_height"
,
dec_ctx
->
coded_height
);
probe_int
(
"has_b_frames"
,
dec_ctx
->
has_b_frames
);
}
if
(
dec_ctx
&&
dec_ctx
->
sample_aspect_ratio
.
num
)
sar
=
&
dec_ctx
->
sample_aspect_ratio
;
else
if
(
par
->
sample_aspect_ratio
.
num
)
sar
=
&
par
->
sample_aspect_ratio
;
else
if
(
stream
->
sample_aspect_ratio
.
num
)
sar
=
&
stream
->
sample_aspect_ratio
;
...
...
@@ -664,31 +669,31 @@ static void show_stream(InputFile *ifile, int stream_idx)
probe_str
(
"sample_aspect_ratio"
,
rational_string
(
val_str
,
sizeof
(
val_str
),
":"
,
sar
));
av_reduce
(
&
display_aspect_ratio
.
num
,
&
display_aspect_ratio
.
den
,
dec_ctx
->
width
*
sar
->
num
,
dec_ctx
->
height
*
sar
->
den
,
par
->
width
*
sar
->
num
,
par
->
height
*
sar
->
den
,
1024
*
1024
);
probe_str
(
"display_aspect_ratio"
,
rational_string
(
val_str
,
sizeof
(
val_str
),
":"
,
&
display_aspect_ratio
));
}
desc
=
av_pix_fmt_desc_get
(
dec_ctx
->
pix_fm
t
);
desc
=
av_pix_fmt_desc_get
(
par
->
forma
t
);
probe_str
(
"pix_fmt"
,
desc
?
desc
->
name
:
"unknown"
);
probe_int
(
"level"
,
dec_ctx
->
level
);
probe_int
(
"level"
,
par
->
level
);
probe_str
(
"color_range"
,
av_color_range_name
(
dec_ctx
->
color_range
));
probe_str
(
"color_space"
,
av_color_space_name
(
dec_ctx
->
color
space
));
probe_str
(
"color_trc"
,
av_color_transfer_name
(
dec_ctx
->
color_trc
));
probe_str
(
"color_pri"
,
av_color_primaries_name
(
dec_ctx
->
color_primaries
));
probe_str
(
"chroma_loc"
,
av_chroma_location_name
(
dec_ctx
->
chroma_sample
_location
));
probe_str
(
"color_range"
,
av_color_range_name
(
par
->
color_range
));
probe_str
(
"color_space"
,
av_color_space_name
(
par
->
color_
space
));
probe_str
(
"color_trc"
,
av_color_transfer_name
(
par
->
color_trc
));
probe_str
(
"color_pri"
,
av_color_primaries_name
(
par
->
color_primaries
));
probe_str
(
"chroma_loc"
,
av_chroma_location_name
(
par
->
chroma
_location
));
break
;
case
AVMEDIA_TYPE_AUDIO
:
probe_str
(
"sample_rate"
,
value_string
(
val_str
,
sizeof
(
val_str
),
dec_ctx
->
sample_rate
,
par
->
sample_rate
,
unit_hertz_str
));
probe_int
(
"channels"
,
dec_ctx
->
channels
);
probe_int
(
"channels"
,
par
->
channels
);
probe_int
(
"bits_per_sample"
,
av_get_bits_per_sample
(
dec_ctx
->
codec_id
));
av_get_bits_per_sample
(
par
->
codec_id
));
break
;
}
...
...
@@ -697,10 +702,11 @@ static void show_stream(InputFile *ifile, int stream_idx)
probe_str
(
"avg_frame_rate"
,
rational_string
(
val_str
,
sizeof
(
val_str
),
"/"
,
&
stream
->
avg_frame_rate
));
if
(
dec_ctx
->
bit_rate
)
if
(
par
->
bit_rate
)
probe_str
(
"bit_rate"
,
value_string
(
val_str
,
sizeof
(
val_str
),
dec_ctx
->
bit_rate
,
unit_bit_per_second_str
));
par
->
bit_rate
,
unit_bit_per_second_str
));
probe_str
(
"time_base"
,
rational_string
(
val_str
,
sizeof
(
val_str
),
"/"
,
&
stream
->
time_base
));
...
...
@@ -808,16 +814,34 @@ static int open_input_file(InputFile *ifile, const char *filename)
ist
->
st
=
stream
;
if
(
stream
->
codec
->
codec_id
==
AV_CODEC_ID_PROBE
)
{
if
(
stream
->
codec
par
->
codec_id
==
AV_CODEC_ID_PROBE
)
{
fprintf
(
stderr
,
"Failed to probe codec for input stream %d
\n
"
,
stream
->
index
);
}
else
if
(
!
(
codec
=
avcodec_find_decoder
(
stream
->
codec
->
codec_id
)))
{
continue
;
}
codec
=
avcodec_find_decoder
(
stream
->
codecpar
->
codec_id
);
if
(
!
codec
)
{
fprintf
(
stderr
,
"Unsupported codec with id %d for input stream %d
\n
"
,
stream
->
codec
->
codec_id
,
stream
->
index
);
}
else
if
(
avcodec_open2
(
stream
->
codec
,
codec
,
NULL
)
<
0
)
{
stream
->
codecpar
->
codec_id
,
stream
->
index
);
continue
;
}
ist
->
dec_ctx
=
avcodec_alloc_context3
(
codec
);
if
(
!
ist
->
dec_ctx
)
exit
(
1
);
err
=
avcodec_parameters_to_context
(
ist
->
dec_ctx
,
stream
->
codecpar
);
if
(
err
<
0
)
exit
(
1
);
err
=
avcodec_open2
(
ist
->
dec_ctx
,
NULL
,
NULL
);
if
(
err
<
0
)
{
fprintf
(
stderr
,
"Error while opening codec for input stream %d
\n
"
,
stream
->
index
);
exit
(
1
);
}
}
...
...
@@ -828,13 +852,12 @@ static int open_input_file(InputFile *ifile, const char *filename)
static
void
close_input_file
(
InputFile
*
ifile
)
{
int
i
;
AVFormatContext
*
fmt_ctx
=
ifile
->
fmt_ctx
;
/* close decoder for each stream */
for
(
i
=
0
;
i
<
fmt_ctx
->
nb_streams
;
i
++
)
{
AVStream
*
stream
=
fmt_ctx
->
streams
[
i
];
for
(
i
=
0
;
i
<
ifile
->
nb_streams
;
i
++
)
{
InputStream
*
ist
=
&
ifile
->
streams
[
i
];
avcodec_
close
(
stream
->
codec
);
avcodec_
free_context
(
&
ist
->
dec_ctx
);
}
av_freep
(
&
ifile
->
streams
);
...
...
@@ -857,8 +880,8 @@ static int probe_file(const char *filename)
if
(
do_show_streams
)
{
probe_array_header
(
"streams"
,
0
);
for
(
i
=
0
;
i
<
ifile
.
fmt_ctx
->
nb_streams
;
i
++
)
show_stream
(
&
ifile
,
i
);
for
(
i
=
0
;
i
<
ifile
.
nb_streams
;
i
++
)
show_stream
(
&
ifile
,
&
ifile
.
streams
[
i
]
);
probe_array_footer
(
"streams"
,
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