author | Jiacheng 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) |
commit | c4d1f86ec0ec035f63cb12d33a2c2c4f912547aa (patch) | |
tree | 8a32f886ba1808f15b0cdf7804e703d00b3c15f1 | |
parent | f917338a244638bac3b78a38b26d28034dc35543 (diff) | |
download | media_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>
-rw-r--r-- | Media.mk | 2 | ||||
-rw-r--r-- | drivers/common/firmware/firmware_cfg.h | 12 | ||||
-rw-r--r-- | drivers/common/firmware/firmware_drv.c | 11 | ||||
-rw-r--r-- | drivers/common/firmware/firmware_priv.h | 1 | ||||
-rw-r--r-- | drivers/frame_sink/encoder/h264/encoder.c | 24 | ||||
-rw-r--r-- | firmware/gx_h264_enc.bin | 221 | ||||
-rw-r--r-- | firmware/h264_enc.bin | 652 |
7 files changed, 683 insertions, 240 deletions
@@ -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 gOcO‰@Š -À -Á€‰€HB -H’@I@I"@ -À€‰¢ -‰€H¢@ - @Ú~Š"@‰’ -À€‰¢ -‰€I -À€‰¢ - - -€K€‹@Š -ÒJ -Q€ PPCËò€K€ï -" - -À€È€H@"@ÈÀ‰ -@Àc -ˆÀ€© -9
-6
6
6
6
Àx - -€€€Ê² -K€‹@
Â` -˼€Ëµ€ÊRŠ -ÒJ -Q€ PÌ@Ê¢ -Ò -PCËò€K€ï -€€3ƒ ó‚ ƒP Œ@Š -
‚a -+! @¡ -dO eOHÀ¡ -aO fOˆ -bO gOcO‰@Š -À -Ê¿€À - - - -Êý¿C - - - -w -À€J
K
L
M
€x -ÀŠ’ " -Æ€ -À€‰¢ - -À€‰¢ -€ -xH€É€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 -€@ -€@. -€‰RAI - -@€‰’ - -€ -€†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 gOcO‰@Š +À +Á€‰€HB +H’@I@I"@ +À€‰¢ +‰€H¢@ + +À€‰¢ +‰€I +À€‰¢ + + +€K€‹@Š +ÒJ +Q€ PPCËò€K€ï +" + +À€È€H@"@ÈÀ‰ +@Àc +ˆÀ€© +9
+6
6
6
6
Àx + +€€€Ê² +K€‹@
Â` +˼€Ëµ€ÊRŠ +ÒJ +Q€ PÌ@Ê¢ +Ò +PCËò€K€ï +€€3ƒ ó‚ ƒP Œ@Š +
‚a ++! @¡ +dO eOHÀ¡ +aO fOˆ +bO gOcO‰@Š +À +Ê¿€À + + + +Êý¿C + + + +w +À€J
K
L
M
€x +ÀŠ’ " +Æ€ +À€‰¢ + +À€‰¢ +€ +xH€É€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 +€@ +€@. +€‰RAI + +@€‰’ + +€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 gOcO‰@Š +À +Á€‰€HB +H’@I@I"@ +À€‰¢ +‰€H¢@ +Ð +6
Š"@‰’ +À€‰¢ +‰€I +6
ˆ +6
 ‰€H’@I"@ +À€‰¢ + + +6
+ + +€K€‹@Š +ÒJ +Q€ PPCËò€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 gOcO‰@Š +ÀÂ +Ê¿€@ + + +Êý¿C + + + +w +À€J
K
L
M
€x +Ä€ŠÂ " +È€ +6
‰€H¢@JB@ +À€‰¢ + +„ +À€‰¢ +€ +xH€É€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 +€@ +€@. +€‰RAI + +@€‰’ + +€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 gOcO‰@Š +À +Á€‰€HB +H’@I@I"@ +À€‰¢ +‰€H¢@ + +À€‰¢ +‰€I +À€‰¢ + + +€K€‹@Š +ÒJ +Q€ PPCËò€K€ï +" + +À€È€H@"@ÈÀ‰ +@Àc +ˆÀ€© +9
+6
6
6
6
Àx + +€€€Ê² +K€‹@
Â` +˼€Ëµ€ÊRŠ +ÒJ +Q€ PÌ@Ê¢ +Ò +PCËò€K€ï +€€3ƒ ó‚ ƒP Œ@Š +
‚a ++! @¡ +dO eOHÀ¡ +aO fOˆ +bO gOcO‰@Š +À +Ê¿€À + + + +Êý¿C + + + +w +À€J
K
L
M
€x +ÀŠ’ " +Æ€ +À€‰¢ + +À€‰¢ +€ +xH€É€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 +€@ +€@. +€‰RAI + +@€‰’ + +€6ÀJvÀ¥ +¶€¥ +6A¤ +ö + + + |