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
2dc26561
Commit
2dc26561
authored
Apr 15, 2014
by
Vittorio Giovara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: group dump functions together
parent
5a69ded1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
285 additions
and
246 deletions
+285
-246
Makefile
libavformat/Makefile
+1
-0
dump.c
libavformat/dump.c
+284
-0
utils.c
libavformat/utils.c
+0
-246
No files found.
libavformat/Makefile
View file @
2dc26561
...
@@ -8,6 +8,7 @@ OBJS = allformats.o \
...
@@ -8,6 +8,7 @@ OBJS = allformats.o \
avio.o
\
avio.o
\
aviobuf.o
\
aviobuf.o
\
cutils.o
\
cutils.o
\
dump.o
\
format.o
\
format.o
\
id3v1.o
\
id3v1.o
\
id3v2.o
\
id3v2.o
\
...
...
libavformat/dump.c
0 → 100644
View file @
2dc26561
/*
* Various pretty-printing functions for use within Libav
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <stdint.h>
#include "libavutil/log.h"
#include "libavutil/mathematics.h"
#include "avformat.h"
#define HEXDUMP_PRINT(...) \
do { \
if (!f) \
av_log(avcl, level, __VA_ARGS__); \
else \
fprintf(f, __VA_ARGS__); \
} while (0)
static
void
hex_dump_internal
(
void
*
avcl
,
FILE
*
f
,
int
level
,
const
uint8_t
*
buf
,
int
size
)
{
int
len
,
i
,
j
,
c
;
for
(
i
=
0
;
i
<
size
;
i
+=
16
)
{
len
=
size
-
i
;
if
(
len
>
16
)
len
=
16
;
HEXDUMP_PRINT
(
"%08x "
,
i
);
for
(
j
=
0
;
j
<
16
;
j
++
)
{
if
(
j
<
len
)
HEXDUMP_PRINT
(
" %02x"
,
buf
[
i
+
j
]);
else
HEXDUMP_PRINT
(
" "
);
}
HEXDUMP_PRINT
(
" "
);
for
(
j
=
0
;
j
<
len
;
j
++
)
{
c
=
buf
[
i
+
j
];
if
(
c
<
' '
||
c
>
'~'
)
c
=
'.'
;
HEXDUMP_PRINT
(
"%c"
,
c
);
}
HEXDUMP_PRINT
(
"
\n
"
);
}
}
void
av_hex_dump
(
FILE
*
f
,
const
uint8_t
*
buf
,
int
size
)
{
hex_dump_internal
(
NULL
,
f
,
0
,
buf
,
size
);
}
void
av_hex_dump_log
(
void
*
avcl
,
int
level
,
const
uint8_t
*
buf
,
int
size
)
{
hex_dump_internal
(
avcl
,
NULL
,
level
,
buf
,
size
);
}
static
void
pkt_dump_internal
(
void
*
avcl
,
FILE
*
f
,
int
level
,
AVPacket
*
pkt
,
int
dump_payload
,
AVRational
time_base
)
{
HEXDUMP_PRINT
(
"stream #%d:
\n
"
,
pkt
->
stream_index
);
HEXDUMP_PRINT
(
" keyframe=%d
\n
"
,
(
pkt
->
flags
&
AV_PKT_FLAG_KEY
)
!=
0
);
HEXDUMP_PRINT
(
" duration=%0.3f
\n
"
,
pkt
->
duration
*
av_q2d
(
time_base
));
/* DTS is _always_ valid after av_read_frame() */
HEXDUMP_PRINT
(
" dts="
);
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
HEXDUMP_PRINT
(
"N/A"
);
else
HEXDUMP_PRINT
(
"%0.3f"
,
pkt
->
dts
*
av_q2d
(
time_base
));
/* PTS may not be known if B-frames are present. */
HEXDUMP_PRINT
(
" pts="
);
if
(
pkt
->
pts
==
AV_NOPTS_VALUE
)
HEXDUMP_PRINT
(
"N/A"
);
else
HEXDUMP_PRINT
(
"%0.3f"
,
pkt
->
pts
*
av_q2d
(
time_base
));
HEXDUMP_PRINT
(
"
\n
"
);
HEXDUMP_PRINT
(
" size=%d
\n
"
,
pkt
->
size
);
if
(
dump_payload
)
av_hex_dump
(
f
,
pkt
->
data
,
pkt
->
size
);
}
void
av_pkt_dump2
(
FILE
*
f
,
AVPacket
*
pkt
,
int
dump_payload
,
AVStream
*
st
)
{
pkt_dump_internal
(
NULL
,
f
,
0
,
pkt
,
dump_payload
,
st
->
time_base
);
}
void
av_pkt_dump_log2
(
void
*
avcl
,
int
level
,
AVPacket
*
pkt
,
int
dump_payload
,
AVStream
*
st
)
{
pkt_dump_internal
(
avcl
,
NULL
,
level
,
pkt
,
dump_payload
,
st
->
time_base
);
}
static
void
print_fps
(
double
d
,
const
char
*
postfix
)
{
uint64_t
v
=
lrintf
(
d
*
100
);
if
(
v
%
100
)
av_log
(
NULL
,
AV_LOG_INFO
,
", %3.2f %s"
,
d
,
postfix
);
else
if
(
v
%
(
100
*
1000
))
av_log
(
NULL
,
AV_LOG_INFO
,
", %1.0f %s"
,
d
,
postfix
);
else
av_log
(
NULL
,
AV_LOG_INFO
,
", %1.0fk %s"
,
d
/
1000
,
postfix
);
}
static
void
dump_metadata
(
void
*
ctx
,
AVDictionary
*
m
,
const
char
*
indent
)
{
if
(
m
&&
!
(
av_dict_count
(
m
)
==
1
&&
av_dict_get
(
m
,
"language"
,
NULL
,
0
)))
{
AVDictionaryEntry
*
tag
=
NULL
;
av_log
(
ctx
,
AV_LOG_INFO
,
"%sMetadata:
\n
"
,
indent
);
while
((
tag
=
av_dict_get
(
m
,
""
,
tag
,
AV_DICT_IGNORE_SUFFIX
)))
if
(
strcmp
(
"language"
,
tag
->
key
))
av_log
(
ctx
,
AV_LOG_INFO
,
"%s %-16s: %s
\n
"
,
indent
,
tag
->
key
,
tag
->
value
);
}
}
/* "user interface" functions */
static
void
dump_stream_format
(
AVFormatContext
*
ic
,
int
i
,
int
index
,
int
is_output
)
{
char
buf
[
256
];
int
flags
=
(
is_output
?
ic
->
oformat
->
flags
:
ic
->
iformat
->
flags
);
AVStream
*
st
=
ic
->
streams
[
i
];
int
g
=
av_gcd
(
st
->
time_base
.
num
,
st
->
time_base
.
den
);
AVDictionaryEntry
*
lang
=
av_dict_get
(
st
->
metadata
,
"language"
,
NULL
,
0
);
avcodec_string
(
buf
,
sizeof
(
buf
),
st
->
codec
,
is_output
);
av_log
(
NULL
,
AV_LOG_INFO
,
" Stream #%d.%d"
,
index
,
i
);
/* the pid is an important information, so we display it */
/* XXX: add a generic system */
if
(
flags
&
AVFMT_SHOW_IDS
)
av_log
(
NULL
,
AV_LOG_INFO
,
"[0x%x]"
,
st
->
id
);
if
(
lang
)
av_log
(
NULL
,
AV_LOG_INFO
,
"(%s)"
,
lang
->
value
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
", %d, %d/%d"
,
st
->
codec_info_nb_frames
,
st
->
time_base
.
num
/
g
,
st
->
time_base
.
den
/
g
);
av_log
(
NULL
,
AV_LOG_INFO
,
": %s"
,
buf
);
if
(
st
->
sample_aspect_ratio
.
num
&&
// default
av_cmp_q
(
st
->
sample_aspect_ratio
,
st
->
codec
->
sample_aspect_ratio
))
{
AVRational
display_aspect_ratio
;
av_reduce
(
&
display_aspect_ratio
.
num
,
&
display_aspect_ratio
.
den
,
st
->
codec
->
width
*
st
->
sample_aspect_ratio
.
num
,
st
->
codec
->
height
*
st
->
sample_aspect_ratio
.
den
,
1024
*
1024
);
av_log
(
NULL
,
AV_LOG_INFO
,
", PAR %d:%d DAR %d:%d"
,
st
->
sample_aspect_ratio
.
num
,
st
->
sample_aspect_ratio
.
den
,
display_aspect_ratio
.
num
,
display_aspect_ratio
.
den
);
}
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
{
if
(
st
->
avg_frame_rate
.
den
&&
st
->
avg_frame_rate
.
num
)
print_fps
(
av_q2d
(
st
->
avg_frame_rate
),
"fps"
);
if
(
st
->
time_base
.
den
&&
st
->
time_base
.
num
)
print_fps
(
1
/
av_q2d
(
st
->
time_base
),
"tbn"
);
if
(
st
->
codec
->
time_base
.
den
&&
st
->
codec
->
time_base
.
num
)
print_fps
(
1
/
av_q2d
(
st
->
codec
->
time_base
),
"tbc"
);
}
if
(
st
->
disposition
&
AV_DISPOSITION_DEFAULT
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (default)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_DUB
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (dub)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_ORIGINAL
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (original)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_COMMENT
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (comment)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_LYRICS
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (lyrics)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_KARAOKE
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (karaoke)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_FORCED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (forced)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_HEARING_IMPAIRED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (hearing impaired)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_VISUAL_IMPAIRED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (visual impaired)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_CLEAN_EFFECTS
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (clean effects)"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
"
);
dump_metadata
(
NULL
,
st
->
metadata
,
" "
);
}
void
av_dump_format
(
AVFormatContext
*
ic
,
int
index
,
const
char
*
url
,
int
is_output
)
{
int
i
;
uint8_t
*
printed
=
ic
->
nb_streams
?
av_mallocz
(
ic
->
nb_streams
)
:
NULL
;
if
(
ic
->
nb_streams
&&
!
printed
)
return
;
av_log
(
NULL
,
AV_LOG_INFO
,
"%s #%d, %s, %s '%s':
\n
"
,
is_output
?
"Output"
:
"Input"
,
index
,
is_output
?
ic
->
oformat
->
name
:
ic
->
iformat
->
name
,
is_output
?
"to"
:
"from"
,
url
);
dump_metadata
(
NULL
,
ic
->
metadata
,
" "
);
if
(
!
is_output
)
{
av_log
(
NULL
,
AV_LOG_INFO
,
" Duration: "
);
if
(
ic
->
duration
!=
AV_NOPTS_VALUE
)
{
int
hours
,
mins
,
secs
,
us
;
secs
=
ic
->
duration
/
AV_TIME_BASE
;
us
=
ic
->
duration
%
AV_TIME_BASE
;
mins
=
secs
/
60
;
secs
%=
60
;
hours
=
mins
/
60
;
mins
%=
60
;
av_log
(
NULL
,
AV_LOG_INFO
,
"%02d:%02d:%02d.%02d"
,
hours
,
mins
,
secs
,
(
100
*
us
)
/
AV_TIME_BASE
);
}
else
{
av_log
(
NULL
,
AV_LOG_INFO
,
"N/A"
);
}
if
(
ic
->
start_time
!=
AV_NOPTS_VALUE
)
{
int
secs
,
us
;
av_log
(
NULL
,
AV_LOG_INFO
,
", start: "
);
secs
=
ic
->
start_time
/
AV_TIME_BASE
;
us
=
abs
(
ic
->
start_time
%
AV_TIME_BASE
);
av_log
(
NULL
,
AV_LOG_INFO
,
"%d.%06d"
,
secs
,
(
int
)
av_rescale
(
us
,
1000000
,
AV_TIME_BASE
));
}
av_log
(
NULL
,
AV_LOG_INFO
,
", bitrate: "
);
if
(
ic
->
bit_rate
)
av_log
(
NULL
,
AV_LOG_INFO
,
"%d kb/s"
,
ic
->
bit_rate
/
1000
);
else
av_log
(
NULL
,
AV_LOG_INFO
,
"N/A"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
"
);
}
for
(
i
=
0
;
i
<
ic
->
nb_chapters
;
i
++
)
{
AVChapter
*
ch
=
ic
->
chapters
[
i
];
av_log
(
NULL
,
AV_LOG_INFO
,
" Chapter #%d.%d: "
,
index
,
i
);
av_log
(
NULL
,
AV_LOG_INFO
,
"start %f, "
,
ch
->
start
*
av_q2d
(
ch
->
time_base
));
av_log
(
NULL
,
AV_LOG_INFO
,
"end %f
\n
"
,
ch
->
end
*
av_q2d
(
ch
->
time_base
));
dump_metadata
(
NULL
,
ch
->
metadata
,
" "
);
}
if
(
ic
->
nb_programs
)
{
int
j
,
k
,
total
=
0
;
for
(
j
=
0
;
j
<
ic
->
nb_programs
;
j
++
)
{
AVDictionaryEntry
*
name
=
av_dict_get
(
ic
->
programs
[
j
]
->
metadata
,
"name"
,
NULL
,
0
);
av_log
(
NULL
,
AV_LOG_INFO
,
" Program %d %s
\n
"
,
ic
->
programs
[
j
]
->
id
,
name
?
name
->
value
:
""
);
dump_metadata
(
NULL
,
ic
->
programs
[
j
]
->
metadata
,
" "
);
for
(
k
=
0
;
k
<
ic
->
programs
[
j
]
->
nb_stream_indexes
;
k
++
)
{
dump_stream_format
(
ic
,
ic
->
programs
[
j
]
->
stream_index
[
k
],
index
,
is_output
);
printed
[
ic
->
programs
[
j
]
->
stream_index
[
k
]]
=
1
;
}
total
+=
ic
->
programs
[
j
]
->
nb_stream_indexes
;
}
if
(
total
<
ic
->
nb_streams
)
av_log
(
NULL
,
AV_LOG_INFO
,
" No Program
\n
"
);
}
for
(
i
=
0
;
i
<
ic
->
nb_streams
;
i
++
)
if
(
!
printed
[
i
])
dump_stream_format
(
ic
,
i
,
index
,
is_output
);
av_free
(
printed
);
}
libavformat/utils.c
View file @
2dc26561
...
@@ -2769,172 +2769,6 @@ void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
...
@@ -2769,172 +2769,6 @@ void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
}
}
}
}
static
void
print_fps
(
double
d
,
const
char
*
postfix
)
{
uint64_t
v
=
lrintf
(
d
*
100
);
if
(
v
%
100
)
av_log
(
NULL
,
AV_LOG_INFO
,
", %3.2f %s"
,
d
,
postfix
);
else
if
(
v
%
(
100
*
1000
))
av_log
(
NULL
,
AV_LOG_INFO
,
", %1.0f %s"
,
d
,
postfix
);
else
av_log
(
NULL
,
AV_LOG_INFO
,
", %1.0fk %s"
,
d
/
1000
,
postfix
);
}
static
void
dump_metadata
(
void
*
ctx
,
AVDictionary
*
m
,
const
char
*
indent
)
{
if
(
m
&&
!
(
av_dict_count
(
m
)
==
1
&&
av_dict_get
(
m
,
"language"
,
NULL
,
0
)))
{
AVDictionaryEntry
*
tag
=
NULL
;
av_log
(
ctx
,
AV_LOG_INFO
,
"%sMetadata:
\n
"
,
indent
);
while
((
tag
=
av_dict_get
(
m
,
""
,
tag
,
AV_DICT_IGNORE_SUFFIX
)))
if
(
strcmp
(
"language"
,
tag
->
key
))
av_log
(
ctx
,
AV_LOG_INFO
,
"%s %-16s: %s
\n
"
,
indent
,
tag
->
key
,
tag
->
value
);
}
}
/* "user interface" functions */
static
void
dump_stream_format
(
AVFormatContext
*
ic
,
int
i
,
int
index
,
int
is_output
)
{
char
buf
[
256
];
int
flags
=
(
is_output
?
ic
->
oformat
->
flags
:
ic
->
iformat
->
flags
);
AVStream
*
st
=
ic
->
streams
[
i
];
int
g
=
av_gcd
(
st
->
time_base
.
num
,
st
->
time_base
.
den
);
AVDictionaryEntry
*
lang
=
av_dict_get
(
st
->
metadata
,
"language"
,
NULL
,
0
);
avcodec_string
(
buf
,
sizeof
(
buf
),
st
->
codec
,
is_output
);
av_log
(
NULL
,
AV_LOG_INFO
,
" Stream #%d.%d"
,
index
,
i
);
/* the pid is an important information, so we display it */
/* XXX: add a generic system */
if
(
flags
&
AVFMT_SHOW_IDS
)
av_log
(
NULL
,
AV_LOG_INFO
,
"[0x%x]"
,
st
->
id
);
if
(
lang
)
av_log
(
NULL
,
AV_LOG_INFO
,
"(%s)"
,
lang
->
value
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
", %d, %d/%d"
,
st
->
codec_info_nb_frames
,
st
->
time_base
.
num
/
g
,
st
->
time_base
.
den
/
g
);
av_log
(
NULL
,
AV_LOG_INFO
,
": %s"
,
buf
);
if
(
st
->
sample_aspect_ratio
.
num
&&
// default
av_cmp_q
(
st
->
sample_aspect_ratio
,
st
->
codec
->
sample_aspect_ratio
))
{
AVRational
display_aspect_ratio
;
av_reduce
(
&
display_aspect_ratio
.
num
,
&
display_aspect_ratio
.
den
,
st
->
codec
->
width
*
st
->
sample_aspect_ratio
.
num
,
st
->
codec
->
height
*
st
->
sample_aspect_ratio
.
den
,
1024
*
1024
);
av_log
(
NULL
,
AV_LOG_INFO
,
", PAR %d:%d DAR %d:%d"
,
st
->
sample_aspect_ratio
.
num
,
st
->
sample_aspect_ratio
.
den
,
display_aspect_ratio
.
num
,
display_aspect_ratio
.
den
);
}
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
)
{
if
(
st
->
avg_frame_rate
.
den
&&
st
->
avg_frame_rate
.
num
)
print_fps
(
av_q2d
(
st
->
avg_frame_rate
),
"fps"
);
if
(
st
->
time_base
.
den
&&
st
->
time_base
.
num
)
print_fps
(
1
/
av_q2d
(
st
->
time_base
),
"tbn"
);
if
(
st
->
codec
->
time_base
.
den
&&
st
->
codec
->
time_base
.
num
)
print_fps
(
1
/
av_q2d
(
st
->
codec
->
time_base
),
"tbc"
);
}
if
(
st
->
disposition
&
AV_DISPOSITION_DEFAULT
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (default)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_DUB
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (dub)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_ORIGINAL
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (original)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_COMMENT
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (comment)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_LYRICS
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (lyrics)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_KARAOKE
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (karaoke)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_FORCED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (forced)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_HEARING_IMPAIRED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (hearing impaired)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_VISUAL_IMPAIRED
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (visual impaired)"
);
if
(
st
->
disposition
&
AV_DISPOSITION_CLEAN_EFFECTS
)
av_log
(
NULL
,
AV_LOG_INFO
,
" (clean effects)"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
"
);
dump_metadata
(
NULL
,
st
->
metadata
,
" "
);
}
void
av_dump_format
(
AVFormatContext
*
ic
,
int
index
,
const
char
*
url
,
int
is_output
)
{
int
i
;
uint8_t
*
printed
=
ic
->
nb_streams
?
av_mallocz
(
ic
->
nb_streams
)
:
NULL
;
if
(
ic
->
nb_streams
&&
!
printed
)
return
;
av_log
(
NULL
,
AV_LOG_INFO
,
"%s #%d, %s, %s '%s':
\n
"
,
is_output
?
"Output"
:
"Input"
,
index
,
is_output
?
ic
->
oformat
->
name
:
ic
->
iformat
->
name
,
is_output
?
"to"
:
"from"
,
url
);
dump_metadata
(
NULL
,
ic
->
metadata
,
" "
);
if
(
!
is_output
)
{
av_log
(
NULL
,
AV_LOG_INFO
,
" Duration: "
);
if
(
ic
->
duration
!=
AV_NOPTS_VALUE
)
{
int
hours
,
mins
,
secs
,
us
;
secs
=
ic
->
duration
/
AV_TIME_BASE
;
us
=
ic
->
duration
%
AV_TIME_BASE
;
mins
=
secs
/
60
;
secs
%=
60
;
hours
=
mins
/
60
;
mins
%=
60
;
av_log
(
NULL
,
AV_LOG_INFO
,
"%02d:%02d:%02d.%02d"
,
hours
,
mins
,
secs
,
(
100
*
us
)
/
AV_TIME_BASE
);
}
else
{
av_log
(
NULL
,
AV_LOG_INFO
,
"N/A"
);
}
if
(
ic
->
start_time
!=
AV_NOPTS_VALUE
)
{
int
secs
,
us
;
av_log
(
NULL
,
AV_LOG_INFO
,
", start: "
);
secs
=
ic
->
start_time
/
AV_TIME_BASE
;
us
=
abs
(
ic
->
start_time
%
AV_TIME_BASE
);
av_log
(
NULL
,
AV_LOG_INFO
,
"%d.%06d"
,
secs
,
(
int
)
av_rescale
(
us
,
1000000
,
AV_TIME_BASE
));
}
av_log
(
NULL
,
AV_LOG_INFO
,
", bitrate: "
);
if
(
ic
->
bit_rate
)
av_log
(
NULL
,
AV_LOG_INFO
,
"%d kb/s"
,
ic
->
bit_rate
/
1000
);
else
av_log
(
NULL
,
AV_LOG_INFO
,
"N/A"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
"
);
}
for
(
i
=
0
;
i
<
ic
->
nb_chapters
;
i
++
)
{
AVChapter
*
ch
=
ic
->
chapters
[
i
];
av_log
(
NULL
,
AV_LOG_INFO
,
" Chapter #%d.%d: "
,
index
,
i
);
av_log
(
NULL
,
AV_LOG_INFO
,
"start %f, "
,
ch
->
start
*
av_q2d
(
ch
->
time_base
));
av_log
(
NULL
,
AV_LOG_INFO
,
"end %f
\n
"
,
ch
->
end
*
av_q2d
(
ch
->
time_base
));
dump_metadata
(
NULL
,
ch
->
metadata
,
" "
);
}
if
(
ic
->
nb_programs
)
{
int
j
,
k
,
total
=
0
;
for
(
j
=
0
;
j
<
ic
->
nb_programs
;
j
++
)
{
AVDictionaryEntry
*
name
=
av_dict_get
(
ic
->
programs
[
j
]
->
metadata
,
"name"
,
NULL
,
0
);
av_log
(
NULL
,
AV_LOG_INFO
,
" Program %d %s
\n
"
,
ic
->
programs
[
j
]
->
id
,
name
?
name
->
value
:
""
);
dump_metadata
(
NULL
,
ic
->
programs
[
j
]
->
metadata
,
" "
);
for
(
k
=
0
;
k
<
ic
->
programs
[
j
]
->
nb_stream_indexes
;
k
++
)
{
dump_stream_format
(
ic
,
ic
->
programs
[
j
]
->
stream_index
[
k
],
index
,
is_output
);
printed
[
ic
->
programs
[
j
]
->
stream_index
[
k
]]
=
1
;
}
total
+=
ic
->
programs
[
j
]
->
nb_stream_indexes
;
}
if
(
total
<
ic
->
nb_streams
)
av_log
(
NULL
,
AV_LOG_INFO
,
" No Program
\n
"
);
}
for
(
i
=
0
;
i
<
ic
->
nb_streams
;
i
++
)
if
(
!
printed
[
i
])
dump_stream_format
(
ic
,
i
,
index
,
is_output
);
av_free
(
printed
);
}
uint64_t
ff_ntp_time
(
void
)
uint64_t
ff_ntp_time
(
void
)
{
{
return
(
av_gettime
()
/
1000
)
*
1000
+
NTP_OFFSET_US
;
return
(
av_gettime
()
/
1000
)
*
1000
+
NTP_OFFSET_US
;
...
@@ -2993,86 +2827,6 @@ fail:
...
@@ -2993,86 +2827,6 @@ fail:
return
-
1
;
return
-
1
;
}
}
#define HEXDUMP_PRINT(...) \
do { \
if (!f) \
av_log(avcl, level, __VA_ARGS__); \
else \
fprintf(f, __VA_ARGS__); \
} while (0)
static
void
hex_dump_internal
(
void
*
avcl
,
FILE
*
f
,
int
level
,
const
uint8_t
*
buf
,
int
size
)
{
int
len
,
i
,
j
,
c
;
for
(
i
=
0
;
i
<
size
;
i
+=
16
)
{
len
=
size
-
i
;
if
(
len
>
16
)
len
=
16
;
HEXDUMP_PRINT
(
"%08x "
,
i
);
for
(
j
=
0
;
j
<
16
;
j
++
)
{
if
(
j
<
len
)
HEXDUMP_PRINT
(
" %02x"
,
buf
[
i
+
j
]);
else
HEXDUMP_PRINT
(
" "
);
}
HEXDUMP_PRINT
(
" "
);
for
(
j
=
0
;
j
<
len
;
j
++
)
{
c
=
buf
[
i
+
j
];
if
(
c
<
' '
||
c
>
'~'
)
c
=
'.'
;
HEXDUMP_PRINT
(
"%c"
,
c
);
}
HEXDUMP_PRINT
(
"
\n
"
);
}
}
void
av_hex_dump
(
FILE
*
f
,
const
uint8_t
*
buf
,
int
size
)
{
hex_dump_internal
(
NULL
,
f
,
0
,
buf
,
size
);
}
void
av_hex_dump_log
(
void
*
avcl
,
int
level
,
const
uint8_t
*
buf
,
int
size
)
{
hex_dump_internal
(
avcl
,
NULL
,
level
,
buf
,
size
);
}
static
void
pkt_dump_internal
(
void
*
avcl
,
FILE
*
f
,
int
level
,
AVPacket
*
pkt
,
int
dump_payload
,
AVRational
time_base
)
{
HEXDUMP_PRINT
(
"stream #%d:
\n
"
,
pkt
->
stream_index
);
HEXDUMP_PRINT
(
" keyframe=%d
\n
"
,
(
pkt
->
flags
&
AV_PKT_FLAG_KEY
)
!=
0
);
HEXDUMP_PRINT
(
" duration=%0.3f
\n
"
,
pkt
->
duration
*
av_q2d
(
time_base
));
/* DTS is _always_ valid after av_read_frame() */
HEXDUMP_PRINT
(
" dts="
);
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
HEXDUMP_PRINT
(
"N/A"
);
else
HEXDUMP_PRINT
(
"%0.3f"
,
pkt
->
dts
*
av_q2d
(
time_base
));
/* PTS may not be known if B-frames are present. */
HEXDUMP_PRINT
(
" pts="
);
if
(
pkt
->
pts
==
AV_NOPTS_VALUE
)
HEXDUMP_PRINT
(
"N/A"
);
else
HEXDUMP_PRINT
(
"%0.3f"
,
pkt
->
pts
*
av_q2d
(
time_base
));
HEXDUMP_PRINT
(
"
\n
"
);
HEXDUMP_PRINT
(
" size=%d
\n
"
,
pkt
->
size
);
if
(
dump_payload
)
av_hex_dump
(
f
,
pkt
->
data
,
pkt
->
size
);
}
void
av_pkt_dump2
(
FILE
*
f
,
AVPacket
*
pkt
,
int
dump_payload
,
AVStream
*
st
)
{
pkt_dump_internal
(
NULL
,
f
,
0
,
pkt
,
dump_payload
,
st
->
time_base
);
}
void
av_pkt_dump_log2
(
void
*
avcl
,
int
level
,
AVPacket
*
pkt
,
int
dump_payload
,
AVStream
*
st
)
{
pkt_dump_internal
(
avcl
,
NULL
,
level
,
pkt
,
dump_payload
,
st
->
time_base
);
}
void
av_url_split
(
char
*
proto
,
int
proto_size
,
void
av_url_split
(
char
*
proto
,
int
proto_size
,
char
*
authorization
,
int
authorization_size
,
char
*
authorization
,
int
authorization_size
,
char
*
hostname
,
int
hostname_size
,
char
*
hostname
,
int
hostname_size
,
...
...
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