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
2a7f885f
Commit
2a7f885f
authored
Apr 04, 2013
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: add libquvi demuxer.
parent
89388a95
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
166 additions
and
1 deletion
+166
-1
Changelog
Changelog
+1
-0
configure
configure
+4
-0
demuxers.texi
doc/demuxers.texi
+12
-0
Makefile
libavformat/Makefile
+1
-0
allformats.c
libavformat/allformats.c
+1
-0
libquvi.c
libavformat/libquvi.c
+146
-0
version.h
libavformat/version.h
+1
-1
No files found.
Changelog
View file @
2a7f885f
...
...
@@ -17,6 +17,7 @@ version <next>:
- OpenCL support
- audio phaser filter
- separatefields filter
- libquvi demuxer
version 1.2:
...
...
configure
View file @
2a7f885f
...
...
@@ -215,6 +215,7 @@ External library support:
--enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
--enable-libopus enable Opus decoding via libopus [no]
--enable-libpulse enable Pulseaudio input via libpulse [no]
--enable-libquvi enable quvi input via libquvi [no]
--enable-librtmp enable RTMP[E] support via librtmp [no]
--enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
--enable-libsoxr enable Include libsoxr resampling [no]
...
...
@@ -1168,6 +1169,7 @@ EXTERNAL_LIBRARY_LIST="
libopenjpeg
libopus
libpulse
libquvi
librtmp
libschroedinger
libsoxr
...
...
@@ -1958,6 +1960,7 @@ libopenjpeg_encoder_deps="libopenjpeg"
libopus_decoder_deps
=
"libopus"
libopus_encoder_deps
=
"libopus"
libopus_encoder_select
=
"audio_frame_queue"
libquvi_demuxer_deps
=
"libquvi"
libschroedinger_decoder_deps
=
"libschroedinger"
libschroedinger_encoder_deps
=
"libschroedinger"
libspeex_decoder_deps
=
"libspeex"
...
...
@@ -3978,6 +3981,7 @@ enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpe
die
"ERROR: libopenjpeg not found"
;
}
enabled libopus
&&
require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
enabled libpulse
&&
require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
enabled libquvi
&&
require_pkg_config libquvi quvi/quvi.h quvi_init
enabled librtmp
&&
require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger
&&
require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
enabled libsoxr
&&
require libsoxr soxr.h soxr_create
-lsoxr
...
...
doc/demuxers.texi
View file @
2a7f885f
...
...
@@ -103,6 +103,18 @@ probed and 0 otherwise.
@end table
@section libquvi
Play media from Internet services using the quvi project.
The demuxer accepts a @option{format} option to request a specific quality. It
is by default set to @var{best}.
See @url{http://quvi.sourceforge.net/} for more information.
FFmpeg needs to be built with @code{--enable-libquvi} for this demuxer to be
enabled.
@section image2
Image file demuxer.
...
...
libavformat/Makefile
View file @
2a7f885f
...
...
@@ -405,6 +405,7 @@ OBJS-$(CONFIG_YUV4MPEGPIPE_DEMUXER) += yuv4mpeg.o
OBJS-$(CONFIG_LIBMODPLUG_DEMUXER)
+=
libmodplug.o
OBJS-$(CONFIG_LIBNUT_DEMUXER)
+=
libnut.o
OBJS-$(CONFIG_LIBNUT_MUXER)
+=
libnut.o
OBJS-$(CONFIG_LIBQUVI_DEMUXER)
+=
libquvi.o
OBJS-$(CONFIG_LIBRTMP)
+=
librtmp.o
# protocols I/O
...
...
libavformat/allformats.c
View file @
2a7f885f
...
...
@@ -333,6 +333,7 @@ void av_register_all(void)
/* external libraries */
REGISTER_DEMUXER
(
LIBMODPLUG
,
libmodplug
);
REGISTER_MUXDEMUX
(
LIBNUT
,
libnut
);
REGISTER_DEMUXER
(
LIBQUVI
,
libquvi
);
REGISTER_PROTOCOL
(
LIBRTMP
,
librtmp
);
REGISTER_PROTOCOL
(
LIBRTMPE
,
librtmpe
);
REGISTER_PROTOCOL
(
LIBRTMPS
,
librtmps
);
...
...
libavformat/libquvi.c
0 → 100644
View file @
2a7f885f
/*
* Copyright (c) 2013 Clément Bœsch
*
* This file is part of FFmpeg.
*
* FFmpeg 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.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <quvi/quvi.h>
#include "libavformat/avformat.h"
#include "libavformat/internal.h"
#include "libavutil/opt.h"
typedef
struct
{
const
AVClass
*
class
;
char
*
format
;
AVFormatContext
*
fmtctx
;
}
LibQuviContext
;
#define OFFSET(x) offsetof(LibQuviContext, x)
#define FLAGS AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
libquvi_options
[]
=
{
{
"format"
,
"request specific format"
,
OFFSET
(
format
),
AV_OPT_TYPE_STRING
,
{.
str
=
"best"
},
.
flags
=
FLAGS
},
{
NULL
}
};
static
const
AVClass
libquvi_context_class
=
{
.
class_name
=
"libquvi"
,
.
item_name
=
av_default_item_name
,
.
option
=
libquvi_options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
int
libquvi_close
(
AVFormatContext
*
s
)
{
LibQuviContext
*
qc
=
s
->
priv_data
;
if
(
qc
->
fmtctx
)
avformat_close_input
(
&
qc
->
fmtctx
);
return
0
;
}
static
int
libquvi_read_header
(
AVFormatContext
*
s
)
{
int
i
,
ret
;
quvi_t
q
;
quvi_media_t
m
;
QUVIcode
rc
;
LibQuviContext
*
qc
=
s
->
priv_data
;
char
*
media_url
,
*
pagetitle
;
rc
=
quvi_init
(
&
q
);
if
(
rc
!=
QUVI_OK
)
goto
quvi_fail
;
quvi_setopt
(
q
,
QUVIOPT_FORMAT
,
qc
->
format
);
rc
=
quvi_parse
(
q
,
s
->
filename
,
&
m
);
if
(
rc
!=
QUVI_OK
)
goto
quvi_fail
;
rc
=
quvi_getprop
(
m
,
QUVIPROP_MEDIAURL
,
&
media_url
);
if
(
rc
!=
QUVI_OK
)
goto
quvi_fail
;
ret
=
avformat_open_input
(
&
qc
->
fmtctx
,
media_url
,
NULL
,
NULL
);
if
(
ret
<
0
)
goto
end
;
rc
=
quvi_getprop
(
m
,
QUVIPROP_PAGETITLE
,
&
pagetitle
);
if
(
rc
==
QUVI_OK
)
av_dict_set
(
&
s
->
metadata
,
"title"
,
pagetitle
,
0
);
for
(
i
=
0
;
i
<
qc
->
fmtctx
->
nb_streams
;
i
++
)
{
AVStream
*
st
=
avformat_new_stream
(
s
,
NULL
);
AVStream
*
ist
=
qc
->
fmtctx
->
streams
[
i
];
if
(
!
st
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
end
;
}
avpriv_set_pts_info
(
st
,
ist
->
pts_wrap_bits
,
ist
->
time_base
.
num
,
ist
->
time_base
.
den
);
avcodec_copy_context
(
st
->
codec
,
qc
->
fmtctx
->
streams
[
i
]
->
codec
);
}
return
0
;
quvi_fail:
av_log
(
s
,
AV_LOG_ERROR
,
"%s
\n
"
,
quvi_strerror
(
&
q
,
rc
));
ret
=
rc
;
end:
quvi_parse_close
(
&
m
);
quvi_close
(
&
q
);
return
ret
;
}
static
int
libquvi_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
LibQuviContext
*
qc
=
s
->
priv_data
;
return
av_read_frame
(
qc
->
fmtctx
,
pkt
);
}
static
int
libquvi_read_seek
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
timestamp
,
int
flags
)
{
LibQuviContext
*
qc
=
s
->
priv_data
;
return
av_seek_frame
(
qc
->
fmtctx
,
stream_index
,
timestamp
,
flags
);
}
static
int
libquvi_probe
(
AVProbeData
*
p
)
{
int
score
;
quvi_t
q
;
QUVIcode
rc
;
rc
=
quvi_init
(
&
q
);
if
(
rc
!=
QUVI_OK
)
return
AVERROR
(
ENOMEM
);
score
=
quvi_supported
(
q
,
(
char
*
)
p
->
filename
)
==
QUVI_OK
?
AVPROBE_SCORE_MAX
/
2
:
0
;
quvi_close
(
&
q
);
return
score
;
}
AVInputFormat
ff_libquvi_demuxer
=
{
.
name
=
"libquvi"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"libquvi demuxer"
),
.
priv_data_size
=
sizeof
(
LibQuviContext
),
.
read_probe
=
libquvi_probe
,
.
read_header
=
libquvi_read_header
,
.
read_packet
=
libquvi_read_packet
,
.
read_close
=
libquvi_close
,
.
read_seek
=
libquvi_read_seek
,
.
priv_class
=
&
libquvi_context_class
,
.
flags
=
AVFMT_NOFILE
,
};
libavformat/version.h
View file @
2a7f885f
...
...
@@ -30,7 +30,7 @@
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
#define LIBAVFORMAT_VERSION_MINOR
1
#define LIBAVFORMAT_VERSION_MINOR
2
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
...
...
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