About MPEG4 Encoder Setting

About SOLO6110
2009.10.28
SoftLogic
Doojin Han
([email protected])
1
SoftLogic
Contents
1. Video Matrix Function & Real Channel / Virtual Channel
2. H.264 encoding
Page 3
Page 10
2
SoftLogic
Video Matrix Function &
Real Channel / Virtual Channel
1. Video Matrix Function
2. Real Channel / Virtual Channel
3. Video Matrix Function & Real Channel / Virtual Channel
3
SoftLogic
1. Video Matrix Function
1/4
Related register
Camera Input 0
Camera Input 1
Camera Input 2
Camera Input 3
Camera Input 4
Camera Input 5
Camera Input 6
Camera Input 7
Camera Input 8
Camera Input 9
Camera Input 10
Camera Input 11
Camera Input 12
Camera Input 13
Camera Input 14
Camera Input 15
Video Channel 0
Video Channel 1
Video Channel 2
Video Channel 3
Video Channel 4
Video Channel 5
Video Channel 6
Video Channel 7
Video Channel 8
Video Channel 9
Video Channel 10
Video Channel 11
Video Channel 12
Video Channel 13
Video Channel 14
Video Channel 15
Video Matrix
Encoded
Stream
data
0x0100
VI_CH_SWITCH0
Camera input number for
video input 0 to 5
0x0104
VI_CH_SWITCH1
Camera input number for
video input 6 to 11
0x0108
VI_CH_SWITCH2
Camera input number for
video input 12 to 15 and
Spot output
H.264 encoder &
JPEG encoder
SOLO6110
The video matrix is a input switcher between camera input and video channel.
You can assign any of camera input to any of video channel by setting video matrix. And you can assign 1 camera input to multiple video channels.
There are some examples of video matrix setting in the next pages.
4
SoftLogic
1. Video Matrix Function – Example 1
2/4
Register value
Camera Input 0
Camera Input 1
Camera Input 2
Camera Input 3
Camera Input 4
Camera Input 5
Camera Input 6
Camera Input 7
Camera Input 8
Camera Input 9
Camera Input 10
Camera Input 11
Camera Input 12
Camera Input 13
Camera Input 14
Camera Input 15
Video Channel 0
Video Channel 1
Video Channel 2
Video Channel 3
Video Channel 4
Video Channel 5
Video Channel 6
Video Channel 7
Video Channel 8
Video Channel 9
Video Channel 10
Video Channel 11
Video Channel 12
Video Channel 13
Video Channel 14
Video Channel 15
Video Matrix
H.264 encoder &
JPEG encoder
0x0100
VI_CH_SWITCH0
Encoded
Stream
data
0x0104
0x0108
VI_CH_SWITCH1
VI_CH_SWITCH2
SOLO6110
[29:25]
5
[24:20]
4
[19:15]
3
[14:10]
2
[9:5]
1
[4:0]
0
[29:25]
11
[24:20]
10
[19:15]
9
[14:10]
8
[9:5]
7
[4:0]
6
[24:20]
Any value
[19:15]
15
[14:10]
14
[9:5]
13
[4:0]
12
All camera inputs are connected to corresponding video channels.
Encoding video channel 0 means encoding camera input 0.
Encoding video channel 1 means encoding camera input 1.
…
Encoding video channel 15 means encoding camera input 15.
Application setting (General Setting Dialog in Windows application)
5
SoftLogic
1. Video Matrix Function – Example 2
3/4
Register value
Camera Input 0
Camera Input 1
Camera Input 2
Camera Input 3
Camera Input 4
Camera Input 5
Camera Input 6
Camera Input 7
Camera Input 8
Camera Input 9
Camera Input 10
Camera Input 11
Camera Input 12
Camera Input 13
Camera Input 14
Camera Input 15
Video Channel 0
Video Channel 1
Video Channel 2
Video Channel 3
Video Channel 4
Video Channel 5
Video Channel 6
Video Channel 7
Video Channel 8
Video Channel 9
Video Channel 10
Video Channel 11
Video Channel 12
Video Channel 13
Video Channel 14
Video Channel 15
Video Matrix
H.264 encoder &
JPEG encoder
0x0100
VI_CH_SWITCH0
Encoded
Stream
data
0x0104
0x0108
VI_CH_SWITCH1
VI_CH_SWITCH2
SOLO6110
[29:25]
10
[24:20]
11
[19:15]
12
[14:10]
13
[9:5]
14
[4:0]
15
[29:25]
4
[24:20]
5
[19:15]
6
[14:10]
7
[9:5]
8
[4:0]
9
[24:20]
Any value
[19:15]
0
[14:10]
1
[9:5]
2
[4:0]
3
All camera inputs are connected to reverse numbered video channels.
Encoding video channel 0 means encoding camera input 15.
Encoding video channel 1 means encoding camera input 14.
…
Encoding video channel 15 means encoding camera input 0.
Application setting (General Setting Dialog in Windows application)
6
SoftLogic
1. Video Matrix Function – Example 3
4/4
Register value
Camera Input 0
Camera Input 1
Camera Input 2
Camera Input 3
Camera Input 4
Camera Input 5
Camera Input 6
Camera Input 7
Camera Input 8
Camera Input 9
Camera Input 10
Camera Input 11
Camera Input 12
Camera Input 13
Camera Input 14
Camera Input 15
Video Channel 0
Video Channel 1
Video Channel 2
Video Channel 3
Video Channel 4
Video Channel 5
Video Channel 6
Video Channel 7
Video Channel 8
Video Channel 9
Video Channel 10
Video Channel 11
Video Channel 12
Video Channel 13
Video Channel 14
Video Channel 15
Video Matrix
0x0100
VI_CH_SWITCH0
Encoded
Stream
data
0x0104
H.264 encoder &
JPEG encoder
0x0108
VI_CH_SWITCH1
VI_CH_SWITCH2
SOLO6110
[29:25]
0
[24:20]
4
[19:15]
3
[14:10]
2
[9:5]
1
[4:0]
0
[29:25]
4
[24:20]
4
[19:15]
4
[14:10]
3
[9:5]
2
[4:0]
1
[24:20]
Any value
[19:15]
15
[14:10]
14
[9:5]
13
[4:0]
4
Encoding video channel 0 means encoding camera input 0.
Encoding video channel 5 means encoding camera input 0.
-You can generate 2 encoded streams from camera input 0 by encoding video channel 0 and 5.
And 2 channel can be encoded with different encoding settings.
Encoding video channel 12 means encoding camera input 4. ...
Video Channel
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Camera Input
0
1
2
3
4
0
1
2
3
4
4
4
4
13
14
15
Application setting (General Setting Dialog in Windows application)
7
SoftLogic
2. Real Channel / Virtual Channel
Real channel stream
Video channel
SOLO6110
H.264
Encoder
1/1
The virtual channel is copy of real channel (share same input),
but can have different “Image Size”, “Quality”, “FPS”, “GOP”
value.
Virtual channel stream
FPS : Frames per second
GOP : Group of picture (Key frame interval)
8
SoftLogic
3. Video Matrix Function & Real Channel / Virtual Channel
Camera Input 0
Camera Input 1
Camera Input 2
Camera Input 3
Camera Input 4
Camera Input 5
Camera Input 6
Camera Input 7
Camera Input 8
Camera Input 9
Camera Input 10
Camera Input 11
Camera Input 12
Camera Input 13
Camera Input 14
Camera Input 15
Video Channel 0
Video Channel 1
Video Channel 2
Video Channel 3
Video Channel 4
Video Channel 5
Video Channel 6
Video Channel 7
Video Channel 8
Video Channel 9
Video Channel 10
Video Channel 11
Video Channel 12
Video Channel 13
Video Channel 14
Video Channel 15
H.264 encoder &
JPEG encoder
Video Matrix
1/1
Real Channel 0 / Virtual Channel 0 stream
Real Channel 1 / Virtual Channel 1 stream
Real Channel 2 / Virtual Channel 2 stream
Real Channel 3 / Virtual Channel 3 stream
Real Channel 4 / Virtual Channel 4 stream
Real Channel 5 / Virtual Channel 5 stream
Real Channel 6 / Virtual Channel 6 stream
Real Channel 7 / Virtual Channel 7 stream
Real Channel 8 / Virtual Channel 8 stream
Real Channel 9 / Virtual Channel 9 stream
Real Channel 10 / Virtual Channel 10 stream
Real Channel 11 / Virtual Channel 11 stream
Real Channel 12 / Virtual Channel 12 stream
Real Channel 13 / Virtual Channel 13 stream
Real Channel 14 / Virtual Channel 14 stream
Real Channel 15 / Virtual Channel 15 stream
Real Channel / Virtual Channel
SOLO6110
“Video Matrix Function” and “Real Channel / Virtual Channel” are independent of each other.
The “Video Matrix Function” reside between camera inputs and video channels.
And the “Real Channel / Virtual Channel” reside between video channels and encoded streams.
You can use video matrix function as virtual channel.
If you use SOLO6110-4, please read “About SOLO6110-4 Video Muxing and Encoding.ppt” document.
9
SoftLogic
H.264 Encoding
1. Encoding Procedure
2. H.264 Encoder Settings
3. Encoded H.264 Frame Data Format
4. About Encoder OSD
10
SoftLogic
H.264 Encoding
1. Encoding Procedure
1. H.264 encoder core initialization
2. Start encoding
3. Get encoded H.264 stream data from SOLO6110
4. End encoding
5. SOLO6110 SDRAM and register status during encoding
11
SoftLogic
1-1. H.264 encoder core initialization
“H.264 encoder
core initialization”
Request
1/1
“H.264 encoder
core initialization”
OK
1. Set H.264 Video Encoder Configuration Register
0x0610
VE_CFG0
Interrupt Mode
H.264 Code Buffer Size
H.264 Code Buffer Address
0x0614
VE_CFG1
Byte Align
Encoder Motion Flag
0x0630
VE_ATTR
Byte Order
12
SoftLogic
1-2. Start encoding
1/1
“Start encoding”
Request
“Start encoding”
OK
1. Set H.264 Property Register except for
“CAP_SCALE” or “CAP_SCALE_E” register
2. Set “CAP_SCALE” or “CAP_SCALE_E” register
to start encoding
Real Channel
Real Channel
0x0700 +(4 *N)
VE_CH_INTL
Picture Size
0x04C0 +(4 *N)
CAP_INTERVAL
FPS
0x0780 +(4 *N)
VE_CH_QP
Picture Quality
Virtual Channel
0x0800 +(4 *N)
VE_CH_GOP
Key Frame Interval
0x0480 +(4 *N)
Virtual Channel
0x0440 +(4 *N)
CAP_SCALE
Picture Size
Encoding Start / End
CAP_SCALE _E
Picture Size
Encoding Start / End
0x0500 +(4 *N)
CAP_INTERVAL_E
FPS
0x07C0 +(4 *N)
VE_CH_QP_E
Picture Quality
0x0840 +(4 *N)
VE_CH_GOP_E
Key Frame Interval
N : Channel number
13
SoftLogic
1-3. Get encoded H.264 stream data from SOLO6110
1/1
This diagram is based on SOLO6110 Windows RDK Application & Driver encoding procedure.
No request,
Wait event
“Get H.264 stream”
OK
1
Interrupt
Application
Driver
ISR
Thread
4
Copy
encoded frame in
SOLO6110 SDRAM
To
PC system memory
Get H.264
stream data
from
H.264 code
buffer
2
Encoded frame
check by reading
“Last queue
position”
Event Wait
Event Wait
SOLO6110
H.264 encoded frame
information queue
Get encoded frame
information
0x0A00
VE_H264_QUE 0
0x0A08
VE_H264_QUE 1
H.264 code buffer
overlap bug check
Signal Event
3
Signal Event
0x0A70
VE_H264_QUE 14
0x0A78
VE_H264_QUE 15
H.264 stream file
b
u
f
f
e
r
Last queue position (Index)
0x066C
8
c
o
d
e
…
7
6
H
2
6
4
VE_STATUS11
PC
H.264 code buffer
5
P2M(DMA)
transfer
14
SoftLogic
1-4. End encoding
1/1
“End encoding”
Request
“End encoding”
OK
1. Set “CAP_SCALE” or “CAP_SCALE_E” register as 0
Real Channel
0x0440 +(4 *N)
CAP_SCALE
Picture Size
Encoding Start / End
Virtual Channel
0x0480 +(4 *N)
CAP_SCALE _E
Picture Size
Encoding Start / End
N : Channel number
15
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
1/9
Stage
1. Encoding Start
2. Get 1st frame
3. Get 2nd frame
…
4. Get 15th frame
5. Get 16th frame
6. Get 17th frame
…
7. Get Nth frame
(In case of H.264 code buffer overlap)
8. Get N+1th frame
9. Encoding End
The “VE_H264_QUE N” registers save encoded frame information.
The number of these register is 16. This means that unless you miss 16 or more interrupt, you can get all encoded frame.
This register has information about “Motion Flag”, “VOP Type”, “Channel”, “H.264 Code Address Offset”.
Most important information is “H.264 Code Address Offset”. This is the position of encoded frame in H.264 code buffer (SOLO6110 SDRAM)
The “VE_STATUS11” register point to the index of the queue register (VE_H264_QUE N) which has information about just encoded frame.
(Please refer to 1-3. Get encoded H.264 stream data from SOLO6110)
The “VE_STATUS0 ~ VE_STATUS11” register always have information of just encoded frame. But you need not check this register value except
“VE_STATUS11” because SOLO6110 frame header (64 byte) is just copy of these register. SOLO6110 frame header consist of 52 byte H.264 video
Encoder status register (13 registers) and 12 byte garbage.
Thus the only information you need is position and size of encoded frame. This information can be taken from “VE_STATUS11” and
“VE_H264_QUE N” register.
16
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 1. Encoding Start
2/9
Stage 2. Get 1st frame
H.264 encoded frame
information queue
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
0x0A00 VE_H264_QUE 0
0x0A08 VE_H264_QUE 1
0x0A08 VE_H264_QUE 1
0x0A10 VE_H264_QUE 2
0x0A10 VE_H264_QUE 2
0x0A18 VE_H264_QUE 3
0x0A18 VE_H264_QUE 3
0x0A20 VE_H264_QUE 4
1st frame
0x0A20 VE_H264_QUE 4
H
.
2
6
4
0x0A28 VE_H264_QUE 5
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
0x0A40 VE_H264_QUE 8
0x0A48 VE_H264_QUE 9
0x0A50 VE_H264_QUE 10
0x0A58 VE_H264_QUE 11
0x0A60 VE_H264_QUE 12
0x0A68 VE_H264_QUE 13
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
c
o
d
e
b
u
f
f
e
r
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
0x0A40 VE_H264_QUE 8
0x0A48 VE_H264_QUE 9
0x0A50 VE_H264_QUE 10
0x0A58 VE_H264_QUE 11
0x0A60 VE_H264_QUE 12
0x0A68 VE_H264_QUE 13
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
Last queue position (Index)
Last queue position (Index)
0x066C
0x066C
VE_STATUS11
SOLO6110
H
.
2
6
4
0x0A28 VE_H264_QUE 5
c
o
d
e
b
u
f
f
e
r
VE_STATUS11
SOLO6110
17
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 2. Get 1st frame
H.264 encoded frame
information queue
3/9
Stage 3. Get 2nd frame
1st frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
0x0A00 VE_H264_QUE 0
0x0A08 VE_H264_QUE 1
0x0A08 VE_H264_QUE 1
0x0A10 VE_H264_QUE 2
0x0A10 VE_H264_QUE 2
0x0A18 VE_H264_QUE 3
0x0A18 VE_H264_QUE 3
0x0A20 VE_H264_QUE 4
1st frame
2nd frame
0x0A20 VE_H264_QUE 4
H
.
2
6
4
0x0A28 VE_H264_QUE 5
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
0x0A40 VE_H264_QUE 8
0x0A48 VE_H264_QUE 9
0x0A50 VE_H264_QUE 10
0x0A58 VE_H264_QUE 11
0x0A60 VE_H264_QUE 12
0x0A68 VE_H264_QUE 13
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
c
o
d
e
b
u
f
f
e
r
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
0x0A40 VE_H264_QUE 8
0x0A48 VE_H264_QUE 9
0x0A50 VE_H264_QUE 10
0x0A58 VE_H264_QUE 11
0x0A60 VE_H264_QUE 12
0x0A68 VE_H264_QUE 13
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
Last queue position (Index)
Last queue position (Index)
0x066C
0x066C
VE_STATUS11
SOLO6110
H
.
2
6
4
0x0A28 VE_H264_QUE 5
c
o
d
e
b
u
f
f
e
r
VE_STATUS11
SOLO6110
18
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 3. Get 2nd frame
H.264 encoded frame
information queue
Stage 4. Get 15th frame
H.264 encoded frame
information queue
1st frame
0x0A00 VE_H264_QUE 0
0x0A08 VE_H264_QUE 1
0x0A08 VE_H264_QUE 1
0x0A10 VE_H264_QUE 2
0x0A10 VE_H264_QUE 2
0x0A18 VE_H264_QUE 3
0x0A18 VE_H264_QUE 3
0x0A20 VE_H264_QUE 4
0x0A20 VE_H264_QUE 4
H
.
2
6
4
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
0x0A40 VE_H264_QUE 8
0x0A48 VE_H264_QUE 9
0x0A50 VE_H264_QUE 10
0x0A58 VE_H264_QUE 11
0x0A60 VE_H264_QUE 12
0x0A68 VE_H264_QUE 13
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
c
o
d
e
b
u
f
f
e
r
3rd frame
4th frame
5th frame
6th frame
H
.
2
6
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
…
c
0x0A48 VE_H264_QUE 9
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A78 VE_H264_QUE 15
Last queue position (Index)
0x066C
0x066C
SOLO6110
2nd frame
0x0A28 VE_H264_QUE 5
Last queue position (Index)
VE_STATUS11
1st frame
0x0A00 VE_H264_QUE 0
2nd frame
0x0A28 VE_H264_QUE 5
4/9
e
b
f
r
VE_STATUS11
SOLO6110
19
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 4. Get 15th frame
H.264 encoded frame
information queue
Stage 5. Get 16th frame
1st frame
0x0A00 VE_H264_QUE 0
5/9
2nd frame
0x0A08 VE_H264_QUE 1
H.264 encoded frame
information queue
1st frame
0x0A00 VE_H264_QUE 0
2nd frame
0x0A08 VE_H264_QUE 1
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
7th frame
2
6
8th frame
4
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
2
6
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
0x0A50 VE_H264_QUE 10
c
10th oframe
11th dframe
e
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A48 VE_H264_QUE 9
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
b
f
15th eframe
r
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A78 VE_H264_QUE 15
Last queue position (Index)
Last queue position (Index)
0x066C
0x066C
VE_STATUS11
SOLO6110
c
0x0A48 VE_H264_QUE 9
e
b
f
r
16th frame
VE_STATUS11
SOLO6110
20
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 5. Get 16th frame
H.264 encoded frame
information queue
Stage 6. Get 17th frame
1st frame
0x0A00 VE_H264_QUE 0
6/9
2nd frame
0x0A08 VE_H264_QUE 1
H.264 encoded frame
information queue
1st frame
0x0A00 VE_H264_QUE 0
2nd frame
0x0A08 VE_H264_QUE 1
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
7th frame
2
6
8th frame
4
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
2
6
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
0x0A50 VE_H264_QUE 10
c
10th oframe
11th dframe
e
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A48 VE_H264_QUE 9
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
b
f
15th eframe
r
16th frame
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A78 VE_H264_QUE 15
Last queue position (Index)
Last queue position (Index)
0x066C
0x066C
VE_STATUS11
SOLO6110
c
0x0A48 VE_H264_QUE 9
e
b
f
r
16th frame
17th frame
VE_STATUS11
SOLO6110
21
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
7/9
Stage 7. Get Nth frame
Nth frame 2/2
1st frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
2nd frame
0x0A08 VE_H264_QUE 1
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
2
6
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
c
0x0A48 VE_H264_QUE 9
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A78 VE_H264_QUE 15
b
f
r
16th frame
17th frame
Last queue position (Index)
0x066C
e
VE_STATUS11
…
Nth frame 1/2
SOLO6110
22
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 7. Get Nth frame
Stage 8. Get N +1th frame
Nth frame 2/2
1st frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
8/9
2nd frame
0x0A08 VE_H264_QUE 1
Nth frame 2/2
1st frame
N +1th frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
2nd frame
0x0A08 VE_H264_QUE 1
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
H
0x0A28 VE_H264_QUE 5
.
7th frame
2
6
8th frame
4
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
M
0x0A28 VE_H264_QUE 5
P
E
G
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
0x0A50 VE_H264_QUE 10
c
10th oframe
11th dframe
e
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A48 VE_H264_QUE 9
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
f
15th eframe
r
16th frame
17th frame
Last queue position (Index)
0x066C
b
VE_STATUS11
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A78 VE_H264_QUE 15
e
b
f
r
16th frame
17th frame
Last queue position (Index)
0x066C
SOLO6110
c
0x0A48 VE_H264_QUE 9
VE_STATUS11
…
…
Nth frame 1/2
Nth frame 1/2
SOLO6110
23
SoftLogic
1-5. SOLO6110 SDRAM and register status during encoding
Stage 8. Get N +1th frame
Stage 9. Encoding End
Nth frame 2/2
1st frame
N +1th frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
9/9
2nd frame
0x0A08 VE_H264_QUE 1
Nth frame 2/2
1st frame
N +1th frame
H.264 encoded frame
information queue
0x0A00 VE_H264_QUE 0
2nd frame
0x0A08 VE_H264_QUE 1
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
M
0x0A28 VE_H264_QUE 5
P
7th frame
E
G
8th frame
4
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
3rd frame
0x0A10 VE_H264_QUE 2
4th frame
0x0A18 VE_H264_QUE 3
5th frame
0x0A20 VE_H264_QUE 4
6th frame
M
0x0A28 VE_H264_QUE 5
P
E
G
8th frame
4
7th frame
0x0A30 VE_H264_QUE 6
0x0A38 VE_H264_QUE 7
9th frame
0x0A40 VE_H264_QUE 8
0x0A50 VE_H264_QUE 10
c
10th oframe
11th dframe
e
0x0A58 VE_H264_QUE 11
12th frame
0x0A60 VE_H264_QUE 12
13th uframe
0x0A60 VE_H264_QUE 12
13th uframe
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A68 VE_H264_QUE 13
f
14th frame
0x0A70 VE_H264_QUE 14
15th eframe
0x0A48 VE_H264_QUE 9
0x0A70 VE_H264_QUE 14
0x0A78 VE_H264_QUE 15
f
15th eframe
r
16th frame
17th frame
Last queue position (Index)
0x066C
b
VE_STATUS11
10th oframe
0x0A50 VE_H264_QUE 10
11th dframe
0x0A58 VE_H264_QUE 11
12th frame
0x0A78 VE_H264_QUE 15
e
b
f
r
16th frame
17th frame
Last queue position (Index)
0x066C
SOLO6110
c
0x0A48 VE_H264_QUE 9
VE_STATUS11
…
…
Nth frame 1/2
Nth frame 1/2
SOLO6110
24
SoftLogic
H.264 Encoding
2. H.264 Encoder Settings
1. Encoder property and related registers
2. Picture Size (Picture Resolution)
3. FPS (Frames per second)
4. Picture Quality (QP)
5. Key Frame Interval (GOP)
25
SoftLogic
2-1. Encoder property and related registers
Property Name
Picture Size
(Picture
Resolution)
FPS
(Frames per
second)
Range of value
Encoder Off
Property Name
NTSC
PAL
0
0
D1
704 x 480
704 x 576
Half D1
704 x 240
704 x 288
CIF
352 x 240
352 x 288
NTSC
PAL
60, 30, …
50, 25, …
Picture Size
(Picture
Resolution)
1/1
Related register (Address / Name)
0x0440 +(4 *N)
CAP_SCALE
0x0480 +(4 *N)
CAP_SCALE_E
0x0700 +(4 *N)
VE_CH_INTL
FPS
(Frames per
second)
0x04C0 +(4 *N)
CAP_INTERVAL
0x0500 +(4 *N)
CAP_INTERVAL_E
0x0780 +(4 *N)
VE_CH_QP
0x07C0 +(4 *N)
VE_CH_QP_E
0x0800 +(4 *N)
VE_CH_GOP
0x0840 +(4 *N)
VE_CH_GOP_E
Picture Quality
(QP)
3 (Best) ~ 31 (Worst)
QP 1, 2 is not used.
Picture Quality
(QP)
Key Frame
Interval
(GOP)
1 (Every frame is Key frame) ~ 255
Key Frame
Interval
(GOP)
N : Channel Number
xxx_E : This means virtual channel property.
26
SoftLogic
2-2. Picture Size (Picture Resolution)
Property Name
Range of value
Picture Size
(Picture Resolution)
Property Name
NTSC
PAL
0
0
Encoder Off
Picture Size
(Picture Resolution)
D1
704 x 480
704 x 576
Half D1
704 x 240
704 x 288
CIF
352 x 240
352 x 288
Channel 0
Picture Size
1/1
Related register (Address / Name)
0x0440 +(4 *N)
CAP_SCALE
0x0480 +(4 *N)
CAP_SCALE_E
0x0700 +(4 *N)
VE_CH_INTL
Channel 1
Channel 15
0x0440
0x0700
0x0444
0x0704
0x047C
0x073C
CAP_SCALE
VE_CH_INTL
CAP_SCALE
VE_CH_INTL
CAP_SCALE
VE_CH_INTL
Encoder Off
0
0
0
0
0
0
…
D1
9
1
9
1
9
1
Half D1
1
0
1
0
1
0
CIF
2
0
2
0
2
0
You cannot change “Picture Size” while encoding. “Picture Size” can be set only when before encoding.
27
SoftLogic
2-3. FPS (Frames per second)
Property Name
Range of value
FPS
(Frames per second)
NTSC
NTSC
PAL
60, 30, …
50, 25, …
Property Name
FPS
(Frames per second)
Picture Size
FPS
D1
30 /(CAP_INTERVAL +1)
Half D1, CIF
IF (CAP_INTERVAL == 0 )
60
ELSE
30 /CAP_INTERVAL
D1
PAL
1/1
IF (CAP_INTERVAL == 0 )
50
ELSE
25 /CAP_INTERVAL
CAP_INTERVAL
0x0500 +(4 *N)
CAP_INTERVAL_E
CAP_INTERVAL is same as Skipped Frame Number.
CAP_INTERVAL == 0 means no frame is skipped.
(NTSC D1 30 frames, PAL D1 25 frames, …)
CAP_INTERVAL == 1 means 1 frame is skipped.
(Every second frame is encoded.)
CAP_INTERVAL == 2 means 2 frame is skipped.
(Every third frame is encoded.)
…
25 /(CAP_INTERVAL +1)
Half D1, CIF
Related register (Address / Name)
0x04C0 +(4 *N)
D1 is frame picture, the max. frame rate is 30 (25). And other picture
size (Half D1, CIF) is field picture, the max. frame rate is 60 (50).
NTSC
PAL
D1
Half D1, CIF
FPS
CAP_INTERVAL
OR
CAP_INTERVAL_E
FPS
CAP_INTERVAL
OR
CAP_INTERVAL_E
30
0
60
15
1
10
2
7.5
D1
Half D1, CIF
FPS
CAP_INTERVAL
OR
CAP_INTERVAL_E
FPS
CAP_INTERVAL
OR
CAP_INTERVAL_E
0
25
0
50
0
30
1
12.5
1
25
1
15
2
8.3
2
12.5
2
3
10
3
6.25
3
8.3
3
…
…
…
…
…
…
…
…
0.25
119
0.5
60
0.25
99
0.5
50
0.2
149
0.25
120
0.2
124
0.25
100
0.1
299
0.2
150
0.1
249
0.2
125
You can change “FPS” while encoding.
CAP_INTERVAL for Real Channel
CAP_INTERVAL_E for Virtual Channel
28
SoftLogic
2-4. Picture Quality (QP)
1/1
Property Name
Range of value
Property Name
Related register (Address / Name)
Picture Quality
(QP)
3 (Best) ~ 31 (Worst)
QP 1, 2 is not used.
Picture Quality
(QP)
0x0780 +(4 *N)
VE_CH_QP
0x07C0 +(4 *N)
VE_CH_QP_E
Real
Channel 0
Virtual
Channel 0
Real
Channel 1
Virtual
Channel 1
0x0780
0x07C0
0x0784
0x07C4
VE_CH_QP
VE_CH_QP_E
VE_CH_QP
VE_CH_QP_E
3 (Best)
3
3
3
3
4
4
4
4
4
…
…
…
…
…
30
30
30
30
30
31 (Worst)
31
31
31
31
Picture
Quality
…
You can change “Picture Quality” while encoding.
29
SoftLogic
2-5. Key Frame Interval (GOP)
1/1
Property Name
Range of value
Property Name
Key Frame Interval
(GOP)
1 (Every frame is Key frame) ~ 255
Key Frame Interval
(GOP)
Related register (Address / Name)
0x0800 +(4 *N)
VE_CH_GOP
0x0840 +(4 *N)
VE_CH_GOP_E
Real
Channel 0
Virtual
Channel 0
Real
Channel 1
Virtual
Channel 1
0x0800
0x0840
0x0804
0x0844
VE_CH_GOP
VE_CH_GOP_E
VE_CH_GOP
VE_CH_GOP_E
1
1
1
1
1
2
2
2
2
2
…
…
…
…
…
254
254
254
254
254
255
255
255
255
255
Key Frame
Interval
…
Key Frame Interval
1
I
I
I
I
I
I
I
I
I
I
I
I
...
I frame only
2
I
P
I
P
I
P
I
P
I
P
I
P
...
1 I frame + 1 P frame
3
I
P
P
I
P
P
I
P
P
I
P
P
...
1 I frame + 2 P frame
4
I
P
P
P
I
P
P
P
I
P
P
P
…
1 I frame + 3 P frame
P
P
P
P
P
…
1 I frame + 254 P frame
…
255
...
I
P
P
P
P
P
P
You can change “Key Frame Interval” while encoding.
30
SoftLogic
H.264 Encoding
3. Encoded H.264 Frame Data Format
1. Encoded H.264 Frame Data Format
31
SoftLogic
3. Encoded H.264 Frame Data Format
1/1
SOLO6110 H.264 Frame Header
SOLO6110
H.264
Frame Header
Encoded Frame
64 Byte
Encoded
M Frame
Encoder
Motion
Data
(Optional)
P
E
G Frame
Encoded
4
256 Byte
c
Encoded
Frame
o
d
e
Encoded Frame
b
u
Encoded
f Frame
f
e Frame
Encoded
r
Frame Data
(H.264
VOP
Header
+
H.264
Frame
Data)
Offset
Data
00 (0x00)
VE_STATUS0
04 (0x04)
VE_STATUS1
08 (0x08)
VE_STATUS2
12 (0x0c)
VE_STATUS3
16 (0x10)
VE_STATUS4
20 (0x14)
VE_STATUS5
24 (0x18)
VE_STATUS6
28 (0x1c)
VE_STATUS7
32 (0x20)
VE_STATUS8
36 (0x24)
VE_STATUS9
40 (0x28)
VE_STATUS10
44 (0x2c)
VE_STATUS11
48 (0x30)
VE_STATUS12
52 (0x34)
dummy
56 (0x38)
dummy
60 (0x3c)
dummy
SOLO6110 H.264 Frame Header is just mirror
of “H.264 Video Encoder Status Register”.
0x0640 : VE_STATUS0
0x0644 : VE_STATUS1
…
0x0670 : VE_STATUS12
Variable Size
The size of “Frame Data” is aligned size.
The “H.264 Code Size” value in VE_STATUS11 or VE_STATUS0 is the true H.264
frame data size.
The size of “Frame Data” is (“H.264 Code Size” +”Align Byte”) &(~(“Align Byte” -1))
…
H.264 Code Buffer
Encoded Frame
Example)
If “H.264 Code Size” is 35776 and “Align Byte” is 32,
Frame Data = (35576 +0x20) &0xfffe0
32
SoftLogic
H.264 Encoding
4. About Encoder OSD
1. About Encoder OSD
33
SoftLogic
4. About Encoder OSD
1/1
1024 pixels
32 pixels
16 pixels
8 pixels
1
32
33
2
3
34
35
4
5
36
37
6
7
38
39
8
9
40
41
28
29
60
61
30
31
62
63
2048 +0
2048 +1
2048 +32 2048 +33
2048 +2
2048 +3
2048 +34 2048 +35
2048 +4
2048 +5 2048 +36 2048 +37
2048 +6
2048 +7
2048 +38 2048 +39
2048 +8
2048 +9
2048 +40 2048 +41
1
2
3
…
65535
1024 pixels
BYTE OSD_Buffer[65536]
0
…
…
0
…
…
2048 +28 2048 +29 2048 +60 2048 +61
2048 +30 2048 +31 2048 +62 2048 +63
…
Bit / Pixel is 1.
1024 pixels x 1024 pixels /8 (Byte) = 131072 Byte
In PAL video system,
size of OSD image is less than size of PAL image (704 x 576).
Thus, if you want to display OSD at bottom line of PAL image,
you should change encoder OSD position value.
In NTSC video system, there is no problem in encoder OSD displaying.
34
SoftLogic