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
ecda1d3c
Commit
ecda1d3c
authored
Dec 26, 2012
by
Nicolas George
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: add data: URI scheme.
parent
ba1cbf40
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
132 additions
and
2 deletions
+132
-2
Changelog
Changelog
+1
-0
protocols.texi
doc/protocols.texi
+9
-0
Makefile
libavformat/Makefile
+1
-0
allformats.c
libavformat/allformats.c
+1
-0
data_uri.c
libavformat/data_uri.c
+118
-0
version.h
libavformat/version.h
+2
-2
No files found.
Changelog
View file @
ecda1d3c
...
@@ -53,6 +53,7 @@ version <next>:
...
@@ -53,6 +53,7 @@ version <next>:
- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
- Sony Wave64 muxer
- Sony Wave64 muxer
- adobe and limelight publisher authentication in RTMP
- adobe and limelight publisher authentication in RTMP
- data: URI scheme
version 1.0:
version 1.0:
...
...
doc/protocols.texi
View file @
ecda1d3c
...
@@ -75,6 +75,15 @@ ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
...
@@ -75,6 +75,15 @@ ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
Note that you may need to escape the character "|" which is special for
Note that you may need to escape the character "|" which is special for
many shells.
many shells.
@section data
Data in-line in the URI. See @url{http://en.wikipedia.org/wiki/Data_URI_scheme}.
For example, to convert a GIF file given inline with @command{ffmpeg}:
@example
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
@end example
@section file
@section file
File access protocol.
File access protocol.
...
...
libavformat/Makefile
View file @
ecda1d3c
...
@@ -408,6 +408,7 @@ OBJS-$(CONFIG_BLURAY_PROTOCOL) += bluray.o
...
@@ -408,6 +408,7 @@ OBJS-$(CONFIG_BLURAY_PROTOCOL) += bluray.o
OBJS-$(CONFIG_CACHE_PROTOCOL)
+=
cache.o
OBJS-$(CONFIG_CACHE_PROTOCOL)
+=
cache.o
OBJS-$(CONFIG_CONCAT_PROTOCOL)
+=
concat.o
OBJS-$(CONFIG_CONCAT_PROTOCOL)
+=
concat.o
OBJS-$(CONFIG_CRYPTO_PROTOCOL)
+=
crypto.o
OBJS-$(CONFIG_CRYPTO_PROTOCOL)
+=
crypto.o
OBJS-$(CONFIG_DATA_PROTOCOL)
+=
data_uri.o
OBJS-$(CONFIG_FFRTMPCRYPT_PROTOCOL)
+=
rtmpcrypt.o
rtmpdh.o
OBJS-$(CONFIG_FFRTMPCRYPT_PROTOCOL)
+=
rtmpcrypt.o
rtmpdh.o
OBJS-$(CONFIG_FFRTMPHTTP_PROTOCOL)
+=
rtmphttp.o
OBJS-$(CONFIG_FFRTMPHTTP_PROTOCOL)
+=
rtmphttp.o
OBJS-$(CONFIG_FILE_PROTOCOL)
+=
file.o
OBJS-$(CONFIG_FILE_PROTOCOL)
+=
file.o
...
...
libavformat/allformats.c
View file @
ecda1d3c
...
@@ -306,6 +306,7 @@ void av_register_all(void)
...
@@ -306,6 +306,7 @@ void av_register_all(void)
REGISTER_PROTOCOL
(
CACHE
,
cache
);
REGISTER_PROTOCOL
(
CACHE
,
cache
);
REGISTER_PROTOCOL
(
CONCAT
,
concat
);
REGISTER_PROTOCOL
(
CONCAT
,
concat
);
REGISTER_PROTOCOL
(
CRYPTO
,
crypto
);
REGISTER_PROTOCOL
(
CRYPTO
,
crypto
);
REGISTER_PROTOCOL
(
DATA
,
data
);
REGISTER_PROTOCOL
(
FFRTMPCRYPT
,
ffrtmpcrypt
);
REGISTER_PROTOCOL
(
FFRTMPCRYPT
,
ffrtmpcrypt
);
REGISTER_PROTOCOL
(
FFRTMPHTTP
,
ffrtmphttp
);
REGISTER_PROTOCOL
(
FFRTMPHTTP
,
ffrtmphttp
);
REGISTER_PROTOCOL
(
FILE
,
file
);
REGISTER_PROTOCOL
(
FILE
,
file
);
...
...
libavformat/data_uri.c
0 → 100644
View file @
ecda1d3c
/*
* Copyright (c) 2012 Nicolas George
*
* 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 <string.h>
#include "libavutil/avstring.h"
#include "libavutil/base64.h"
#include "url.h"
typedef
struct
{
const
uint8_t
*
data
;
void
*
tofree
;
size_t
size
;
size_t
pos
;
}
DataContext
;
static
av_cold
int
data_open
(
URLContext
*
h
,
const
char
*
uri
,
int
flags
)
{
DataContext
*
dc
=
h
->
priv_data
;
const
char
*
data
,
*
opt
,
*
next
;
char
*
ddata
;
int
ret
,
base64
=
0
;
size_t
in_size
;
/* data:content/type[;base64],payload */
av_strstart
(
uri
,
"data:"
,
&
uri
);
data
=
strchr
(
uri
,
','
);
if
(
!
data
)
{
av_log
(
h
,
AV_LOG_ERROR
,
"No ',' delimiter in URI
\n
"
);
return
AVERROR
(
EINVAL
);
}
opt
=
uri
;
while
(
opt
<
data
)
{
next
=
av_x_if_null
(
memchr
(
opt
,
';'
,
data
-
opt
),
data
);
if
(
opt
==
uri
)
{
if
(
!
memchr
(
opt
,
'/'
,
next
-
opt
))
{
/* basic validity check */
av_log
(
h
,
AV_LOG_ERROR
,
"Invalid content-type '%.*s'
\n
"
,
(
int
)(
next
-
opt
),
opt
);
return
AVERROR
(
EINVAL
);
}
av_log
(
h
,
AV_LOG_VERBOSE
,
"Content-type: %.*s
\n
"
,
(
int
)(
next
-
opt
),
opt
);
}
else
{
if
(
!
av_strncasecmp
(
opt
,
"base64"
,
next
-
opt
))
{
base64
=
1
;
}
else
{
av_log
(
h
,
AV_LOG_VERBOSE
,
"Ignoring option '%.*s'
\n
"
,
(
int
)(
next
-
opt
),
opt
);
}
}
opt
=
next
+
1
;
}
data
++
;
in_size
=
strlen
(
data
);
if
(
base64
)
{
size_t
out_size
=
3
*
(
in_size
/
4
)
+
1
;
if
(
out_size
>
INT_MAX
||
!
(
ddata
=
av_malloc
(
out_size
)))
return
AVERROR
(
ENOMEM
);
if
((
ret
=
av_base64_decode
(
ddata
,
data
,
out_size
))
<
0
)
{
av_free
(
ddata
);
av_log
(
h
,
AV_LOG_ERROR
,
"Invalid base64 in URI
\n
"
);
return
ret
;
}
dc
->
data
=
dc
->
tofree
=
ddata
;
dc
->
size
=
ret
;
}
else
{
dc
->
data
=
data
;
dc
->
size
=
in_size
;
}
return
0
;
}
static
av_cold
int
data_close
(
URLContext
*
h
)
{
DataContext
*
dc
=
h
->
priv_data
;
av_freep
(
&
dc
->
tofree
);
return
0
;
}
static
int
data_read
(
URLContext
*
h
,
unsigned
char
*
buf
,
int
size
)
{
DataContext
*
dc
=
h
->
priv_data
;
if
(
dc
->
pos
>=
dc
->
size
)
return
AVERROR_EOF
;
size
=
FFMIN
(
size
,
dc
->
size
-
dc
->
pos
);
memcpy
(
buf
,
dc
->
data
+
dc
->
pos
,
size
);
dc
->
pos
+=
size
;
return
size
;
}
URLProtocol
ff_data_protocol
=
{
.
name
=
"data"
,
.
url_open
=
data_open
,
.
url_close
=
data_close
,
.
url_read
=
data_read
,
.
priv_data_size
=
sizeof
(
DataContext
),
};
libavformat/version.h
View file @
ecda1d3c
...
@@ -30,8 +30,8 @@
...
@@ -30,8 +30,8 @@
#include "libavutil/avutil.h"
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 54
#define LIBAVFORMAT_VERSION_MAJOR 54
#define LIBAVFORMAT_VERSION_MINOR 5
8
#define LIBAVFORMAT_VERSION_MINOR 5
9
#define LIBAVFORMAT_VERSION_MICRO 10
2
#define LIBAVFORMAT_VERSION_MICRO 10
0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
LIBAVFORMAT_VERSION_MINOR, \
...
...
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