FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
md5proto.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010 Mans Rullgard
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <stdio.h>
22
#include "
libavutil/avstring.h
"
23
#include "
libavutil/md5.h
"
24
#include "
libavutil/mem.h
"
25
#include "
libavutil/error.h
"
26
#include "
avformat.h
"
27
#include "
avio.h
"
28
#include "
url.h
"
29
30
struct
MD5Context
{
31
struct
AVMD5
*
md5
;
32
};
33
34
static
int
md5_open
(
URLContext
*h,
const
char
*filename,
int
flags
)
35
{
36
struct
MD5Context
*
c
= h->
priv_data
;
37
38
if
(!(flags &
AVIO_FLAG_WRITE
))
39
return
AVERROR
(EINVAL);
40
41
c->
md5
=
av_md5_alloc
();
42
if
(!c->
md5
)
43
return
AVERROR
(ENOMEM);
44
av_md5_init
(c->
md5
);
45
46
return
0;
47
}
48
49
static
int
md5_write
(
URLContext
*h,
const
unsigned
char
*
buf
,
int
size
)
50
{
51
struct
MD5Context
*
c
= h->
priv_data
;
52
av_md5_update
(c->
md5
, buf, size);
53
return
size
;
54
}
55
56
static
int
md5_close
(
URLContext
*h)
57
{
58
struct
MD5Context
*
c
= h->
priv_data
;
59
const
char
*filename = h->
filename
;
60
uint8_t
md5
[16],
buf
[64];
61
URLContext
*
out
;
62
int
i, err = 0;
63
64
av_md5_final
(c->
md5
, md5);
65
for
(i = 0; i <
sizeof
(
md5
); i++)
66
snprintf
(buf + i*2, 3,
"%02x"
, md5[i]);
67
buf[i*2] =
'\n'
;
68
69
av_strstart
(filename,
"md5:"
, &filename);
70
71
if
(*filename) {
72
err =
ffurl_open
(&out, filename,
AVIO_FLAG_WRITE
,
73
&h->
interrupt_callback
, NULL);
74
if
(err)
75
return
err;
76
err =
ffurl_write
(out, buf, i*2+1);
77
ffurl_close
(out);
78
}
else
{
79
if
(fwrite(buf, 1, i*2+1, stdout) < i*2+1)
80
err =
AVERROR
(errno);
81
}
82
83
av_freep
(&c->
md5
);
84
85
return
err;
86
}
87
88
89
URLProtocol
ff_md5_protocol
= {
90
.
name
=
"md5"
,
91
.url_open =
md5_open
,
92
.url_write =
md5_write
,
93
.url_close =
md5_close
,
94
.priv_data_size =
sizeof
(
struct
MD5Context
),
95
};
Generated on Sat Jan 25 2014 19:52:03 for FFmpeg by
1.8.2