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
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_init_packet
(&pkt);
37
38
av_register_all
();
39
40
iformat =
av_find_input_format
(
"image2"
);
41
if
((ret =
avformat_open_input
(&format_ctx, filename, iformat,
NULL
)) < 0) {
42
av_log
(log_ctx,
AV_LOG_ERROR
,
43
"Failed to open input file '%s'\n"
, filename);
44
return
ret
;
45
}
46
47
if
((ret =
avformat_find_stream_info
(format_ctx,
NULL
)) < 0) {
48
av_log
(log_ctx,
AV_LOG_ERROR
,
"Find stream info failed\n"
);
49
return
ret
;
50
}
51
52
codec_ctx = format_ctx->
streams
[0]->
codec
;
53
codec =
avcodec_find_decoder
(codec_ctx->
codec_id
);
54
if
(!codec) {
55
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to find codec\n"
);
56
ret =
AVERROR
(EINVAL);
57
goto
end
;
58
}
59
60
if
((ret =
avcodec_open2
(codec_ctx, codec,
NULL
)) < 0) {
61
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to open codec\n"
);
62
goto
end
;
63
}
64
65
if
(!(frame =
av_frame_alloc
()) ) {
66
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to alloc frame\n"
);
67
ret =
AVERROR
(ENOMEM);
68
goto
end
;
69
}
70
71
ret =
av_read_frame
(format_ctx, &pkt);
72
if
(ret < 0) {
73
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to read frame from file\n"
);
74
goto
end
;
75
}
76
77
ret =
avcodec_decode_video2
(codec_ctx, frame, &frame_decoded, &pkt);
78
if
(ret < 0 || !frame_decoded) {
79
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to decode image from file\n"
);
80
if
(ret >= 0)
81
ret = -1;
82
goto
end
;
83
}
84
85
*w = frame->
width
;
86
*h = frame->
height
;
87
*pix_fmt = frame->
format
;
88
89
if
((ret =
av_image_alloc
(data, linesize, *w, *h, *pix_fmt, 16)) < 0)
90
goto
end
;
91
ret = 0;
92
93
av_image_copy
(data, linesize, (
const
uint8_t
**)frame->
data
, frame->
linesize
, *pix_fmt, *w, *h);
94
95
end
:
96
av_free_packet
(&pkt);
97
avcodec_close
(codec_ctx);
98
avformat_close_input
(&format_ctx);
99
av_frame_free
(&frame);
100
101
if
(ret < 0)
102
av_log
(log_ctx,
AV_LOG_ERROR
,
"Error loading image file '%s'\n"
, filename);
103
return
ret
;
104
}
Generated on Sun Mar 8 2015 02:35:06 for FFmpeg by
1.8.2