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
libavcodec
v308dec.c
Go to the documentation of this file.
1
/*
2
* v308 decoder
3
* Copyright (c) 2011 Carl Eugen Hoyos
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
avcodec.h
"
23
#include "
internal.h
"
24
25
static
av_cold
int
v308_decode_init
(
AVCodecContext
*avctx)
26
{
27
avctx->
pix_fmt
=
AV_PIX_FMT_YUV444P
;
28
29
if
(avctx->
width
& 1)
30
av_log
(avctx,
AV_LOG_WARNING
,
"v308 requires width to be even.\n"
);
31
32
return
0;
33
}
34
35
static
int
v308_decode_frame
(
AVCodecContext
*avctx,
void
*
data
,
36
int
*got_frame,
AVPacket
*avpkt)
37
{
38
AVFrame
*pic =
data
;
39
const
uint8_t
*
src
= avpkt->
data
;
40
uint8_t
*
y
, *
u
, *
v
;
41
int
i, j,
ret
;
42
43
if
(avpkt->
size
< 3 * avctx->
height
* avctx->
width
) {
44
av_log
(avctx,
AV_LOG_ERROR
,
"Insufficient input data.\n"
);
45
return
AVERROR
(EINVAL);
46
}
47
48
if
((ret =
ff_get_buffer
(avctx, pic, 0)) < 0)
49
return
ret
;
50
51
pic->
key_frame
= 1;
52
pic->
pict_type
=
AV_PICTURE_TYPE_I
;
53
54
y = pic->
data
[0];
55
u = pic->
data
[1];
56
v = pic->
data
[2];
57
58
for
(i = 0; i < avctx->
height
; i++) {
59
for
(j = 0; j < avctx->
width
; j++) {
60
v[j] = *src++;
61
y[j] = *src++;
62
u[j] = *src++;
63
}
64
65
y += pic->
linesize
[0];
66
u += pic->
linesize
[1];
67
v += pic->
linesize
[2];
68
}
69
70
*got_frame = 1;
71
72
return
avpkt->
size
;
73
}
74
75
AVCodec
ff_v308_decoder
= {
76
.
name
=
"v308"
,
77
.long_name =
NULL_IF_CONFIG_SMALL
(
"Uncompressed packed 4:4:4"
),
78
.type =
AVMEDIA_TYPE_VIDEO
,
79
.id =
AV_CODEC_ID_V308
,
80
.init =
v308_decode_init
,
81
.decode =
v308_decode_frame
,
82
.capabilities =
CODEC_CAP_DR1
,
83
};
Generated on Sun Mar 23 2014 23:50:04 for FFmpeg by
1.8.2