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
codec_ctx = format_ctx->
streams
[0]->
codec
;
48
codec =
avcodec_find_decoder
(codec_ctx->
codec_id
);
49
if
(!codec) {
50
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to find codec\n"
);
51
ret =
AVERROR
(EINVAL);
52
goto
end
;
53
}
54
55
if
((ret =
avcodec_open2
(codec_ctx, codec, NULL)) < 0) {
56
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to open codec\n"
);
57
goto
end
;
58
}
59
60
if
(!(frame =
avcodec_alloc_frame
()) ) {
61
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to alloc frame\n"
);
62
ret =
AVERROR
(ENOMEM);
63
goto
end
;
64
}
65
66
ret =
av_read_frame
(format_ctx, &pkt);
67
if
(ret < 0) {
68
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to read frame from file\n"
);
69
goto
end
;
70
}
71
72
ret =
avcodec_decode_video2
(codec_ctx, frame, &frame_decoded, &pkt);
73
if
(ret < 0 || !frame_decoded) {
74
av_log
(log_ctx,
AV_LOG_ERROR
,
"Failed to decode image from file\n"
);
75
goto
end
;
76
}
77
ret = 0;
78
79
*w = frame->
width
;
80
*h = frame->
height
;
81
*pix_fmt = frame->
format
;
82
83
if
((ret =
av_image_alloc
(data, linesize, *w, *h, *pix_fmt, 16)) < 0)
84
goto
end
;
85
ret = 0;
86
87
av_image_copy
(data, linesize, (
const
uint8_t
**)frame->
data
, frame->
linesize
, *pix_fmt, *w, *h);
88
89
end
:
90
av_free_packet
(&pkt);
91
avcodec_close
(codec_ctx);
92
avformat_close_input
(&format_ctx);
93
av_freep
(&frame);
94
95
if
(ret < 0)
96
av_log
(log_ctx,
AV_LOG_ERROR
,
"Error loading image file '%s'\n"
, filename);
97
return
ret
;
98
}
Generated on Sat Jan 25 2014 19:52:00 for FFmpeg by
1.8.2