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
233a5a80
Commit
233a5a80
authored
Oct 08, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavc: split asv12 encoder/decoder
parent
fb722a90
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
778 additions
and
4 deletions
+778
-4
Makefile
libavcodec/Makefile
+4
-4
asv.c
libavcodec/asv.c
+95
-0
asv.h
libavcodec/asv.h
+67
-0
asvdec.c
libavcodec/asvdec.c
+325
-0
asvenc.c
libavcodec/asvenc.c
+287
-0
No files found.
libavcodec/Makefile
View file @
233a5a80
...
...
@@ -99,10 +99,10 @@ OBJS-$(CONFIG_ANSI_DECODER) += ansi.o cga_data.o
OBJS-$(CONFIG_APE_DECODER)
+=
apedec.o
OBJS-$(CONFIG_ASS_DECODER)
+=
assdec.o
ass.o
OBJS-$(CONFIG_ASS_ENCODER)
+=
assenc.o
ass.o
OBJS-$(CONFIG_ASV1_DECODER)
+=
asv
1
.o
mpeg12data.o
OBJS-$(CONFIG_ASV1_ENCODER)
+=
asv
1
.o
mpeg12data.o
OBJS-$(CONFIG_ASV2_DECODER)
+=
asv
1
.o
mpeg12data.o
OBJS-$(CONFIG_ASV2_ENCODER)
+=
asv
1
.o
mpeg12data.o
OBJS-$(CONFIG_ASV1_DECODER)
+=
asv
dec.o
asv
.o
mpeg12data.o
OBJS-$(CONFIG_ASV1_ENCODER)
+=
asv
enc.o
asv
.o
mpeg12data.o
OBJS-$(CONFIG_ASV2_DECODER)
+=
asv
dec.o
asv
.o
mpeg12data.o
OBJS-$(CONFIG_ASV2_ENCODER)
+=
asv
enc.o
asv
.o
mpeg12data.o
OBJS-$(CONFIG_ATRAC1_DECODER)
+=
atrac1.o
atrac.o
OBJS-$(CONFIG_ATRAC3_DECODER)
+=
atrac3.o
atrac.o
OBJS-$(CONFIG_AURA_DECODER)
+=
cyuv.o
...
...
libavcodec/asv.c
0 → 100644
View file @
233a5a80
/*
* Copyright (c) 2003 Michael Niedermayer
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* ASUS V1/V2 encoder/decoder common data
*/
#include <stdint.h>
#include "asv.h"
#include "avcodec.h"
#include "dsputil.h"
const
uint8_t
ff_asv_scantab
[
64
]
=
{
0x00
,
0x08
,
0x01
,
0x09
,
0x10
,
0x18
,
0x11
,
0x19
,
0x02
,
0x0A
,
0x03
,
0x0B
,
0x12
,
0x1A
,
0x13
,
0x1B
,
0x04
,
0x0C
,
0x05
,
0x0D
,
0x20
,
0x28
,
0x21
,
0x29
,
0x06
,
0x0E
,
0x07
,
0x0F
,
0x14
,
0x1C
,
0x15
,
0x1D
,
0x22
,
0x2A
,
0x23
,
0x2B
,
0x30
,
0x38
,
0x31
,
0x39
,
0x16
,
0x1E
,
0x17
,
0x1F
,
0x24
,
0x2C
,
0x25
,
0x2D
,
0x32
,
0x3A
,
0x33
,
0x3B
,
0x26
,
0x2E
,
0x27
,
0x2F
,
0x34
,
0x3C
,
0x35
,
0x3D
,
0x36
,
0x3E
,
0x37
,
0x3F
,
};
const
uint8_t
ff_asv_ccp_tab
[
17
][
2
]
=
{
{
0x2
,
2
},
{
0x7
,
5
},
{
0xB
,
5
},
{
0x3
,
5
},
{
0xD
,
5
},
{
0x5
,
5
},
{
0x9
,
5
},
{
0x1
,
5
},
{
0xE
,
5
},
{
0x6
,
5
},
{
0xA
,
5
},
{
0x2
,
5
},
{
0xC
,
5
},
{
0x4
,
5
},
{
0x8
,
5
},
{
0x3
,
2
},
{
0xF
,
5
},
//EOB
};
const
uint8_t
ff_asv_level_tab
[
7
][
2
]
=
{
{
3
,
4
},
{
3
,
3
},
{
3
,
2
},
{
0
,
3
},
{
2
,
2
},
{
2
,
3
},
{
2
,
4
}
};
const
uint8_t
ff_asv_dc_ccp_tab
[
8
][
2
]
=
{
{
0x1
,
2
},
{
0xD
,
4
},
{
0xF
,
4
},
{
0xC
,
4
},
{
0x5
,
3
},
{
0xE
,
4
},
{
0x4
,
3
},
{
0x0
,
2
},
};
const
uint8_t
ff_asv_ac_ccp_tab
[
16
][
2
]
=
{
{
0x00
,
2
},
{
0x3B
,
6
},
{
0x0A
,
4
},
{
0x3A
,
6
},
{
0x02
,
3
},
{
0x39
,
6
},
{
0x3C
,
6
},
{
0x38
,
6
},
{
0x03
,
3
},
{
0x3D
,
6
},
{
0x08
,
4
},
{
0x1F
,
5
},
{
0x09
,
4
},
{
0x0B
,
4
},
{
0x0D
,
4
},
{
0x0C
,
4
},
};
const
uint8_t
ff_asv2_level_tab
[
63
][
2
]
=
{
{
0x3F
,
10
},{
0x2F
,
10
},{
0x37
,
10
},{
0x27
,
10
},{
0x3B
,
10
},{
0x2B
,
10
},{
0x33
,
10
},{
0x23
,
10
},
{
0x3D
,
10
},{
0x2D
,
10
},{
0x35
,
10
},{
0x25
,
10
},{
0x39
,
10
},{
0x29
,
10
},{
0x31
,
10
},{
0x21
,
10
},
{
0x1F
,
8
},{
0x17
,
8
},{
0x1B
,
8
},{
0x13
,
8
},{
0x1D
,
8
},{
0x15
,
8
},{
0x19
,
8
},{
0x11
,
8
},
{
0x0F
,
6
},{
0x0B
,
6
},{
0x0D
,
6
},{
0x09
,
6
},
{
0x07
,
4
},{
0x05
,
4
},
{
0x03
,
2
},
{
0x00
,
5
},
{
0x02
,
2
},
{
0x04
,
4
},{
0x06
,
4
},
{
0x08
,
6
},{
0x0C
,
6
},{
0x0A
,
6
},{
0x0E
,
6
},
{
0x10
,
8
},{
0x18
,
8
},{
0x14
,
8
},{
0x1C
,
8
},{
0x12
,
8
},{
0x1A
,
8
},{
0x16
,
8
},{
0x1E
,
8
},
{
0x20
,
10
},{
0x30
,
10
},{
0x28
,
10
},{
0x38
,
10
},{
0x24
,
10
},{
0x34
,
10
},{
0x2C
,
10
},{
0x3C
,
10
},
{
0x22
,
10
},{
0x32
,
10
},{
0x2A
,
10
},{
0x3A
,
10
},{
0x26
,
10
},{
0x36
,
10
},{
0x2E
,
10
},{
0x3E
,
10
},
};
av_cold
void
ff_asv_common_init
(
AVCodecContext
*
avctx
)
{
ASV1Context
*
const
a
=
avctx
->
priv_data
;
ff_dsputil_init
(
&
a
->
dsp
,
avctx
);
a
->
mb_width
=
(
avctx
->
width
+
15
)
/
16
;
a
->
mb_height
=
(
avctx
->
height
+
15
)
/
16
;
a
->
mb_width2
=
(
avctx
->
width
+
0
)
/
16
;
a
->
mb_height2
=
(
avctx
->
height
+
0
)
/
16
;
avctx
->
coded_frame
=
&
a
->
picture
;
a
->
avctx
=
avctx
;
}
libavcodec/asv.h
0 → 100644
View file @
233a5a80
/*
* Copyright (c) 2003 Michael Niedermayer
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* ASUS V1/V2 encoder/decoder common data.
*/
#ifndef AVCODEC_ASV_H
#define AVCODEC_ASV_H
#include <stdint.h>
#include "libavutil/attributes.h"
#include "libavutil/mem.h"
#include "avcodec.h"
#include "dsputil.h"
#include "get_bits.h"
#include "put_bits.h"
typedef
struct
ASV1Context
{
AVCodecContext
*
avctx
;
DSPContext
dsp
;
AVFrame
picture
;
PutBitContext
pb
;
GetBitContext
gb
;
ScanTable
scantable
;
int
inv_qscale
;
int
mb_width
;
int
mb_height
;
int
mb_width2
;
int
mb_height2
;
DECLARE_ALIGNED
(
16
,
DCTELEM
,
block
)[
6
][
64
];
uint16_t
intra_matrix
[
64
];
int
q_intra_matrix
[
64
];
uint8_t
*
bitstream_buffer
;
unsigned
int
bitstream_buffer_size
;
}
ASV1Context
;
extern
const
uint8_t
ff_asv_scantab
[
64
];
extern
const
uint8_t
ff_asv_ccp_tab
[
17
][
2
];
extern
const
uint8_t
ff_asv_level_tab
[
7
][
2
];
extern
const
uint8_t
ff_asv_dc_ccp_tab
[
8
][
2
];
extern
const
uint8_t
ff_asv_ac_ccp_tab
[
16
][
2
];
extern
const
uint8_t
ff_asv2_level_tab
[
63
][
2
];
av_cold
void
ff_asv_common_init
(
AVCodecContext
*
avctx
);
#endif
/* AVCODEC_ASV_H */
libavcodec/asv
1
.c
→
libavcodec/asv
dec
.c
View file @
233a5a80
This diff is collapsed.
Click to expand it.
libavcodec/asvenc.c
0 → 100644
View file @
233a5a80
/*
* Copyright (c) 2003 Michael Niedermayer
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* ASUS V1/V2 encoder.
*/
#include "libavutil/common.h"
#include "libavutil/mem.h"
#include "asv.h"
#include "avcodec.h"
#include "mpeg12data.h"
static
inline
void
asv2_put_bits
(
PutBitContext
*
pb
,
int
n
,
int
v
){
put_bits
(
pb
,
n
,
av_reverse
[
v
<<
(
8
-
n
)
]);
}
static
inline
void
asv1_put_level
(
PutBitContext
*
pb
,
int
level
){
unsigned
int
index
=
level
+
3
;
if
(
index
<=
6
)
put_bits
(
pb
,
ff_asv_level_tab
[
index
][
1
],
ff_asv_level_tab
[
index
][
0
]);
else
{
put_bits
(
pb
,
ff_asv_level_tab
[
3
][
1
],
ff_asv_level_tab
[
3
][
0
]);
put_sbits
(
pb
,
8
,
level
);
}
}
static
inline
void
asv2_put_level
(
PutBitContext
*
pb
,
int
level
){
unsigned
int
index
=
level
+
31
;
if
(
index
<=
62
)
put_bits
(
pb
,
ff_asv2_level_tab
[
index
][
1
],
ff_asv2_level_tab
[
index
][
0
]);
else
{
put_bits
(
pb
,
ff_asv2_level_tab
[
31
][
1
],
ff_asv2_level_tab
[
31
][
0
]);
asv2_put_bits
(
pb
,
8
,
level
&
0xFF
);
}
}
static
inline
void
asv1_encode_block
(
ASV1Context
*
a
,
DCTELEM
block
[
64
]){
int
i
;
int
nc_count
=
0
;
put_bits
(
&
a
->
pb
,
8
,
(
block
[
0
]
+
32
)
>>
6
);
block
[
0
]
=
0
;
for
(
i
=
0
;
i
<
10
;
i
++
){
const
int
index
=
ff_asv_scantab
[
4
*
i
];
int
ccp
=
0
;
if
(
(
block
[
index
+
0
]
=
(
block
[
index
+
0
]
*
a
->
q_intra_matrix
[
index
+
0
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
8
;
if
(
(
block
[
index
+
8
]
=
(
block
[
index
+
8
]
*
a
->
q_intra_matrix
[
index
+
8
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
4
;
if
(
(
block
[
index
+
1
]
=
(
block
[
index
+
1
]
*
a
->
q_intra_matrix
[
index
+
1
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
2
;
if
(
(
block
[
index
+
9
]
=
(
block
[
index
+
9
]
*
a
->
q_intra_matrix
[
index
+
9
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
1
;
if
(
ccp
){
for
(;
nc_count
;
nc_count
--
)
put_bits
(
&
a
->
pb
,
ff_asv_ccp_tab
[
0
][
1
],
ff_asv_ccp_tab
[
0
][
0
]);
put_bits
(
&
a
->
pb
,
ff_asv_ccp_tab
[
ccp
][
1
],
ff_asv_ccp_tab
[
ccp
][
0
]);
if
(
ccp
&
8
)
asv1_put_level
(
&
a
->
pb
,
block
[
index
+
0
]);
if
(
ccp
&
4
)
asv1_put_level
(
&
a
->
pb
,
block
[
index
+
8
]);
if
(
ccp
&
2
)
asv1_put_level
(
&
a
->
pb
,
block
[
index
+
1
]);
if
(
ccp
&
1
)
asv1_put_level
(
&
a
->
pb
,
block
[
index
+
9
]);
}
else
{
nc_count
++
;
}
}
put_bits
(
&
a
->
pb
,
ff_asv_ccp_tab
[
16
][
1
],
ff_asv_ccp_tab
[
16
][
0
]);
}
static
inline
void
asv2_encode_block
(
ASV1Context
*
a
,
DCTELEM
block
[
64
]){
int
i
;
int
count
=
0
;
for
(
count
=
63
;
count
>
3
;
count
--
){
const
int
index
=
ff_asv_scantab
[
count
];
if
(
(
block
[
index
]
*
a
->
q_intra_matrix
[
index
]
+
(
1
<<
15
))
>>
16
)
break
;
}
count
>>=
2
;
asv2_put_bits
(
&
a
->
pb
,
4
,
count
);
asv2_put_bits
(
&
a
->
pb
,
8
,
(
block
[
0
]
+
32
)
>>
6
);
block
[
0
]
=
0
;
for
(
i
=
0
;
i
<=
count
;
i
++
){
const
int
index
=
ff_asv_scantab
[
4
*
i
];
int
ccp
=
0
;
if
(
(
block
[
index
+
0
]
=
(
block
[
index
+
0
]
*
a
->
q_intra_matrix
[
index
+
0
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
8
;
if
(
(
block
[
index
+
8
]
=
(
block
[
index
+
8
]
*
a
->
q_intra_matrix
[
index
+
8
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
4
;
if
(
(
block
[
index
+
1
]
=
(
block
[
index
+
1
]
*
a
->
q_intra_matrix
[
index
+
1
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
2
;
if
(
(
block
[
index
+
9
]
=
(
block
[
index
+
9
]
*
a
->
q_intra_matrix
[
index
+
9
]
+
(
1
<<
15
))
>>
16
)
)
ccp
|=
1
;
assert
(
i
||
ccp
<
8
);
if
(
i
)
put_bits
(
&
a
->
pb
,
ff_asv_ac_ccp_tab
[
ccp
][
1
],
ff_asv_ac_ccp_tab
[
ccp
][
0
]);
else
put_bits
(
&
a
->
pb
,
ff_asv_dc_ccp_tab
[
ccp
][
1
],
ff_asv_dc_ccp_tab
[
ccp
][
0
]);
if
(
ccp
){
if
(
ccp
&
8
)
asv2_put_level
(
&
a
->
pb
,
block
[
index
+
0
]);
if
(
ccp
&
4
)
asv2_put_level
(
&
a
->
pb
,
block
[
index
+
8
]);
if
(
ccp
&
2
)
asv2_put_level
(
&
a
->
pb
,
block
[
index
+
1
]);
if
(
ccp
&
1
)
asv2_put_level
(
&
a
->
pb
,
block
[
index
+
9
]);
}
}
}
#define MAX_MB_SIZE (30*16*16*3/2/8)
static
inline
int
encode_mb
(
ASV1Context
*
a
,
DCTELEM
block
[
6
][
64
]){
int
i
;
if
(
a
->
pb
.
buf_end
-
a
->
pb
.
buf
-
(
put_bits_count
(
&
a
->
pb
)
>>
3
)
<
MAX_MB_SIZE
)
{
av_log
(
a
->
avctx
,
AV_LOG_ERROR
,
"encoded frame too large
\n
"
);
return
-
1
;
}
if
(
a
->
avctx
->
codec_id
==
AV_CODEC_ID_ASV1
){
for
(
i
=
0
;
i
<
6
;
i
++
)
asv1_encode_block
(
a
,
block
[
i
]);
}
else
{
for
(
i
=
0
;
i
<
6
;
i
++
)
asv2_encode_block
(
a
,
block
[
i
]);
}
return
0
;
}
static
inline
void
dct_get
(
ASV1Context
*
a
,
int
mb_x
,
int
mb_y
){
DCTELEM
(
*
block
)[
64
]
=
a
->
block
;
int
linesize
=
a
->
picture
.
linesize
[
0
];
int
i
;
uint8_t
*
ptr_y
=
a
->
picture
.
data
[
0
]
+
(
mb_y
*
16
*
linesize
)
+
mb_x
*
16
;
uint8_t
*
ptr_cb
=
a
->
picture
.
data
[
1
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
1
])
+
mb_x
*
8
;
uint8_t
*
ptr_cr
=
a
->
picture
.
data
[
2
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
2
])
+
mb_x
*
8
;
a
->
dsp
.
get_pixels
(
block
[
0
],
ptr_y
,
linesize
);
a
->
dsp
.
get_pixels
(
block
[
1
],
ptr_y
+
8
,
linesize
);
a
->
dsp
.
get_pixels
(
block
[
2
],
ptr_y
+
8
*
linesize
,
linesize
);
a
->
dsp
.
get_pixels
(
block
[
3
],
ptr_y
+
8
*
linesize
+
8
,
linesize
);
for
(
i
=
0
;
i
<
4
;
i
++
)
a
->
dsp
.
fdct
(
block
[
i
]);
if
(
!
(
a
->
avctx
->
flags
&
CODEC_FLAG_GRAY
)){
a
->
dsp
.
get_pixels
(
block
[
4
],
ptr_cb
,
a
->
picture
.
linesize
[
1
]);
a
->
dsp
.
get_pixels
(
block
[
5
],
ptr_cr
,
a
->
picture
.
linesize
[
2
]);
for
(
i
=
4
;
i
<
6
;
i
++
)
a
->
dsp
.
fdct
(
block
[
i
]);
}
}
static
int
encode_frame
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
const
AVFrame
*
pict
,
int
*
got_packet
)
{
ASV1Context
*
const
a
=
avctx
->
priv_data
;
AVFrame
*
const
p
=
&
a
->
picture
;
int
size
,
ret
;
int
mb_x
,
mb_y
;
if
(
!
pkt
->
data
&&
(
ret
=
av_new_packet
(
pkt
,
a
->
mb_height
*
a
->
mb_width
*
MAX_MB_SIZE
+
FF_MIN_BUFFER_SIZE
))
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error getting output packet.
\n
"
);
return
ret
;
}
init_put_bits
(
&
a
->
pb
,
pkt
->
data
,
pkt
->
size
);
*
p
=
*
pict
;
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
for
(
mb_y
=
0
;
mb_y
<
a
->
mb_height2
;
mb_y
++
){
for
(
mb_x
=
0
;
mb_x
<
a
->
mb_width2
;
mb_x
++
){
dct_get
(
a
,
mb_x
,
mb_y
);
encode_mb
(
a
,
a
->
block
);
}
}
if
(
a
->
mb_width2
!=
a
->
mb_width
){
mb_x
=
a
->
mb_width2
;
for
(
mb_y
=
0
;
mb_y
<
a
->
mb_height2
;
mb_y
++
){
dct_get
(
a
,
mb_x
,
mb_y
);
encode_mb
(
a
,
a
->
block
);
}
}
if
(
a
->
mb_height2
!=
a
->
mb_height
){
mb_y
=
a
->
mb_height2
;
for
(
mb_x
=
0
;
mb_x
<
a
->
mb_width
;
mb_x
++
){
dct_get
(
a
,
mb_x
,
mb_y
);
encode_mb
(
a
,
a
->
block
);
}
}
emms_c
();
avpriv_align_put_bits
(
&
a
->
pb
);
while
(
put_bits_count
(
&
a
->
pb
)
&
31
)
put_bits
(
&
a
->
pb
,
8
,
0
);
size
=
put_bits_count
(
&
a
->
pb
)
/
32
;
if
(
avctx
->
codec_id
==
AV_CODEC_ID_ASV1
)
a
->
dsp
.
bswap_buf
((
uint32_t
*
)
pkt
->
data
,
(
uint32_t
*
)
pkt
->
data
,
size
);
else
{
int
i
;
for
(
i
=
0
;
i
<
4
*
size
;
i
++
)
pkt
->
data
[
i
]
=
av_reverse
[
pkt
->
data
[
i
]];
}
pkt
->
size
=
size
*
4
;
pkt
->
flags
|=
AV_PKT_FLAG_KEY
;
*
got_packet
=
1
;
return
0
;
}
static
av_cold
int
encode_init
(
AVCodecContext
*
avctx
){
ASV1Context
*
const
a
=
avctx
->
priv_data
;
int
i
;
const
int
scale
=
avctx
->
codec_id
==
AV_CODEC_ID_ASV1
?
1
:
2
;
ff_asv_common_init
(
avctx
);
if
(
avctx
->
global_quality
==
0
)
avctx
->
global_quality
=
4
*
FF_QUALITY_SCALE
;
a
->
inv_qscale
=
(
32
*
scale
*
FF_QUALITY_SCALE
+
avctx
->
global_quality
/
2
)
/
avctx
->
global_quality
;
avctx
->
extradata
=
av_mallocz
(
8
);
avctx
->
extradata_size
=
8
;
((
uint32_t
*
)
avctx
->
extradata
)[
0
]
=
av_le2ne32
(
a
->
inv_qscale
);
((
uint32_t
*
)
avctx
->
extradata
)[
1
]
=
av_le2ne32
(
AV_RL32
(
"ASUS"
));
for
(
i
=
0
;
i
<
64
;
i
++
){
int
q
=
32
*
scale
*
ff_mpeg1_default_intra_matrix
[
i
];
a
->
q_intra_matrix
[
i
]
=
((
a
->
inv_qscale
<<
16
)
+
q
/
2
)
/
q
;
}
return
0
;
}
#if CONFIG_ASV1_ENCODER
AVCodec
ff_asv1_encoder
=
{
.
name
=
"asv1"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_ASV1
,
.
priv_data_size
=
sizeof
(
ASV1Context
),
.
init
=
encode_init
,
.
encode2
=
encode_frame
,
.
pix_fmts
=
(
const
enum
PixelFormat
[]){
AV_PIX_FMT_YUV420P
,
AV_PIX_FMT_NONE
},
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ASUS V1"
),
};
#endif
#if CONFIG_ASV2_ENCODER
AVCodec
ff_asv2_encoder
=
{
.
name
=
"asv2"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_ASV2
,
.
priv_data_size
=
sizeof
(
ASV1Context
),
.
init
=
encode_init
,
.
encode2
=
encode_frame
,
.
pix_fmts
=
(
const
enum
PixelFormat
[]){
AV_PIX_FMT_YUV420P
,
AV_PIX_FMT_NONE
},
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ASUS V2"
),
};
#endif
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