FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavfilter
lavfutils.c
Go to the documentation of this file.
1
/*
2
* Copyright 2012 Stefano Sabatini <stefasab gmail com>
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 "
libavutil/imgutils.h
"
22
#include "
lavfutils.h
"
23
24
int
ff_load_image
(
uint8_t
*
data
[4],
int
linesize[4],
25
int
*w,
int
*h,
enum
AVPixelFormat
*
pix_fmt
,
26
const
char
*filename,
void
*log_ctx)
27
{
28
AVInputFormat
*
iformat
=
NULL
;
29
AVFormatContext
*format_ctx =
NULL
;
30
AVCodec
*codec;
31
AVCodecContext
*codec_ctx;
32
AVFrame
*
frame
;
33
int
frame_decoded, ret = 0;
34
AVPacket
pkt
;
35
36
av_register_all
();
37
38
iformat =
av_find_input_format
(
"image2"
);
39
if
((ret =
avformat_open_input
(&format_ctx, filename, iformat,
NULL
)) < 0) {
40
av_log
(log_ctx,
AV_LOG_ERROR
,
41
"Failed to open input file '%s'\n"
, filename);
42
return
ret;
43
}
44
45
codec_ctx = format_ctx->
streams
[0]->
codec
;
46
codec =
avcodec_find_decoder
(codec_ctx->
codec_id
);
47
if
(!codec) {
48
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to find codec\n"
);
49
ret =
AVERROR
(EINVAL);
50
goto
end
;
51
}
52
53
if
((ret =
avcodec_open2
(codec_ctx, codec,
NULL
)) < 0) {
54
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to open codec\n"
);
55
goto
end
;
56
}
57
58
if
(!(frame =
avcodec_alloc_frame
()) ) {
59
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to alloc frame\n"
);
60
ret =
AVERROR
(ENOMEM);
61
goto
end
;
62
}
63
64
ret =
av_read_frame
(format_ctx, &pkt);
65
if
(ret < 0) {
66
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to read frame from file\n"
);
67
goto
end
;
68
}
69
70
ret =
avcodec_decode_video2
(codec_ctx, frame, &frame_decoded, &pkt);
71
if
(ret < 0 || !frame_decoded) {
72
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to decode image from file\n"
);
73
goto
end
;
74
}
75
ret = 0;
76
77
*w = frame->
width
;
78
*h = frame->
height
;
79
*pix_fmt = frame->
format
;
80
81
if
((ret =
av_image_alloc
(data, linesize, *w, *h, *pix_fmt, 16)) < 0)
82
goto
end
;
83
ret = 0;
84
85
av_image_copy
(data, linesize, (
const
uint8_t
**)frame->
data
, frame->
linesize
, *pix_fmt, *w, *h);
86
87
end
:
88
avcodec_close
(codec_ctx);
89
avformat_close_input
(&format_ctx);
90
av_freep
(&frame);
91
92
if
(ret < 0)
93
av_log
(log_ctx,
AV_LOG_ERROR
,
"Error loading image file '%s'\n"
, filename);
94
return
ret;
95
}
Generated on Sat May 25 2013 03:58:44 for FFmpeg by
1.8.2