summaryrefslogtreecommitdiff
authorJiacheng Mei <jiacheng.mei@amlogic.com>2018-03-23 12:57:11 (GMT)
committer Zhi Zhou <zhi.zhou@amlogic.com>2018-03-28 08:13:34 (GMT)
commitc4d1f86ec0ec035f63cb12d33a2c2c4f912547aa (patch)
tree8a32f886ba1808f15b0cdf7804e703d00b3c15f1
parentf917338a244638bac3b78a38b26d28034dc35543 (diff)
downloadmedia_modules-c4d1f86ec0ec035f63cb12d33a2c2c4f912547aa.zip
media_modules-c4d1f86ec0ec035f63cb12d33a2c2c4f912547aa.tar.gz
media_modules-c4d1f86ec0ec035f63cb12d33a2c2c4f912547aa.tar.bz2
PD#162608: add h264 encoder support for cts[2/2]
1.add encoder support for Oreo 2.change ucode load mode for h264 encoder Change-Id: Ia407a4c205f17ecee6be1e6a741acf2bdadc04e5 Signed-off-by: Jiacheng Mei <jiacheng.mei@amlogic.com>
Diffstat
-rw-r--r--Media.mk2
-rw-r--r--drivers/common/firmware/firmware_cfg.h12
-rw-r--r--drivers/common/firmware/firmware_drv.c11
-rw-r--r--drivers/common/firmware/firmware_priv.h1
-rw-r--r--drivers/frame_sink/encoder/h264/encoder.c24
-rw-r--r--firmware/gx_h264_enc.bin221
-rw-r--r--firmware/h264_enc.bin652
7 files changed, 683 insertions, 240 deletions
diff --git a/Media.mk b/Media.mk
index 37cb40a..7b22fae 100644
--- a/Media.mk
+++ b/Media.mk
@@ -16,7 +16,7 @@ CONFIGS := CONFIG_AMLOGIC_MEDIA_VDEC_MPEG12=m \
CONFIG_AMLOGIC_MEDIA_VDEC_AVS=m \
CONFIG_AMLOGIC_MEDIA_VDEC_AVS2=m \
CONFIG_AMLOGIC_MEDIA_VENC_H264=m \
- CONFIG_AMLOGIC_MEDIA_VECN_H265=m \
+ CONFIG_AMLOGIC_MEDIA_VENC_H265=m \
CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION=y
CONFIG_AMLOGIC_MEDIA_GE2D=y
diff --git a/drivers/common/firmware/firmware_cfg.h b/drivers/common/firmware/firmware_cfg.h
index ae34ef1..c98ceef 100644
--- a/drivers/common/firmware/firmware_cfg.h
+++ b/drivers/common/firmware/firmware_cfg.h
@@ -24,11 +24,19 @@
{MESON_CPU_MAJOR_ID_TXLX, VIDEO_PACKAGE, "video_ucode.bin"},
{MESON_CPU_MAJOR_ID_G12A, VIDEO_PACKAGE, "video_ucode.bin"},
+/* Note: if the addition of new package has the same name */
+/* as the firmware in the video_ucode.bin, the firmware */
+/* in the video_ucode.bin will be ignored yet, because the */
+/* video_ucode.bin will always be processed in the end */
+{MESON_CPU_MAJOR_ID_GXM, VIDEO_PACKAGE, "h264_enc.bin"},
+{MESON_CPU_MAJOR_ID_GXL, VIDEO_PACKAGE, "h264_enc.bin"},
+{MESON_CPU_MAJOR_ID_TXLX, VIDEO_PACKAGE, "h264_enc.bin"},
+{MESON_CPU_MAJOR_ID_TXL, VIDEO_PACKAGE, "h264_enc.bin"},
+{MESON_CPU_MAJOR_ID_G12A, VIDEO_PACKAGE, "h264_enc.bin"},
+
/*firmware for a special format, to replace the format in the package.*/
{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_HEVC, "h265.bin"},
{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_H264, "h264.bin"},
{MESON_CPU_MAJOR_ID_GXL, VIDEO_DEC_H264_MULTI, "h264_multi.bin"},
-{MESON_CPU_MAJOR_ID_GXM, VIDEO_ENC_H264, "gx_h264_enc.bin"},
-{MESON_CPU_MAJOR_ID_GXL, VIDEO_ENC_H264, "gx_h264_enc.bin"},
diff --git a/drivers/common/firmware/firmware_drv.c b/drivers/common/firmware/firmware_drv.c
index eb00d3f..6827bd8 100644
--- a/drivers/common/firmware/firmware_drv.c
+++ b/drivers/common/firmware/firmware_drv.c
@@ -320,6 +320,7 @@ static ssize_t info_show(struct class *class,
if (IS_ERR_OR_NULL(info->data))
continue;
+ pr_info("%10s : %s\n", "from", info->src_from);
pr_info("%10s : %s\n", "name", info->name);
pr_info("%10s : %d\n", "size",
info->data->header.data_size);
@@ -373,6 +374,7 @@ static int set_firmware_info(void)
strcpy(info->path, path);
strcpy(info->name, name);
+ strcpy(info->src_from, name);
info->type = ucode_info[i].type;
info->data = NULL;
@@ -406,6 +408,9 @@ static int check_repeat(struct firmware_s *data, enum firmware_type_e type)
return -1;
}
+ if (type == FIRMWARE_MAX)
+ return 0;
+
list_for_each_entry(info, &mgr->head, node) {
if (info->type != type)
continue;
@@ -419,7 +424,8 @@ static int check_repeat(struct firmware_s *data, enum firmware_type_e type)
return 0;
}
-static int firmware_parse_package(char *buf, int size)
+static int firmware_parse_package(struct firmware_info_s *fw_info,
+ char *buf, int size)
{
int ret = 0;
struct package_info_s *pack_info;
@@ -461,6 +467,7 @@ static int firmware_parse_package(char *buf, int size)
strcpy(info->path, path);
strcpy(info->name, pack_info->header.name);
+ strcpy(info->src_from, fw_info->src_from);
info->type = get_firmware_type(pack_info->header.format);
len = pack_info->header.length;
@@ -556,7 +563,7 @@ static int set_firmware_data(void)
switch (magic) {
case PACK:
- ret = firmware_parse_package(buf, size);
+ ret = firmware_parse_package(info, buf, size);
del_info(info);
kfree(info);
diff --git a/drivers/common/firmware/firmware_priv.h b/drivers/common/firmware/firmware_priv.h
index 0a96349..4b03fd8 100644
--- a/drivers/common/firmware/firmware_priv.h
+++ b/drivers/common/firmware/firmware_priv.h
@@ -32,6 +32,7 @@ struct firmware_info_s {
struct list_head node;
char name[32];
char path[64];
+ char src_from[32];
enum firmware_type_e type;
struct firmware_s *data;
};
diff --git a/drivers/frame_sink/encoder/h264/encoder.c b/drivers/frame_sink/encoder/h264/encoder.c
index 5d90b56..48e701a 100644
--- a/drivers/frame_sink/encoder/h264/encoder.c
+++ b/drivers/frame_sink/encoder/h264/encoder.c
@@ -405,18 +405,16 @@ static struct BuffInfo_s amvenc_buffspec[] = {
};
enum ucode_type_e {
- UCODE_GX,
- UCODE_GXTV,
UCODE_GXL,
UCODE_TXL,
+ UCODE_G12A,
UCODE_MAX
};
const char *ucode_name[] = {
- "h264_enc_mc_gx",
- "h264_enc_mc_gxtv",
- "gx_h264_enc",
- "h264_enc_mc_txl",
+ "gxl_h264_enc",
+ "txl_h264_enc_cavlc",
+ "ga_h264_enc_cabac",
};
static void dma_flush(u32 buf_start, u32 buf_size);
@@ -424,18 +422,16 @@ static void cache_flush(u32 buf_start, u32 buf_size);
static const char *select_ucode(u32 ucode_index)
{
- enum ucode_type_e ucode = UCODE_GX;
+ enum ucode_type_e ucode = UCODE_GXL;
switch (ucode_index) {
case UCODE_MODE_FULL:
- if (get_cpu_type() >= MESON_CPU_MAJOR_ID_TXL)
+ if (get_cpu_type() >= MESON_CPU_MAJOR_ID_G12A)
+ ucode = UCODE_G12A;
+ else if (get_cpu_type() >= MESON_CPU_MAJOR_ID_TXL)
ucode = UCODE_TXL;
- else if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXL)
+ else /* (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXL) */
ucode = UCODE_GXL;
- else if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXTVBB)
- ucode = UCODE_GXTV;
- else /* if (get_cpu_type() >= MESON_CPU_MAJOR_ID_GXBB) */
- ucode = UCODE_GX;
break;
break;
default:
@@ -3300,7 +3296,7 @@ Again:
ENCODER_BUFFER_DUMP);
size = wq->mem.dump_info_ddr_size;
cache_flush(buf_start, size);
- enc_pr(LOG_DEBUG, "CBR flush dump_info done");
+ //enc_pr(LOG_DEBUG, "CBR flush dump_info done");
}
if (request->flush_flag &
AMVENC_FLUSH_FLAG_REFERENCE) {
diff --git a/firmware/gx_h264_enc.bin b/firmware/gx_h264_enc.bin
deleted file mode 100644
index 5e38e27..0000000
--- a/firmware/gx_h264_enc.bin
+++ b/dev/null
@@ -1,221 +0,0 @@
-EDOCuµýgxl_h264_enc.bin
-
-
-
-"
-ˆÀ`
-Àx
-@*
-À[x
-
-Àx  €
-H
-H
-À‰! Šò
-
-€
-¢@‰’@HR`  È€@³ ! € €
-€
-¢@‰’@HR`      Ob I
-
-w
-vÏJH‰€€
-
-À¢
-
-
-@¡
-
-@^x
-
-
-
-€
-¢@‰’@HR`  € €
-€
-¢@‰’@HR`        Ob H
-
-w
-v n n nÀý nH
-€
-Ï@
-
-Ï@
- €‰¢
-‰‚€ M‰¢@ËÿŸÊbÀ
-
-ÓJ Ó
-‰¢@I €J’@‰ ÀJ À
-
-€
-À 
-Š@
-
-À€¢
-MMÓG Žø@OÀŽ
-@
-ˆÀ@ò
-9 Éÿ¿
-6 6 6 6 Àx
-€ €€Ê’
-K€‹@˼€ÊR Š
-ÒJ
-Q €  PÌ@Ê¢
- PCËò€K€ï
-€€3ƒ ó‚ ƒP Œ@Š
- dO eOHÀ¡
- aO fOˆ
- bO gO cO‰@Š
-ÀÂ
-Á€‰€HB
-H’@I@I"@
-À€‰¢
-‰€H¢@
-  @Ú~ Š"@‰’
-À€‰¢
-‰€I
-À€‰¢
-
-
-€K€‹@Š
-ÒJ
-Q €  P PCËò€K€ï
-"
-
-À€È€H@" @ÈÀ‰
-@Àc
-ˆÀ€©
-9 
-6 6 6 6 Àx
-
-€ €€ʲ
-K€‹@ Â`
-˼€˵€ÊR Š
-ÒJ
-Q €  PÌ@Ê¢
- PCËò€K€ï
-€€3ƒ ó‚ ƒP Œ@Š
- ‚a
-+! @¡
- dO eOHÀ¡
- aO fOˆ
- bO gO cO‰@Š
-ÀÂ 
-Ê¿€À
-
-
-
-Êý¿C
-
-
-
-w
-À€J K L  M €x
-ÀŠ’Â "
-Æ€
-À€‰¢
-
-À€‰¢
-€
-x H€É€HÒÏ
-
-@ÿ
-H" €6~
-J2€IÀ 
-Š4€
-9€ˆ
- €
-¥€ H2@
-
-AJ¥€ €H2À
-
-ÀJ¥€ H€€¢
-@
-HÀ
-¥€ J¥€ ÕJHÀ
->OÁà €)~
-JO
-
-JGÃ
- 
- I
- € Ê €
- 
- À Ê À
- 
-
-
-D 
-7
-
-
-E 
-8
- IJ
- À 
-@ÿ I@
- I
- € Ê €
- 
- À Ê À
- 
-
-À 
-@þ Š@
-€Š
-a 3 €
-! 
-€
-¢@‰’@HR`  È€
-€
-¢@‰’@HR`      Ob I
-
-€Š
-a 3 @
-! À
-€
-¢@‰’@HR`  € €
-€
-¢@‰’@HR`        OH". €¯
-b I
-4MŠ
-€¯
-
-Ó
-
-À@ À€ ÀÀ À
-À@€
-À@
-À
-À 
-€@`À
- €B€c
- €@@°€
-€
-À@
-€@`À
- €‚
- €@@P
-€
-À€
-
-€@
- €ÁCb 
-€@
- €@. 
-€‰RA I
-
-@€‰’
-
-€
-€† 5M6ÀJvÀ¥
-¶€¥
-6A¤
-
-
-
diff --git a/firmware/h264_enc.bin b/firmware/h264_enc.bin
new file mode 100644
index 0000000..41b1d00
--- a/dev/null
+++ b/firmware/h264_enc.bin
@@ -0,0 +1,652 @@
+KCAP
+x
+ˆÀ`
+Àx
+@*
+À[x
+
+Àx  €
+H
+H
+À‰! Šò
+
+€
+¢@‰’@HR`  È€@³ ! € €
+€
+¢@‰’@HR`      Ob I
+
+w
+vÏJH‰€€
+
+À¢
+
+
+@¡
+
+@^x
+
+
+
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        Ob H
+
+w
+v n n nÀý nH
+€
+Ï@
+
+Ï@
+ €‰¢
+‰‚€ M‰¢@ËÿŸÊbÀ
+
+ÓJ Ó
+‰¢@I €J’@‰ ÀJ À
+
+€
+À 
+Š@
+
+À€¢
+MMÓG Žø@OÀŽ
+@
+ˆÀ@ò
+9 Éÿ¿
+6 6 6 6 Àx
+€ €€Ê’
+K€‹@˼€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ
+Á€‰€HB
+H’@I@I"@
+À€‰¢
+‰€H¢@
+À€‰¢
+‰€I
+À€‰¢
+
+
+€K€‹@Š
+ÒJ
+Q €  P PCËò€K€ï
+"
+
+À€È€H@" @ÈÀ‰
+@Àc
+ˆÀ€©
+9 
+6 6 6 6 Àx
+
+€ €€ʲ
+K€‹@ Â`
+˼€˵€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ ‚a
++! @¡
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ 
+Ê¿€À
+
+
+
+Êý¿C
+
+
+
+w
+À€J K L  M €x
+ÀŠ’Â "
+Æ€
+À€‰¢
+
+À€‰¢
+€
+x H€É€HÒÏ
+
+@ÿ
+H" @9~
+J2€IÀ 
+Š4€
+9€ˆ
+ €
+¥€ H2@
+
+AJ¥€ €H2À
+
+ÀJ¥€ H€€¢
+@
+HÀ
+¥€ J¥€ ÕJHÀ
+>OÁà @,~
+JOÀ*~
+
+JGÃ
+ 
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+
+D 
+7
+
+
+E 
+8
+ IJ
+ À 
+@ÿ I@
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+À 
+@þ Š@
+€Š
+a 3 €
+! 
+€
+¢@‰’@HR`  È€
+€
+¢@‰’@HR`      Ob I
+
+€Š
+a 3 @
+! À
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        OH". €¯
+b I
+4MŠ
+€¯
+
+Ó
+
+À@ À€ ÀÀ À
+À@€
+À@
+À
+À 
+€@`À
+ €B€c
+ €@@°€
+€
+À@
+€@`À
+ €‚
+ €@@P
+€
+À€
+
+€@
+ €ÁCb 
+€@
+ €@. 
+€‰RA I
+
+@€‰’
+
+€6ÀJvÀ¥
+¶€¥
+6A¤
+
+
+
+x
+ˆÀ`
+Àx
+@*
+@^x
+
+Àx  €
+H
+H
+À‰! Šò
+
+€
+¢@‰’@HR`  È€@³ ! € €
+€
+¢@‰’@HR`      Ob ˆ‘€ ` I
+
+w
+vÏJH‰€€
+
+À¢
+
+
+@¡
+
+€ax
+
+
+
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        
+
+w
+v n n nÀý nH
+€
+Ï@
+
+Ï@
+ €‰¢
+‰‚€ M‰¢@ËÿŸÊbÀ
+
+ÓJ Ó
+‰¢@I €J’@‰ ÀJ À
+
+€
+À 
+Š@
+
+À
+MMÓG Žø@OÀŽ
+@
+ˆÀÀú
+9 Éÿ¿
+6 6 6 6 Àx
+€ €€Ê’
+K€‹@˼€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ
+Á€‰€HB
+H’@I@I"@
+À€‰¢
+‰€H¢@
+Р
+6 Š"@‰’
+À€‰¢
+‰€I
+6 ˆ
+6  ‰€H’@I"@
+À€‰¢
+
+
+6 
+
+
+€K€‹@Š
+ÒJ
+Q €  P PCËò€K€ï
+"
+
+À€aM8cMÈ€H@" @ÈÀ‰
+@Àc
+ˆÀ€­
+9 
+6 6 6 6 Àx
+
+€ €€ʲ
+K€‹@ Â`
+˼€˵€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ ‚a
++! @¡
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ 
+Ê¿€@
+
+
+Êý¿C
+
+
+
+w
+À€J K L  M €x
+Ä€ŠÂ "
+È€
+6 ‰€H¢@JB@
+À€‰¢
+
+„ 
+À€‰¢
+€
+x H€É€HÒÏ
+
+@ÿ
+H" À%~
+J2€IÀ 
+Š4€
+9€ˆ
+ €
+¥€ H2@
+
+AJ¥€ €H2À
+
+ÀJ¥€ H€€¢
+@
+HÀ
+¥€ J¥€ ÕJHÀ
+>OÁà À~
+JO@~
+
+JGÃ
+ 
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+
+D 
+7
+
+
+E 
+8
+ IJ
+ À 
+@ÿ I@
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+À 
+@þ Š@
+€Š
+a 3 
+! €ÿ ! 
+€
+¢@‰’@HR`  È€€ü ! € €
+€
+¢@‰’@HR`      Ob I
+€Š
+a 3 Àï
+! @ï ! Àî
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        OH". €¯
+b I
+4MŠ
+€¯
+
+Ó
+
+À@ À€ ÀÀ À
+À@€
+À@
+À
+À 
+€@`À
+ €B€c
+ €@@°€
+€
+À@
+€@`À
+ €‚
+ €@@P
+€
+À€
+
+€@
+ €ÁCb 
+€@
+ €@. 
+€‰RA I
+
+@€‰’
+
+€6ÀJvÀ¥
+¶€¥
+6A¤
+
+
+
+x
+ˆÀ`
+Àx
+@*
+À[x
+
+Àx  €
+H
+H
+À‰! Šò
+
+€
+¢@‰’@HR`  È€@³ ! € €
+€
+¢@‰’@HR`      Ob I
+
+w
+vÏJH‰€€
+
+À¢
+
+
+@¡
+
+@^x
+
+
+
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        Ob H
+
+w
+v n n nÀý nH
+€
+Ï@
+
+Ï@
+ €‰¢
+‰‚€ M‰¢@ËÿŸÊbÀ
+
+ÓJ Ó
+‰¢@I €J’@‰ ÀJ À
+
+€
+À 
+Š@
+
+À€¢
+MMÓG Žø@OÀŽ
+@
+ˆÀ@ò
+9 Éÿ¿
+6 6 6 6 Àx
+€ €€Ê’
+K€‹@˼€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ
+Á€‰€HB
+H’@I@I"@
+À€‰¢
+‰€H¢@
+À€‰¢
+‰€I
+À€‰¢
+
+
+€K€‹@Š
+ÒJ
+Q €  P PCËò€K€ï
+"
+
+À€È€H@" @ÈÀ‰
+@Àc
+ˆÀ€©
+9 
+6 6 6 6 Àx
+
+€ €€ʲ
+K€‹@ Â`
+˼€˵€ÊR Š
+ÒJ
+Q €  PÌ@Ê¢
+ PCËò€K€ï
+€€3ƒ ó‚ ƒP Œ@Š
+ ‚a
++! @¡
+ dO eOHÀ¡
+ aO fOˆ
+ bO gO cO‰@Š
+ÀÂ 
+Ê¿€À
+
+
+
+Êý¿C
+
+
+
+w
+À€J K L  M €x
+ÀŠ’Â "
+Æ€
+À€‰¢
+
+À€‰¢
+€
+x H€É€HÒÏ
+
+@ÿ
+H" @9~
+J2€IÀ 
+Š4€
+9€ˆ
+ €
+¥€ H2@
+
+AJ¥€ €H2À
+
+ÀJ¥€ H€€¢
+@
+HÀ
+¥€ J¥€ ÕJHÀ
+>OÁà @,~
+JOÀ*~
+
+JGÃ
+ 
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+
+D 
+7
+
+
+E 
+8
+ IJ
+ À 
+@ÿ I@
+ I
+ € Ê €
+ 
+ À Ê À
+ 
+
+À 
+@þ Š@
+€Š
+a 3 €
+! 
+€
+¢@‰’@HR`  È€
+€
+¢@‰’@HR`      Ob I
+
+€Š
+a 3 @
+! À
+€
+¢@‰’@HR`  € €
+€
+¢@‰’@HR`        OH". €¯
+b I
+4MŠ
+€¯
+
+Ó
+
+À@ À€ ÀÀ À
+À@€
+À@
+À
+À 
+€@`À
+ €B€c
+ €@@°€
+€
+À@
+€@`À
+ €‚
+ €@@P
+€
+À€
+
+€@
+ €ÁCb 
+€@
+ €@. 
+€‰RA I
+
+@€‰’
+
+€6ÀJvÀ¥
+¶€¥
+6A¤
+
+
+