Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
3df0d200
Commit
3df0d200
authored
May 29, 2014
by
Dirk Ausserhaus
Committed by
Kostya Shishkov
Jun 01, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move Indeo4 frametypes into common header.
Signed-off-by:
Kostya Shishkov
<
kostya.shishkov@gmail.com
>
parent
38313626
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
32 deletions
+32
-32
indeo4.c
libavcodec/indeo4.c
+18
-31
ivi_common.c
libavcodec/ivi_common.c
+1
-1
ivi_common.h
libavcodec/ivi_common.h
+13
-0
No files found.
libavcodec/indeo4.c
View file @
3df0d200
...
@@ -34,19 +34,6 @@
...
@@ -34,19 +34,6 @@
#include "ivi_common.h"
#include "ivi_common.h"
#include "indeo4data.h"
#include "indeo4data.h"
/**
* Indeo 4 frame types.
*/
enum
{
FRAMETYPE_INTRA
=
0
,
FRAMETYPE_INTRA1
=
1
,
///< intra frame with slightly different bitstream coding
FRAMETYPE_INTER
=
2
,
///< non-droppable P-frame
FRAMETYPE_BIDIR
=
3
,
///< bidirectional frame
FRAMETYPE_INTER_NOREF
=
4
,
///< droppable P-frame
FRAMETYPE_NULL_FIRST
=
5
,
///< empty frame with no data
FRAMETYPE_NULL_LAST
=
6
///< empty frame with no data
};
#define IVI4_PIC_SIZE_ESC 7
#define IVI4_PIC_SIZE_ESC 7
...
@@ -132,7 +119,7 @@ static int decode_pic_hdr(IVI45DecContext *ctx, AVCodecContext *avctx)
...
@@ -132,7 +119,7 @@ static int decode_pic_hdr(IVI45DecContext *ctx, AVCodecContext *avctx)
}
}
#if IVI4_STREAM_ANALYSER
#if IVI4_STREAM_ANALYSER
if
(
ctx
->
frame_type
==
FRAMETYPE_BIDIR
)
if
(
ctx
->
frame_type
==
IVI4_
FRAMETYPE_BIDIR
)
ctx
->
has_b_frames
=
1
;
ctx
->
has_b_frames
=
1
;
#endif
#endif
...
@@ -152,7 +139,7 @@ static int decode_pic_hdr(IVI45DecContext *ctx, AVCodecContext *avctx)
...
@@ -152,7 +139,7 @@ static int decode_pic_hdr(IVI45DecContext *ctx, AVCodecContext *avctx)
ctx
->
data_size
=
get_bits1
(
&
ctx
->
gb
)
?
get_bits
(
&
ctx
->
gb
,
24
)
:
0
;
ctx
->
data_size
=
get_bits1
(
&
ctx
->
gb
)
?
get_bits
(
&
ctx
->
gb
,
24
)
:
0
;
/* null frames don't contain anything else so we just return */
/* null frames don't contain anything else so we just return */
if
(
ctx
->
frame_type
>=
FRAMETYPE_NULL_FIRST
)
{
if
(
ctx
->
frame_type
>=
IVI4_
FRAMETYPE_NULL_FIRST
)
{
av_dlog
(
avctx
,
"Null frame encountered!
\n
"
);
av_dlog
(
avctx
,
"Null frame encountered!
\n
"
);
return
0
;
return
0
;
}
}
...
@@ -327,7 +314,7 @@ static int decode_band_hdr(IVI45DecContext *ctx, IVIBandDesc *band,
...
@@ -327,7 +314,7 @@ static int decode_band_hdr(IVI45DecContext *ctx, IVIBandDesc *band,
band
->
glob_quant
=
get_bits
(
&
ctx
->
gb
,
5
);
band
->
glob_quant
=
get_bits
(
&
ctx
->
gb
,
5
);
if
(
!
get_bits1
(
&
ctx
->
gb
)
||
ctx
->
frame_type
==
FRAMETYPE_INTRA
)
{
if
(
!
get_bits1
(
&
ctx
->
gb
)
||
ctx
->
frame_type
==
IVI4_
FRAMETYPE_INTRA
)
{
transform_id
=
get_bits
(
&
ctx
->
gb
,
5
);
transform_id
=
get_bits
(
&
ctx
->
gb
,
5
);
if
(
transform_id
>=
FF_ARRAY_ELEMS
(
transforms
)
||
if
(
transform_id
>=
FF_ARRAY_ELEMS
(
transforms
)
||
!
transforms
[
transform_id
].
inv_trans
)
{
!
transforms
[
transform_id
].
inv_trans
)
{
...
@@ -462,7 +449,7 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
...
@@ -462,7 +449,7 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
offs
=
tile
->
ypos
*
band
->
pitch
+
tile
->
xpos
;
offs
=
tile
->
ypos
*
band
->
pitch
+
tile
->
xpos
;
blks_per_mb
=
band
->
mb_size
!=
band
->
blk_size
?
4
:
1
;
blks_per_mb
=
band
->
mb_size
!=
band
->
blk_size
?
4
:
1
;
mb_type_bits
=
ctx
->
frame_type
==
FRAMETYPE_BIDIR
?
2
:
1
;
mb_type_bits
=
ctx
->
frame_type
==
IVI4_
FRAMETYPE_BIDIR
?
2
:
1
;
/* scale factor for motion vectors */
/* scale factor for motion vectors */
mv_scale
=
(
ctx
->
planes
[
0
].
bands
[
0
].
mb_size
>>
3
)
-
(
band
->
mb_size
>>
3
);
mv_scale
=
(
ctx
->
planes
[
0
].
bands
[
0
].
mb_size
>>
3
)
-
(
band
->
mb_size
>>
3
);
...
@@ -477,7 +464,7 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
...
@@ -477,7 +464,7 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
mb
->
buf_offs
=
mb_offset
;
mb
->
buf_offs
=
mb_offset
;
if
(
get_bits1
(
&
ctx
->
gb
))
{
if
(
get_bits1
(
&
ctx
->
gb
))
{
if
(
ctx
->
frame_type
==
FRAMETYPE_INTRA
)
{
if
(
ctx
->
frame_type
==
IVI4_
FRAMETYPE_INTRA
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Empty macroblock in an INTRA picture!
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Empty macroblock in an INTRA picture!
\n
"
);
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
}
}
...
@@ -508,8 +495,8 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
...
@@ -508,8 +495,8 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
if
(
!
ref_mb
)
if
(
!
ref_mb
)
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
mb
->
type
=
ref_mb
->
type
;
mb
->
type
=
ref_mb
->
type
;
}
else
if
(
ctx
->
frame_type
==
FRAMETYPE_INTRA
||
}
else
if
(
ctx
->
frame_type
==
IVI4_
FRAMETYPE_INTRA
||
ctx
->
frame_type
==
FRAMETYPE_INTRA1
)
{
ctx
->
frame_type
==
IVI4_
FRAMETYPE_INTRA1
)
{
mb
->
type
=
0
;
/* mb_type is always INTRA for intra-frames */
mb
->
type
=
0
;
/* mb_type is always INTRA for intra-frames */
}
else
{
}
else
{
mb
->
type
=
get_bits
(
&
ctx
->
gb
,
mb_type_bits
);
mb
->
type
=
get_bits
(
&
ctx
->
gb
,
mb_type_bits
);
...
@@ -577,29 +564,29 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
...
@@ -577,29 +564,29 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
static
void
switch_buffers
(
IVI45DecContext
*
ctx
)
static
void
switch_buffers
(
IVI45DecContext
*
ctx
)
{
{
switch
(
ctx
->
prev_frame_type
)
{
switch
(
ctx
->
prev_frame_type
)
{
case
FRAMETYPE_INTRA
:
case
IVI4_
FRAMETYPE_INTRA
:
case
FRAMETYPE_INTRA1
:
case
IVI4_
FRAMETYPE_INTRA1
:
case
FRAMETYPE_INTER
:
case
IVI4_
FRAMETYPE_INTER
:
ctx
->
buf_switch
^=
1
;
ctx
->
buf_switch
^=
1
;
ctx
->
dst_buf
=
ctx
->
buf_switch
;
ctx
->
dst_buf
=
ctx
->
buf_switch
;
ctx
->
ref_buf
=
ctx
->
buf_switch
^
1
;
ctx
->
ref_buf
=
ctx
->
buf_switch
^
1
;
break
;
break
;
case
FRAMETYPE_INTER_NOREF
:
case
IVI4_
FRAMETYPE_INTER_NOREF
:
break
;
break
;
}
}
switch
(
ctx
->
frame_type
)
{
switch
(
ctx
->
frame_type
)
{
case
FRAMETYPE_INTRA
:
case
IVI4_
FRAMETYPE_INTRA
:
case
FRAMETYPE_INTRA1
:
case
IVI4_
FRAMETYPE_INTRA1
:
ctx
->
buf_switch
=
0
;
ctx
->
buf_switch
=
0
;
/* FALLTHROUGH */
/* FALLTHROUGH */
case
FRAMETYPE_INTER
:
case
IVI4_
FRAMETYPE_INTER
:
ctx
->
dst_buf
=
ctx
->
buf_switch
;
ctx
->
dst_buf
=
ctx
->
buf_switch
;
ctx
->
ref_buf
=
ctx
->
buf_switch
^
1
;
ctx
->
ref_buf
=
ctx
->
buf_switch
^
1
;
break
;
break
;
case
FRAMETYPE_INTER_NOREF
:
case
IVI4_
FRAMETYPE_INTER_NOREF
:
case
FRAMETYPE_NULL_FIRST
:
case
IVI4_
FRAMETYPE_NULL_FIRST
:
case
FRAMETYPE_NULL_LAST
:
case
IVI4_
FRAMETYPE_NULL_LAST
:
break
;
break
;
}
}
}
}
...
@@ -607,7 +594,7 @@ static void switch_buffers(IVI45DecContext *ctx)
...
@@ -607,7 +594,7 @@ static void switch_buffers(IVI45DecContext *ctx)
static
int
is_nonnull_frame
(
IVI45DecContext
*
ctx
)
static
int
is_nonnull_frame
(
IVI45DecContext
*
ctx
)
{
{
return
ctx
->
frame_type
<
FRAMETYPE_NULL_FIRST
;
return
ctx
->
frame_type
<
IVI4_
FRAMETYPE_NULL_FIRST
;
}
}
...
...
libavcodec/ivi_common.c
View file @
3df0d200
...
@@ -1011,7 +1011,7 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
...
@@ -1011,7 +1011,7 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
* That's exactly the same Intel decoders do.
* That's exactly the same Intel decoders do.
*/
*/
if
(
avctx
->
codec_id
==
AV_CODEC_ID_INDEO4
&&
if
(
avctx
->
codec_id
==
AV_CODEC_ID_INDEO4
&&
ctx
->
frame_type
==
0
/*FRAMETYPE_INTRA*/
)
{
ctx
->
frame_type
==
IVI4_FRAMETYPE_INTRA
)
{
while
(
get_bits
(
&
ctx
->
gb
,
8
));
// skip version string
while
(
get_bits
(
&
ctx
->
gb
,
8
));
// skip version string
skip_bits_long
(
&
ctx
->
gb
,
64
);
// skip padding, TODO: implement correct 8-bytes alignment
skip_bits_long
(
&
ctx
->
gb
,
64
);
// skip padding, TODO: implement correct 8-bytes alignment
if
(
get_bits_left
(
&
ctx
->
gb
)
>
18
&&
show_bits
(
&
ctx
->
gb
,
18
)
==
0x3FFF8
)
if
(
get_bits_left
(
&
ctx
->
gb
)
>
18
&&
show_bits
(
&
ctx
->
gb
,
18
)
==
0x3FFF8
)
...
...
libavcodec/ivi_common.h
View file @
3df0d200
...
@@ -33,6 +33,19 @@
...
@@ -33,6 +33,19 @@
#include "get_bits.h"
#include "get_bits.h"
#include <stdint.h>
#include <stdint.h>
/**
* Indeo 4 frame types.
*/
enum
{
IVI4_FRAMETYPE_INTRA
=
0
,
IVI4_FRAMETYPE_INTRA1
=
1
,
///< intra frame with slightly different bitstream coding
IVI4_FRAMETYPE_INTER
=
2
,
///< non-droppable P-frame
IVI4_FRAMETYPE_BIDIR
=
3
,
///< bidirectional frame
IVI4_FRAMETYPE_INTER_NOREF
=
4
,
///< droppable P-frame
IVI4_FRAMETYPE_NULL_FIRST
=
5
,
///< empty frame with no data
IVI4_FRAMETYPE_NULL_LAST
=
6
///< empty frame with no data
};
#define IVI_VLC_BITS 13 ///< max number of bits of the ivi's huffman codes
#define IVI_VLC_BITS 13 ///< max number of bits of the ivi's huffman codes
#define IVI4_STREAM_ANALYSER 0
#define IVI4_STREAM_ANALYSER 0
#define IVI5_IS_PROTECTED 0x20
#define IVI5_IS_PROTECTED 0x20
...
...
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