Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
51a5ddfa
Commit
51a5ddfa
authored
Jul 19, 2012
by
Luca Barbato
Committed by
Diego Biurrun
Jul 22, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libopenjpeg: K&R formatting cosmetics
parent
731fa116
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
85 deletions
+96
-85
libopenjpegdec.c
libavcodec/libopenjpegdec.c
+73
-61
libopenjpegenc.c
libavcodec/libopenjpegenc.c
+23
-24
No files found.
libavcodec/libopenjpegdec.c
View file @
51a5ddfa
...
...
@@ -20,17 +20,18 @@
*/
/**
* @file
* JPEG 2000 decoder using libopenjpeg
*/
* @file
* JPEG 2000 decoder using libopenjpeg
*/
#define OPJ_STATIC
#include <openjpeg.h>
#include "libavutil/opt.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "thread.h"
#define OPJ_STATIC
#include <openjpeg.h>
#define JP2_SIG_TYPE 0x6A502020
#define JP2_SIG_VALUE 0x0D0A870A
...
...
@@ -45,10 +46,10 @@ typedef struct {
static
int
check_image_attributes
(
opj_image_t
*
image
)
{
return
image
->
comps
[
0
].
dx
==
image
->
comps
[
1
].
dx
&&
image
->
comps
[
1
].
dx
==
image
->
comps
[
2
].
dx
&&
image
->
comps
[
0
].
dy
==
image
->
comps
[
1
].
dy
&&
image
->
comps
[
1
].
dy
==
image
->
comps
[
2
].
dy
&&
return
image
->
comps
[
0
].
dx
==
image
->
comps
[
1
].
dx
&&
image
->
comps
[
1
].
dx
==
image
->
comps
[
2
].
dx
&&
image
->
comps
[
0
].
dy
==
image
->
comps
[
1
].
dy
&&
image
->
comps
[
1
].
dy
==
image
->
comps
[
2
].
dy
&&
image
->
comps
[
0
].
prec
==
image
->
comps
[
1
].
prec
&&
image
->
comps
[
1
].
prec
==
image
->
comps
[
2
].
prec
;
}
...
...
@@ -89,80 +90,91 @@ static int libopenjpeg_decode_frame(AVCodecContext *avctx,
*
data_size
=
0
;
// Check if input is a raw jpeg2k codestream or in jp2 wrapping
if
((
AV_RB32
(
buf
)
==
12
)
&&
(
AV_RB32
(
buf
+
4
)
==
JP2_SIG_TYPE
)
&&
(
AV_RB32
(
buf
+
8
)
==
JP2_SIG_VALUE
))
{
if
((
AV_RB32
(
buf
)
==
12
)
&&
(
AV_RB32
(
buf
+
4
)
==
JP2_SIG_TYPE
)
&&
(
AV_RB32
(
buf
+
8
)
==
JP2_SIG_VALUE
))
{
dec
=
opj_create_decompress
(
CODEC_JP2
);
}
else
{
/
/
If the AVPacket contains a jp2c box, then skip to
// the starting byte of the codestream.
/
*
If the AVPacket contains a jp2c box, then skip to
* the starting byte of the codestream. */
if
(
AV_RB32
(
buf
+
4
)
==
AV_RB32
(
"jp2c"
))
buf
+=
8
;
dec
=
opj_create_decompress
(
CODEC_J2K
);
}
if
(
!
dec
)
{
if
(
!
dec
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error initializing decoder.
\n
"
);
return
-
1
;
}
opj_set_event_mgr
((
opj_common_ptr
)
dec
,
NULL
,
NULL
);
ctx
->
dec_params
.
cp_limit_decoding
=
LIMIT_TO_MAIN_HEADER
;
ctx
->
dec_params
.
cp_reduce
=
ctx
->
lowres
;
ctx
->
dec_params
.
cp_layer
=
ctx
->
lowqual
;
ctx
->
dec_params
.
cp_reduce
=
ctx
->
lowres
;
ctx
->
dec_params
.
cp_layer
=
ctx
->
lowqual
;
// Tie decoder with decoding parameters
opj_setup_decoder
(
dec
,
&
ctx
->
dec_params
);
stream
=
opj_cio_open
((
opj_common_ptr
)
dec
,
buf
,
buf_size
);
if
(
!
stream
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Codestream could not be opened for reading.
\n
"
);
if
(
!
stream
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Codestream could not be opened for reading.
\n
"
);
opj_destroy_decompress
(
dec
);
return
-
1
;
}
// Decode the header only
// Decode the header only
.
image
=
opj_decode_with_info
(
dec
,
stream
,
NULL
);
opj_cio_close
(
stream
);
if
(
!
image
)
{
if
(
!
image
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error decoding codestream.
\n
"
);
opj_destroy_decompress
(
dec
);
return
-
1
;
}
width
=
image
->
x1
-
image
->
x0
;
height
=
image
->
y1
-
image
->
y0
;
if
(
ctx
->
lowres
)
{
width
=
(
width
+
(
1
<<
ctx
->
lowres
)
-
1
)
>>
ctx
->
lowres
;
width
=
(
width
+
(
1
<<
ctx
->
lowres
)
-
1
)
>>
ctx
->
lowres
;
height
=
(
height
+
(
1
<<
ctx
->
lowres
)
-
1
)
>>
ctx
->
lowres
;
}
if
(
av_image_check_size
(
width
,
height
,
0
,
avctx
)
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"%dx%d dimension invalid.
\n
"
,
width
,
height
);
if
(
av_image_check_size
(
width
,
height
,
0
,
avctx
)
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"%dx%d dimension invalid.
\n
"
,
width
,
height
);
goto
done
;
}
avcodec_set_dimensions
(
avctx
,
width
,
height
);
switch
(
image
->
numcomps
)
{
case
1
:
avctx
->
pix_fmt
=
PIX_FMT_GRAY8
;
break
;
case
3
:
if
(
check_image_attributes
(
image
))
{
avctx
->
pix_fmt
=
PIX_FMT_RGB24
;
}
else
{
avctx
->
pix_fmt
=
PIX_FMT_GRAY8
;
av_log
(
avctx
,
AV_LOG_ERROR
,
"Only first component will be used.
\n
"
);
}
break
;
case
4
:
has_alpha
=
1
;
avctx
->
pix_fmt
=
PIX_FMT_RGBA
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"%d components unsupported.
\n
"
,
image
->
numcomps
);
goto
done
;
switch
(
image
->
numcomps
)
{
case
1
:
avctx
->
pix_fmt
=
PIX_FMT_GRAY8
;
break
;
case
3
:
if
(
check_image_attributes
(
image
))
{
avctx
->
pix_fmt
=
PIX_FMT_RGB24
;
}
else
{
avctx
->
pix_fmt
=
PIX_FMT_GRAY8
;
av_log
(
avctx
,
AV_LOG_ERROR
,
"Only first component will be used.
\n
"
);
}
break
;
case
4
:
has_alpha
=
1
;
avctx
->
pix_fmt
=
PIX_FMT_RGBA
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"%d components unsupported.
\n
"
,
image
->
numcomps
);
goto
done
;
}
if
(
picture
->
data
[
0
])
if
(
picture
->
data
[
0
])
ff_thread_release_buffer
(
avctx
,
picture
);
if
(
ff_thread_get_buffer
(
avctx
,
picture
)
<
0
)
{
if
(
ff_thread_get_buffer
(
avctx
,
picture
)
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"ff_thread_get_buffer() failed
\n
"
);
return
-
1
;
}
...
...
@@ -170,32 +182,32 @@ static int libopenjpeg_decode_frame(AVCodecContext *avctx,
ff_thread_finish_setup
(
avctx
);
ctx
->
dec_params
.
cp_limit_decoding
=
NO_LIMITATION
;
// Tie decoder with decoding parameters
// Tie decoder with decoding parameters
.
opj_setup_decoder
(
dec
,
&
ctx
->
dec_params
);
stream
=
opj_cio_open
((
opj_common_ptr
)
dec
,
buf
,
buf_size
);
if
(
!
stream
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Codestream could not be opened for reading.
\n
"
);
if
(
!
stream
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Codestream could not be opened for reading.
\n
"
);
opj_destroy_decompress
(
dec
);
return
-
1
;
}
// Decode the codestream
// Decode the codestream
.
image
=
opj_decode_with_info
(
dec
,
stream
,
NULL
);
opj_cio_close
(
stream
);
for
(
x
=
0
;
x
<
image
->
numcomps
;
x
++
)
{
for
(
x
=
0
;
x
<
image
->
numcomps
;
x
++
)
adjust
[
x
]
=
FFMAX
(
image
->
comps
[
x
].
prec
-
8
,
0
);
}
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
{
index
=
y
*
avctx
->
width
;
img_ptr
=
picture
->
data
[
0
]
+
y
*
picture
->
linesize
[
0
];
for
(
x
=
0
;
x
<
avctx
->
width
;
x
++
,
index
++
)
{
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
{
index
=
y
*
avctx
->
width
;
img_ptr
=
picture
->
data
[
0
]
+
y
*
picture
->
linesize
[
0
];
for
(
x
=
0
;
x
<
avctx
->
width
;
x
++
,
index
++
)
{
*
img_ptr
++
=
image
->
comps
[
0
].
data
[
index
]
>>
adjust
[
0
];
if
(
image
->
numcomps
>
2
&&
check_image_attributes
(
image
))
{
if
(
image
->
numcomps
>
2
&&
check_image_attributes
(
image
))
{
*
img_ptr
++
=
image
->
comps
[
1
].
data
[
index
]
>>
adjust
[
1
];
*
img_ptr
++
=
image
->
comps
[
2
].
data
[
index
]
>>
adjust
[
2
];
if
(
has_alpha
)
if
(
has_alpha
)
*
img_ptr
++
=
image
->
comps
[
3
].
data
[
index
]
>>
adjust
[
3
];
}
}
...
...
@@ -203,7 +215,7 @@ static int libopenjpeg_decode_frame(AVCodecContext *avctx,
*
output
=
ctx
->
image
;
*
data_size
=
sizeof
(
AVPicture
);
ret
=
buf_size
;
ret
=
buf_size
;
done:
opj_image_destroy
(
image
);
...
...
@@ -215,17 +227,17 @@ static av_cold int libopenjpeg_decode_close(AVCodecContext *avctx)
{
LibOpenJPEGContext
*
ctx
=
avctx
->
priv_data
;
if
(
ctx
->
image
.
data
[
0
])
if
(
ctx
->
image
.
data
[
0
])
ff_thread_release_buffer
(
avctx
,
&
ctx
->
image
);
return
0
;
return
0
;
}
#define OFFSET(x) offsetof(LibOpenJPEGContext, x)
#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
options
[]
=
{
{
"lowqual"
,
"Limit the number of layers used for decoding"
,
OFFSET
(
lowqual
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
INT_MAX
,
VD
},
{
"lowres"
,
"Lower the decoding resolution by a power of two"
,
OFFSET
(
lowres
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
INT_MAX
,
VD
},
{
"lowqual"
,
"Limit the number of layers used for decoding"
,
OFFSET
(
lowqual
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
INT_MAX
,
VD
},
{
"lowres"
,
"Lower the decoding resolution by a power of two"
,
OFFSET
(
lowres
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
INT_MAX
,
VD
},
{
NULL
},
};
...
...
libavcodec/libopenjpegenc.c
View file @
51a5ddfa
...
...
@@ -20,16 +20,16 @@
*/
/**
* @file
* JPEG 2000 encoder using libopenjpeg
*/
* @file
* JPEG 2000 encoder using libopenjpeg
*/
#define OPJ_STATIC
#include <openjpeg.h>
#include "libavutil/opt.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "internal.h"
...
...
@@ -76,13 +76,14 @@ static opj_image_t *libopenjpeg_create_image(AVCodecContext *avctx,
int
sub_dy
[
4
];
int
numcomps
=
av_pix_fmt_descriptors
[
avctx
->
pix_fmt
].
nb_components
;
sub_dx
[
0
]
=
sub_dx
[
3
]
=
1
;
sub_dy
[
0
]
=
sub_dy
[
3
]
=
1
;
sub_dx
[
1
]
=
sub_dx
[
2
]
=
1
<<
av_pix_fmt_descriptors
[
avctx
->
pix_fmt
].
log2_chroma_w
;
sub_dy
[
1
]
=
sub_dy
[
2
]
=
1
<<
av_pix_fmt_descriptors
[
avctx
->
pix_fmt
].
log2_chroma_h
;
sub_dx
[
0
]
=
sub_dx
[
3
]
=
1
;
sub_dy
[
0
]
=
sub_dy
[
3
]
=
1
;
sub_dx
[
1
]
=
sub_dx
[
2
]
=
1
<<
av_pix_fmt_descriptors
[
avctx
->
pix_fmt
].
log2_chroma_w
;
sub_dy
[
1
]
=
sub_dy
[
2
]
=
1
<<
av_pix_fmt_descriptors
[
avctx
->
pix_fmt
].
log2_chroma_h
;
switch
(
avctx
->
pix_fmt
)
{
case
PIX_FMT_GRAY8
:
...
...
@@ -251,10 +252,9 @@ static void libopenjpeg_copy_unpacked8(AVCodecContext *avctx,
for
(
y
=
0
;
y
<
height
;
++
y
)
{
image_index
=
y
*
width
;
frame_index
=
y
*
frame
->
linesize
[
compno
];
for
(
x
=
0
;
x
<
width
;
++
x
)
{
for
(
x
=
0
;
x
<
width
;
++
x
)
image
->
comps
[
compno
].
data
[
image_index
++
]
=
frame
->
data
[
compno
][
frame_index
++
];
}
}
}
}
...
...
@@ -277,10 +277,9 @@ static void libopenjpeg_copy_unpacked16(AVCodecContext *avctx,
for
(
y
=
0
;
y
<
height
;
++
y
)
{
image_index
=
y
*
width
;
frame_index
=
y
*
(
frame
->
linesize
[
compno
]
/
2
);
for
(
x
=
0
;
x
<
width
;
++
x
)
{
for
(
x
=
0
;
x
<
width
;
++
x
)
image
->
comps
[
compno
].
data
[
image_index
++
]
=
frame_ptr
[
frame_index
++
];
}
}
}
}
...
...
@@ -290,7 +289,7 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
{
LibOpenJPEGContext
*
ctx
=
avctx
->
priv_data
;
opj_cinfo_t
*
compress
=
ctx
->
compress
;
opj_image_t
*
image
=
ctx
->
image
;
opj_image_t
*
image
=
ctx
->
image
;
opj_cio_t
*
stream
;
int
ret
,
len
;
...
...
@@ -298,7 +297,7 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
// x1, y1 is the width, height of the reference grid
image
->
x0
=
0
;
image
->
y0
=
0
;
image
->
x1
=
(
avctx
->
width
-
1
)
*
ctx
->
enc_params
.
subsampling_dx
+
1
;
image
->
x1
=
(
avctx
->
width
-
1
)
*
ctx
->
enc_params
.
subsampling_dx
+
1
;
image
->
y1
=
(
avctx
->
height
-
1
)
*
ctx
->
enc_params
.
subsampling_dy
+
1
;
switch
(
avctx
->
pix_fmt
)
{
...
...
@@ -373,7 +372,7 @@ static av_cold int libopenjpeg_encode_close(AVCodecContext *avctx)
opj_destroy_compress
(
ctx
->
compress
);
opj_image_destroy
(
ctx
->
image
);
av_freep
(
&
avctx
->
coded_frame
);
return
0
;
return
0
;
}
#define OFFSET(x) offsetof(LibOpenJPEGContext, x)
...
...
@@ -397,11 +396,11 @@ static const AVOption options[] = {
{
"rpcl"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
RPCL
},
0
,
0
,
VE
,
"prog_order"
},
{
"pcrl"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
PCRL
},
0
,
0
,
VE
,
"prog_order"
},
{
"cprl"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
CPRL
},
0
,
0
,
VE
,
"prog_order"
},
{
"numresolution"
,
NULL
,
OFFSET
(
numresolution
),
AV_OPT_TYPE_INT
,
{
6
},
1
,
10
,
VE
},
{
"numlayers"
,
NULL
,
OFFSET
(
numlayers
),
AV_OPT_TYPE_INT
,
{
1
},
1
,
10
,
VE
},
{
"disto_alloc"
,
NULL
,
OFFSET
(
disto_alloc
),
AV_OPT_TYPE_INT
,
{
1
},
0
,
1
,
VE
},
{
"fixed_alloc"
,
NULL
,
OFFSET
(
fixed_alloc
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
1
,
VE
},
{
"fixed_quality"
,
NULL
,
OFFSET
(
fixed_quality
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
1
,
VE
},
{
"numresolution"
,
NULL
,
OFFSET
(
numresolution
),
AV_OPT_TYPE_INT
,
{
6
},
1
,
10
,
VE
},
{
"numlayers"
,
NULL
,
OFFSET
(
numlayers
),
AV_OPT_TYPE_INT
,
{
1
},
1
,
10
,
VE
},
{
"disto_alloc"
,
NULL
,
OFFSET
(
disto_alloc
),
AV_OPT_TYPE_INT
,
{
1
},
0
,
1
,
VE
},
{
"fixed_alloc"
,
NULL
,
OFFSET
(
fixed_alloc
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
1
,
VE
},
{
"fixed_quality"
,
NULL
,
OFFSET
(
fixed_quality
),
AV_OPT_TYPE_INT
,
{
0
},
0
,
1
,
VE
},
{
NULL
},
};
...
...
@@ -421,7 +420,7 @@ AVCodec ff_libopenjpeg_encoder = {
.
encode2
=
libopenjpeg_encode_frame
,
.
close
=
libopenjpeg_encode_close
,
.
capabilities
=
0
,
.
pix_fmts
=
(
const
enum
PixelFormat
[]){
.
pix_fmts
=
(
const
enum
PixelFormat
[])
{
PIX_FMT_RGB24
,
PIX_FMT_RGBA
,
PIX_FMT_RGB48
,
PIX_FMT_GRAY8
,
PIX_FMT_GRAY16
,
PIX_FMT_Y400A
,
PIX_FMT_YUV420P
,
PIX_FMT_YUV422P
,
PIX_FMT_YUVA420P
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment