Kai-Lung Hua

162 papers A* 12A 3B 15C 8Misc 6Journal 79Unranked 39
YearRankTypeTitle / Venue / Authors
2025 B conf
SMC
Brijesh Patel, Yung-Chieh Chang, Po Ting Lin, Chao-Lung Yang, Yung-Yao Chen, Kai-Lung Hua, Meng-Kun Liu
2025 J jnl
CoRR
Sheng-Hao Liao, Shang-Fu Chen, Tai-Ming Huang, Wen-Huang Cheng, Kai-Lung Hua
2025 J jnl
IEEE Multim.
Wen-Huang Cheng, Jiaying Liu, Tanaya Guha, Balu Adsumilli, Kai-Lung Hua, Yung-Hui Li
2025 A* conf
ICRA
Sin-Ye Jhong, Hsin-Chun Lin, Tzu-Chi Liu, Kai-Lung Hua, Yung-Yao Chen
2025 J jnl
Multim. Tools Appl.
Mohammad Shahid, Hong-Cyuan Wang, Yung-Yao Chen, Kai-Lung Hua
2025 J jnl
CoRR
Hui-Guan Yuan, Ryandhimas E. Zezario, Shafique Ahmed, Hsin-Min Wang, Kai-Lung Hua, Yu Tsao
2025 J jnl
CoRR
Tai-Ming Huang, Wei-Tung Lin, Kai-Lung Hua, Wen-Huang Cheng, Junichi Yamagishi, Jun-Cheng Chen
2025 A* conf
CVPR
Yue-Hua Han, Tai-Ming Huang, Kai-Lung Hua, Jun-Cheng Chen
2024 conf
ACCV (3)
Ting-Yu Chu, Yong-Xiang Lin, Ching-Chun Huang, Kai-Lung Hua
2024 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Kuan-Hung Huang, Yao-Bang Huang, Yong-Xiang Lin, Kai-Lung Hua, M. Tanveer, Xuequan Lu, Imran Razzak
2024 C conf
ICCE
Ba-Lin Lin, Yong-Xiang Lin, Bayisa Kune Mamade, Yung-Yao Chen, Kai-Lung Hua
2024 conf
ICPR (21)
Tai-Ming Huang, Yue-Hua Han, Ernie Chu, Shu-Tzu Lo, Kai-Lung Hua, Jun-Cheng Chen
2024 C conf
ICCE
Yao-Bang Huang, Yong-Xiang Lin, Ahmad Fauzan Aqil, Yung-Yao Chen, Kai-Lung Hua
2024 J jnl
Multim. Syst.
Huu-Phu Do, Yan-An Chen, Nhat-Tuong Do-Tran, Kai-Lung Hua, Wen-Hsiao Peng, Ching-Chun Huang
2024 J jnl
CoRR
Wei-Tung Lin, Yong-Xiang Lin, Jyun-Wei Chen, Kai-Lung Hua
2024 Misc conf
ICASSP
Shang-Fu Chen, Cheng-Xun Wen, Wen-Huang Cheng, Kai-Lung Hua
2024 J jnl
CoRR
Yue-Hua Han, Tai-Ming Huang, Shu-Tzu Lo, Po-Han Huang, Kai-Lung Hua, Jun-Cheng Chen
2023 J jnl
IEEE Trans. Multim.
Jose Jaena Mari Ople, Tai-Ming Huang, Ming-Chih Chiu, Yi-Ling Chen, Kai-Lung Hua
2023 J jnl
Pattern Recognit. Lett.
Adrienne Francesca O. Soliven, John Jethro Virtusio, Jose Jaena Mari Ople, Daniel Stanley Tan, Divina Amalin, Kai-Lung Hua
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Jose Jaena Mari Ople, Shang-Fu Chen, Yung-Yao Chen, Kai-Lung Hua, Mohammad Hijji, Po Yang, Khan Muhammad
2023 J jnl
Neural Networks
Jiun-Da Lin, Yue-Hua Han, Po-Han Huang, Julianne Tan, Jun-Cheng Chen, Muhammad Tanveer, Kai-Lung Hua
2023 J jnl
Neural Comput. Appl.
Jilyan Bianca Dy, John Jethro Virtusio, Daniel Stanley Tan, Yong-Xiang Lin, Joel Ilao, Yung-Yao Chen, Kai-Lung Hua
2023 conf
MMAsia
Po-Han Huang, Yue-Hua Han, Ernie Chu, Jun-Cheng Chen, Kai-Lung Hua
2023 J jnl
Multim. Tools Appl.
Yun-Ting Zhou, Jilyan Bianca Dy, Shang-Che Hsu, Yu-Ling Hsu, Chao-Lung Yang, Kai-Lung Hua
2023 J jnl
IEEE Trans. Netw. Sci. Eng.
Chao-Lung Yang, Hendrik Tampubolon, Aji Setyoko, Kai-Lung Hua, Mohammad Tanveer, Wei Wei
2022 conf
ICCE-TW
Ting-Kai Yang, Shang-Fu Chen, Tai-Ming Huang, Julianne Tan, Jilyan Bianca Dy, Kai-Lung Hua
2022 conf
ICCE-TW
Lili Miao, Shih-Che Chien, Feng-Chia Chang, Kai-Lung Hua
2022 Misc conf
ICASSP
Hsuan-An Hsia, Che-Hsien Lin, Bo-Han Kung, Jhao-Ting Chen, Daniel Stanley Tan, Jun-Cheng Chen, Kai-Lung Hua
2022 J jnl
IEEE J. Biomed. Health Informatics
Muhammad Tanveer, Ashraf Haroon Rashid, M. A. Ganaie, Motahar Reza, Imran Razzak, Kai-Lung Hua
2022 J jnl
Multim. Syst.
Wen-Yin Chen, Pavol Podstreleny, Wen-Huang Cheng, Yung-Yao Chen, Kai-Lung Hua
2022 J jnl
IEEE Trans. Cybern.
Daniel Stanley Tan, Jonathan Hans Soeseno, Kai-Lung Hua
2022 J jnl
Multim. Tools Appl.
Che-Hao Hsu, Yi-Leh Wu, Wen-Huang Cheng, Yu-Jen Chen, Kai-Lung Hua
2022 J jnl
Sensors
Lili Miao, Shang-Fu Chen, Yu-Ling Hsu, Kai-Lung Hua
2022 J jnl
IEEE J. Biomed. Health Informatics
Jiun-Da Lin, Hung-Hsiang Lin, Jilyan Bianca Dy, Jun-Cheng Chen, Mohammad Tanveer, Imran Razzak, Kai-Lung Hua
2022 conf
ACCV (4)
Wei-Tung Lin, Yong-Xiang Lin, Jyun-Wei Chen, Kai-Lung Hua
2022 J jnl
IEEE Access
Hung-Hsiang Lin, Jiun-Da Lin, Jose Jaena Mari Ople, Jun-Cheng Chen, Kai-Lung Hua
2022 J jnl
IEEE Access
Mohammad Shahid, John Jethro Virtusio, Yu-Hsien Wu, Yung-Yao Chen, Muhammad Tanveer, Khan Muhammad, Kai-Lung Hua
2022 J jnl
IEEE Multim.
Yu-Hsiang Hung, Julianne Tan, Tai-Ming Huang, Shang-Che Hsu, Yi-Ling Chen, Kai-Lung Hua
2022 J jnl
Neural Comput. Appl.
Yin-Chen Yeh, Jilyan Bianca Dy, Tai-Ming Huang, Yung-Yao Chen, Kai-Lung Hua
2021 J jnl
Sensors
Yu-Hsiu Lin, Kai-Lung Hua, Yung-Yao Chen, I-Ying Chen, Yun-Chen Tsai
2021 conf
ICCE-TW
You-An Wang, Ming-Chih Chiu, Shih-Che Chien, Feng-Chia Chang, Kai-Lung Hua
2021 J jnl
Multim. Tools Appl.
Yu-Cheng Liu, Mohammad Shahid, Wannaporn Sarapugdi, Yong-Xiang Lin, Jyh-Cheng Chen, Kai-Lung Hua
2021 J jnl
Multim. Tools Appl.
Mohammad Shahid, I-Feng Chien, Wannaporn Sarapugdi, Lili Miao, Kai-Lung Hua
2021 J jnl
IEEE Trans. Multim.
Shintami Chusnul Hidayati, Ting Wei Goh, Ji-Sheng Gary Chan, Cheng-Chun Hsu, John See, Lai-Kuan Wong, Kai-Lung Hua, Yu Tsao, Wen-Huang Cheng
2021 J jnl
IEEE Trans. Multim.
John Jethro Virtusio, Daniel Stanley Tan, Wen-Huang Cheng, Mohammad Tanveer, Kai-Lung Hua
2021 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Yung-Yao Chen, Sin-Ye Jhong, Chih-Hsien Hsia, Kai-Lung Hua
2021 B conf
ICMR
Mohammad Shahid, Kai-Lung Hua
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Daniel Stanley Tan, Yong-Xiang Lin, Kai-Lung Hua
2021 A* conf
ICCV
Yu-Chih-Tuan Hu, Jun-Cheng Chen, Bo-Han Kung, Kai-Lung Hua, Daniel Stanley Tan
2021 J jnl
IEEE Trans. Multim.
John Jethro Virtusio, Jose Jaena Mari Ople, Daniel Stanley Tan, Muhammad Tanveer, Neeraj Kumar, Kai-Lung Hua
2021 J jnl
Sensors
Lili Miao, John Jethro Virtusio, Kai-Lung Hua
2021 J jnl
IEEE Access
Wen-Yin Chen, Jose Jaena Mari Ople, Maynard John Si, Daniel Stanley Tan, Kai-Lung Hua
2021 J jnl
Sensors
Yung-Yao Chen, Kai-Lung Hua, Yun-Chen Tsai, Jun-Hua Wu
2020 J jnl
Multim. Tools Appl.
Kai-Lung Hua, Trang-Thi Ho, Kevin Alfianto Jangtjik, Yu-Jen Chen, Mei-Chen Yeh
2020 J jnl
IEEE Multim.
Yong-Xiang Lin, Daniel Stanley Tan, Yung-Yao Chen, Ching-Chun Huang, Kai-Lung Hua
2020 J jnl
IEEE Access
Jose Jaena Mari Ople, Pin-Yi Yeh, Shih-Wei Sun, I-te Tsai, Kai-Lung Hua
2020 B conf
ICIP
Chao-Lung Yang, Aji Setyoko, Hendrik Tampubolon, Kai-Lung Hua
2020 J jnl
IEEE Trans. Emerg. Top. Comput. Intell.
Ning Shan, Daniel Stanley Tan, Melkamu S. Denekew, Yung-Yao Chen, Wen-Huang Cheng, Kai-Lung Hua
2020 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Trang-Thi Ho, John Jethro Virtusio, Yung-Yao Chen, Chih-Ming Hsu, Kai-Lung Hua
2020 B conf
ICIP
Jose Jaena Mari Ople, Daniel Stanley Tan, Arnulfo P. Azcarraga, Chao-Lung Yang, Kai-Lung Hua
2019 conf
MMM (2)
Yu-Chieh Chen, Daniel Stanley Tan, Wen-Huang Cheng, Kai-Lung Hua
2019 A conf
ICME
Yong-Xiang Lin, Daniel Stanley Tan, Wen-Huang Cheng, Kai-Lung Hua
2019 J jnl
Sensors
Yu-Hsiu Lin, Kai-Lung Hua, Hsin-Han Lu, Wei-Lun Sun, Yung-Yao Chen
2019 J jnl
Sensors
Shih-Wei Sun, Ting-Chen Mou, Chih-Chieh Fang, Pao-Chi Chang, Kai-Lung Hua, Huang-Chia Shih
2019 conf
ICME Workshops
Wei-Chen Yen, Chih-Chieh Fang, Shih-Wei Sun, Kai-Lung Hua, Huang-Chia Shih
2019 J jnl
Sensors
Daniel Stanley Tan, Jun-Ming Lin, Yu-Chi Lai, Joel P. Ilao, Kai-Lung Hua
2019 J jnl
IEEE Access
Jonathan Hans Soeseno, Daniel Stanley Tan, Wen-Yin Chen, Kai-Lung Hua
2019 Misc conf
ICASSP
Chao-Lung Yang, Shang-Che Hsu, Kai-Lung Hua, Wen-Huang Cheng
2019 conf
MIPR
Shintami Chusnul Hidayati, Kai-Lung Hua, Yu Tsao, Hong-Han Shuai, Jiaying Liu, Wen-Huang Cheng
2019 B conf
ICIP
Arces Talavera, Daniel Stanley Tan, Arnulfo P. Azcarraga, Kai-Lung Hua
2019 J jnl
Sensors
Hendrik Tampubolon, Chao-Lung Yang, Arnold Samuel Chan, Hendri Sutrisno, Kai-Lung Hua
2019 J jnl
Sensors
Kai-Lung Hua, Ho Thi Trang, Kathiravan Srinivasan, Yung-Yao Chen, Chun-Hao Chen, Vishal Sharma, Albert Y. Zomaya
2019 B conf
ICIP
Yu-Cheng Liu, Daniel Stanley Tan, Jyh-Cheng Chen, Wen-Huang Cheng, Kai-Lung Hua
2019 B conf
ICIP
Arren Matthew C. Antioquia, Daniel Stanley Tan, Arnulfo P. Azcarraga, Kai-Lung Hua
2019 J jnl
Sensors
Daniel Stanley Tan, Chih-Yuan Yao, Conrado R. Ruiz Jr., Kai-Lung Hua
2019 B conf
ICIP
Y. S. Lan, C. D. Chen, S. W. Sun, W. C. Yen, Y. T. Wang, Y. H. Yang, J. M. Day, Kai-Lung Hua
2019 B conf
ICIP
Yong-Xiang Lin, Daniel Stanley Tan, Wen-Huang Cheng, Yung-Yao Chen, Kai-Lung Hua
2019 J jnl
CoRR
Rosdyana Mangir Irawan Kusuma, Trang-Thi Ho, Wei-Chun Kao, Yu-Yen Ou, Kai-Lung Hua
2018 C conf
VCIP
Wen-Shiung Huang, Bing-Kai Hong, Wen-Huang Cheng, Shih-Wei Sun, Kai-Lung Hua
2018 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Hong-Cyuan Wang, Yu-Chi Lai, Wen-Huang Cheng, Chin-Yun Cheng, Kai-Lung Hua
2018 J jnl
IEEE Trans. Cybern.
Kai-Lung Hua, Hong-Cyuan Wang, Chih-Hsiang Yeh, Wen-Huang Cheng, Yu-Chi Lai
2018 J jnl
IEEE Trans. Image Process.
Daniel Stanley Tan, Wei-Yang Chen, Kai-Lung Hua
2018 J jnl
IEEE Trans. Cybern.
Kai-Han Lo, Yu-Chiang Frank Wang, Kai-Lung Hua
2018 conf
ICME Workshops
Eric Massip, Shintami Chusnul Hidayati, Wen-Huang Cheng, Kai-Lung Hua
2018 C conf
VCIP
John Jethro Virtusio, Arces Talavera, Daniel Stanley Tan, Kai-Lung Hua, Arnulfo P. Azcarraga
2018 J jnl
IEEE Trans. Cybern.
Shintami Chusnul Hidayati, Chuang-Wen You, Wen-Huang Cheng, Kai-Lung Hua
2018 conf
GCCE
Yi-Shan Lan, Shih-Wei Sun, Huang-Chia Shih, Kai-Lung Hua, Pao-Chi Chang
2018 B conf
ICIP
Tzu-Chieh Lin, Daniel Stanley Tan, Hsueh-Ling Tang, Shih-Che Chien, Feng-Chia Chang, Yung-Yao Chen, Wen-Huang Cheng, Kai-Lung Hua
2018 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Jordi Sanchez-Riera, Kathiravan Srinivasan, Kai-Lung Hua, Wen-Huang Cheng, M. Anwar Hossain, Mohammed F. Alhamid
2018 C conf
VCIP
Chin-Wei Chang, Kathiravan Srinivasan, Yung-Yao Chen, Wen-Huang Cheng, Kai-Lung Hua
2018 A* conf
ACM Multimedia
Shintami Chusnul Hidayati, Cheng-Chun Hsu, Yu-Ting Chang, Kai-Lung Hua, Jianlong Fu, Wen-Huang Cheng
2018 C conf
VCIP
Arren Matthew C. Antioquia, Daniel Stanley Tan, Arnulfo P. Azcarraga, Wen-Huang Cheng, Kai-Lung Hua
2017 J jnl
IEEE Access
Kai-Lung Hua
2017 B conf
ICIP
Kevin Alfianto Jangtjik, Trang-Thi Ho, Mei-Chen Yeh, Kai-Lung Hua
2017 J jnl
EURASIP J. Image Video Process.
Kai-Lung Hua, Bi-Ru Dai, Kathiravan Srinivasan, You-Hsiang Hsu, Vishal Sharma
2017 J jnl
Multim. Tools Appl.
Che-Hao Hsu, Wen-Huang Cheng, Yi-Leh Wu, Wen-Hsiung Huang, Tao Mei, Kai-Lung Hua
2017 J jnl
EURASIP J. Image Video Process.
Yung-Yao Chen, Kuan-Yu Chi, Kai-Lung Hua
2017 J jnl
J. Supercomput.
Vishal Sharma, Kathiravan Srinivasan, Rajesh Kumar, Han-Chieh Chao, Kai-Lung Hua
2017 A* conf
ACM Multimedia
Yu-Ting Chang, Wen-Huang Cheng, Bo Wu, Kai-Lung Hua
2017 J jnl
Multim. Tools Appl.
Che-Hao Hsu, Wen-Huang Cheng, Kai-Lung Hua
2017 J jnl
Multim. Tools Appl.
Che-Hao Hsu, Yi-Leh Wu, Weng-Huang Cheng, Yu-Jen Chen, Kai-Lung Hua
2017 conf
MMM (1)
Kai-Lung Hua, Irawati Nurmala Sari, Mei-Chen Yeh
2017 J jnl
J. Netw. Comput. Appl.
Vishal Sharma, Kathiravan Srinivasan, Han-Chieh Chao, Kai-Lung Hua, Wen-Huang Cheng
2017 conf
iCAST
Fatma S. Abousaleh, Neng-Hao Yu, Kai-Lung Hua, Wen-Huang Cheng
2017 A conf
ICME
Hsueh-Ling Tang, Shih-Che Chien, Wen-Huang Cheng, Yung-Yao Chen, Kai-Lung Hua
2017 J jnl
Multim. Tools Appl.
Kai-Lung Hua, Yeni Anistyasari, Che-Hao Hsu, Tai-Lin Chin, Chao-Lung Yang, Chun-Yen Wang
2017 A* conf
SIGGRAPH ASIA (Posters)
Yi-Shan Lan, Shih-Wei Sun, Kai-Lung Hua, Wen-Huang Cheng
2017 A* conf
ACM Multimedia
Shintami Chusnul Hidayati, Yi-Ling Chen, Chao-Lung Yang, Kai-Lung Hua
2017 A* conf
PerCom
Yu Huang, Yi-Chao Chen, Chuang-Wen You, Dian-Xuan Wu, Yi-Ling Chen, Kai-Lung Hua, Jane Yung-jen Hsu
2017 conf
MMM (1)
Jordi Sanchez-Riera, Jun-Ming Lin, Kai-Lung Hua, Wen-Huang Cheng, Arvin Wen Tsui
2016 conf
BigMM
Min-Chun Hu, Hsin-Ting Wu, Li-Yun Lo, Tse-Yu Pan, Wen-Huang Cheng, Kai-Lung Hua, Tao Mei
2016 conf
BigMM
Dang Duy Thang, Shintami Chusnul Hidayati, Yung-Yao Chen, Wen-Huang Cheng, Shih-Wei Sun, Kai-Lung Hua
2016 J jnl
Pattern Recognit. Lett.
Jordi Sanchez-Riera, Kai-Lung Hua, Yuan-Sheng Hsiao, Tekoing Lim, Shintami Chusnul Hidayati, Wen-Huang Cheng
2016 A* conf
ACM Multimedia
Kevin Alfianto Jangtjik, Mei-Chen Yeh, Kai-Lung Hua
2016 J jnl
J. Vis. Commun. Image Represent.
Kai-Lung Hua, Shintami Chusnul Hidayati, Fang-Lin He, Chia-Po Wei, Yu-Chiang Frank Wang
2016 conf
ICME Workshops
Kuan-Yu Chi, Kai-Lung Hua, Tsung-Ren Huang, Yung-Yao Chen
2016 J jnl
EURASIP J. Image Video Process.
Wen-Hsiung Huang, Yung-Yao Chen, Pei-Yu Lin, Che-Hao Hsu, Kai-Lung Hua
2016 J jnl
Vis. Comput.
Shu-Huai Chang, Yu-Chi Lai, Chih-Yuan Yao, Kai-Lung Hua, Yuzhen Niu, Feng Liu
2016 J jnl
IEEE Multim.
Kai-Han Lo, Yu-Chiang Frank Wang, Kai-Lung Hua
2016 J jnl
IEEE Multim.
Kai-Lung Hua, Kai-Han Lo, Yu-Chiang Frank Wang
2016 conf
MMM (2)
Yu-Chen Chen, Shintami Chusnul Hidayati, Wen-Huang Cheng, Min-Chun Hu, Kai-Lung Hua
2016 J jnl
Neurocomputing
Tsung-Hung Tsai, Wei-Cih Jhou, Wen-Huang Cheng, Min-Chun Hu, I-Chao Shen, Tekoing Lim, Kai-Lung Hua, Ahmed Ghoneim, M. Anwar Hossain, Shintami Chusnul Hidayati
2015 J jnl
J. Inf. Sci. Eng.
Kai-Lung Hua, Adhatus Solichah Ahmadiyah, Yeni Anistyasari
2015 conf
UbiComp/ISWC Adjunct
Ya-Ting Chang, Shih-Wei Sun, Chuang-Wen You, Wen-Huang Cheng, Kai-Lung Hua
2015 conf
ICME Workshops
Shintami Chusnul Hidayati, Che-Hao Hsu, Shih-Wei Sun, Wen-Huang Cheng, Kai-Lung Hua
2015 J jnl
Inf. Sci.
Kai-Lung Hua, Chao-Ting Lai, Chuang-Wen You, Wen-Huang Cheng
2015 conf
SIGGRAPH Asia Posters
Shih-Wei Sun, Jheng-Wei Peng, Wei-Chih Lin, Ying-Ting Chen, Wen-Huang Cheng, Kai-Lung Hua
2015 Misc conf
SenSys
Yu Huang, Dian-Xuan Wu, Chuang-Wen You, Chi-Ling Yang, Seng-Yong Lau, Kai-Lung Hua, Wen-Huang Cheng, Yi-Ling Chen, Jane Yung-jen Hsu
2015 C conf
MMSP
Tekoing Lim, Kai-Lung Hua, Hong-Cyuan Wang, Kai-Wen Zhao, Min-Chun Hu, Wen-Huang Cheng
2015 conf
ACPR
Kai-Lung Hua, Wen-Huang Cheng, Lai-Kuan Wong, Chin-Kuan Ho
2014 conf
TAAI
Dini Nuzulia Rahmah, Wen-Huang Cheng, Yung-Yao Chen, Kai-Lung Hua
2014 J jnl
J. Vis. Commun. Image Represent.
Kai-Lung Hua, Hong-Cyuan Wang, Aulia Hakim Rusdi, Shin-Yi Jiang
2014 conf
ICME Workshops
Yu-Cong Lan, Shih-Wei Sun, Wen-Huang Cheng, Kai-Lung Hua, Cheng-Wei Peng
2014 conf
ICME Workshops
Jordi Sanchez-Riera, Yuan-Sheng Hsiao, Tekoing Lim, Kai-Lung Hua, Wen-Huang Cheng
2014 conf
ICME Workshops
Wei-Chih Lin, Shih-Wei Sun, Wen-Huang Cheng, Yi-Hsuan Yang, Kai-Lung Hua, Fujui Wang, Jun-Jieh Wang
2014 J jnl
Vis. Comput.
Hsu-Huai Chang, Yu-Chi Lai, Chin-Yuan Yao, Kai-Lung Hua, Yuzhen Niu, Feng Liu
2014 conf
ICIMCS
Hong-Cyuan Wang, Yung-Yao Chen, Wen-Huang Cheng, Shih-Wei Sun, Kai-Lung Hua
2014 A conf
MMSys
Yuan-Sheng Hsiao, Jordi Sanchez-Riera, Tekoing Lim, Kai-Lung Hua, Wen-Huang Cheng
2014 conf
iThings/GreenCom/CPSCom
Han-Chiang Li, Kate Ching-Ju Lin, Kai-Lung Hua
2014 A* conf
ACM Multimedia
Shintami Chusnul Hidayati, Kai-Lung Hua, Wen-Huang Cheng, Shih-Wei Sun
2014 conf
MMM (1)
Yung-Huan Hsieh, Shintami Chusnul Hidayati, Wen-Huang Cheng, Min-Chun Hu, Kai-Lung Hua
2013 conf
SIGGRAPH ASIA Emerging Technologies
Che-Hao Hsu, Chun-Chiao Chiang, Kai-Lung Hua, Wen-Huang Cheng
2013 Misc conf
ICNC
Kai-Lung Hua, Ge-Ming Chiu, Tai-Lin Chin, Hsing-Kuo Pao, Yi-Chi Cheng, Guan-Ming Su
2013 conf
ISCE
Fang-Lin He, Hong-Cyuan Wang, Adhatus Solichah Ahmadiyah, Min-Chun Hu, Kai-Lung Hua
2013 conf
Three-Dimensional Image Processing (3DIP) and Applications
Adhatus Solichah Ahmadiyah, Guan-Ming Su, Kai-Lung Hua, Yu-Chi Lai
2013 J jnl
Comput. Networks
Kai-Lung Hua, Ge-Ming Chiu, Hsing-Kuo Pao, Yi-Chi Cheng
2013 conf
ISCE
Che-Hao Hsu, Kai-Lung Hua, Wen-Huang Cheng
2013 B conf
WCNC
Tai-Lin Chin, Kai-Lung Hua, Tien-Ruey Hsiang, Ge-Ming Chiu, Shiow-Yang Wu
2013 B conf
WCNC
Han-Chiang Li, Kate Ching-Ju Lin, Kai-Lung Hua, Ge-Ming Chiu, Yu-Chin Tsai, Shan Chin
2013 Misc conf
ICASSP
Kai-Han Lo, Kai-Lung Hua, Yu-Chiang Frank Wang
2013 C conf
VCIP
Kai-Han Lo, Yu-Chiang Frank Wang, Kai-Lung Hua
2013 conf
ISCE
Dini Nuzulia Rahmah, Kai-Lung Hua, Yu-Chi Lai, Chih-Yuan Yao
2013 A* conf
ACM Multimedia
Che-Hao Hsu, Kai-Lung Hua, Wen-Huang Cheng
2013 conf
ISCE
Min-Chun Hu, Yi-Ning Tseng, Ja-Ling Wu, Chih-Hsuan Kuo, Yi-Mao Hsiao, Kai-Lung Hua
2012 A* conf
ACM Multimedia
Shintami Chusnul Hidayati, Wen-Huang Cheng, Kai-Lung Hua
2012 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Kai-Lung Hua, Rong Zhang, Mary L. Comer, Ilya Pollak
2012 conf
SIGGRAPH ASIA Posters
Che-Hao Hsu, Kai-Lung Hua, Wen-Huang Cheng
2012 B conf
ICIP
Fang-Lin He, Yu-Chiang Frank Wang, Kai-Lung Hua
2011 conf
ACSCC
Kai-Lung Hua, Rong Zhang, Mary L. Comer, Ilya Pollak
2011 conf
PG (Short Papers)
Shu-Huai Chang, Yu-Chi Lai, Yuzhen Niu, Feng Liu, Kai-Lung Hua
2008 J jnl
J. Electronic Imaging
Xiaogang Dong, Kai-Lung Hua, Peter Majewicz, Gordon McNutt, Charles A. Bouman, Jan P. Allebach, Ilya Pollak
2006 B conf
ICIP
Kai-Lung Hua, Ilya Pollak, Mary L. Comer
tests/unit/test_decompile_decompiler.py
← Index tests/unit/test_decompile_decompiler.py python
"""Unit tests (mocked BN) for bninja/decompiler.py — BinaryNinjaDecompiler."""
import sys
import json
import time
import pytest
from unittest.mock import MagicMock, patch, mock_open

from tests.unit.conftest_binja_stubs import (
    install_binja_stubs,
    MockFunction,
    MockBasicBlock,
    MockDisassemblyLine,
    MockToken,
    MockSymbol,
    MockBinaryView,
    MockEdge,
    SymbolType,
    InstructionTextTokenType,
    BranchType,
)

install_binja_stubs()

from redb.extractors.decompiler.bninja.decompiler import (
    BinaryNinjaDecompiler,
    is_lib_or_thunk,
)
from redb.extractors.decompiler.bninja.function_type import FunctionType


# ============================================================================
# 10a. BinaryNinjaDecompiler
# ============================================================================


class TestBinaryNinjaDecompilerLogError:
    def _make_decompiler(self):
        with patch.object(BinaryNinjaDecompiler, "__init__", lambda self, *a, **kw: None):
            d = BinaryNinjaDecompiler.__new__(BinaryNinjaDecompiler)
            d.log = MagicMock()
            d.errors = []
            d.filepath = "/fake/binary"
            d.bv = None
            d.analysis_results = None
            d.exporters = []
            d.index_prefix = None
            d.filetype = None
            d.goresym = None
            d.BNINJA_TIMEOUT = 60
            return d

    def test_log_error_appends(self):
        d = self._make_decompiler()
        d.log_error("test error", "func1", 0x1000, Exception("boom"), "extract")
        assert len(d.errors) == 1

    def test_log_error_schema(self):
        d = self._make_decompiler()
        d.log_error("test error", "func1", 0x1000, Exception("boom"), "extract")
        error = d.errors[0]
        expected_keys = [
            "function_name",
            "function_address",
            "error_location",
            "error_message",
            "error_details",
            "error_type",
            "timestamp",
        ]
        for key in expected_keys:
            assert key in error, f"Missing key: {key}"


class TestBinaryNinjaDecompilerIsTooFewBlocks:
    def _make_decompiler(self):
        with patch.object(BinaryNinjaDecompiler, "__init__", lambda self, *a, **kw: None):
            d = BinaryNinjaDecompiler.__new__(BinaryNinjaDecompiler)
            d.log = MagicMock()
            d.errors = []
            d.MIN_FUNCTION_SIZE = 10
            return d

    def test_is_too_few_blocks_none(self):
        d = self._make_decompiler()
        func = MagicMock()
        func.basic_blocks = None
        assert d.is_too_few_blocks(func) is False

    def test_is_too_few_blocks_empty(self):
        # Empty basic_blocks now returns True because Binja creates function
        # stubs with empty blocks before analysis completes — we no longer
        # skip these so they get filtered downstream instead.
        d = self._make_decompiler()
        func = MagicMock()
        func.basic_blocks = []
        assert d.is_too_few_blocks(func) is True

    def test_is_too_few_blocks_small_single(self):
        d = self._make_decompiler()
        block = MagicMock()
        block.disassembly_text = [MagicMock() for _ in range(5)]  # < 10
        func = MagicMock()
        func.basic_blocks = [block]
        assert d.is_too_few_blocks(func) is False

    def test_is_too_few_blocks_large_single(self):
        d = self._make_decompiler()
        block = MagicMock()
        block.disassembly_text = [MagicMock() for _ in range(15)]  # >= 10
        func = MagicMock()
        func.basic_blocks = [block]
        assert d.is_too_few_blocks(func) is True

    def test_is_too_few_blocks_multiple(self):
        d = self._make_decompiler()
        func = MagicMock()
        func.basic_blocks = [MagicMock(), MagicMock()]
        assert d.is_too_few_blocks(func) is True


class TestIsLibOrThunk:
    def test_is_lib_or_thunk_user(self):
        func = MagicMock()
        func.symbol.type = SymbolType.FunctionSymbol
        func.is_thunk = False
        assert is_lib_or_thunk(func) is True  # NOT filtered

    def test_is_lib_or_thunk_thunk(self):
        func = MagicMock()
        func.symbol.type = SymbolType.FunctionSymbol
        func.is_thunk = True
        assert is_lib_or_thunk(func) is False  # Filtered out

    def test_is_lib_or_thunk_external(self):
        func = MagicMock()
        func.symbol.type = SymbolType.ImportedFunctionSymbol
        func.is_thunk = False
        assert is_lib_or_thunk(func) is False  # Filtered out


class TestBinaryNinjaDecompilerExtract:
    def _make_decompiler(self):
        with patch.object(BinaryNinjaDecompiler, "__init__", lambda self, *a, **kw: None):
            d = BinaryNinjaDecompiler.__new__(BinaryNinjaDecompiler)
            d.log = MagicMock()
            d.errors = []
            d.filepath = "/fake/binary"
            d.bv = MagicMock()
            d.analysis_results = None
            d.exporters = []
            d.index_prefix = None
            d.filetype = None
            d.goresym = None
            d.BNINJA_TIMEOUT = 60
            d.arch = MagicMock()
            return d

    def test_extract_success(self):
        d = self._make_decompiler()
        mock_results = {
            "decompiled": [{"test": True}],
            "disassembled": [],
            "cfg": [],
            "llil": [],
            "errors": [],
            "strings": [],
            "mlil": [],
        }
        with patch.object(d, "analyze_binary", return_value=mock_results):
            result = d.extract()
            assert result is True
            assert d.analysis_results == mock_results

    def test_extract_failure(self):
        d = self._make_decompiler()
        with patch.object(d, "analyze_binary", return_value=None):
            result = d.extract()
            assert result is False

    def test_tag(self):
        d = self._make_decompiler()
        assert d.tag() == "DECOMPILED"


class TestBinaryNinjaDecompilerAnalyzeBinary:
    def _make_decompiler(self):
        with patch.object(BinaryNinjaDecompiler, "__init__", lambda self, *a, **kw: None):
            d = BinaryNinjaDecompiler.__new__(BinaryNinjaDecompiler)
            d.log = MagicMock()
            d.errors = []
            d.filepath = "/fake/binary"
            d.analysis_results = None
            d.exporters = []
            d.index_prefix = None
            d.filetype = None
            d.goresym = None
            d.BNINJA_TIMEOUT = 60
            d.arch = MagicMock()
            d.MIN_FUNCTION_SIZE = 10
            return d

    def test_analyze_binary_links_hlil_disasm(self):
        """Bi-directional hash linkage between decompiled and disassembled."""
        d = self._make_decompiler()
        d.bv = MagicMock()
        d.bv.functions = []
        # Mock methods to return controlled data
        with patch.object(d, "extract_hlil") as mock_hlil, \
             patch.object(d, "extract_disasm") as mock_disasm, \
             patch.object(d, "extract_cfg", return_value=None), \
             patch.object(d, "extract_lowlevel", return_value=None):

            mock_hlil.return_value = {
                "decompiled_function_hash": "HLIL_HASH",
                "decompiled_function_name": "test",
                "decompiled_function": "code",
            }
            mock_disasm.return_value = {
                "disassembled_function_hash": "DISASM_HASH",
                "disassembled_function_no_addresses": "asm",
            }

            # Manually feed one function
            mock_func = MagicMock()
            mock_func.symbol.type = SymbolType.FunctionSymbol
            mock_func.is_thunk = False
            mock_func.basic_blocks = [MagicMock(), MagicMock()]
            d.bv.functions = [mock_func]

            results = d.analyze_binary()
            if results and results["decompiled"]:
                hlil_r = results["decompiled"][0]
                disasm_r = results["disassembled"][0]
                assert hlil_r["disassembled_function_hash"] == "DISASM_HASH"
                assert disasm_r["decompiled_function_hash"] == "HLIL_HASH"

    def test_analyze_binary_links_llil_disasm(self):
        """Bi-directional linkage between LLIL and disassembly."""
        d = self._make_decompiler()
        d.bv = MagicMock()

        with patch.object(d, "extract_hlil", return_value=None), \
             patch.object(d, "extract_disasm") as mock_disasm, \
             patch.object(d, "extract_cfg", return_value=None), \
             patch.object(d, "extract_lowlevel") as mock_llil:

            mock_disasm.return_value = {
                "disassembled_function_hash": "DISASM_HASH",
                "disassembled_function_no_addresses": "asm",
            }
            mock_llil.return_value = {
                "sha256_llil": "LLIL_HASH",
                "tlsh_llil": "tlsh_val",
            }

            mock_func = MagicMock()
            mock_func.symbol.type = SymbolType.FunctionSymbol
            mock_func.is_thunk = False
            mock_func.basic_blocks = [MagicMock(), MagicMock()]
            d.bv.functions = [mock_func]

            results = d.analyze_binary()
            if results and results["llil"]:
                llil_r = results["llil"][0]
                assert llil_r["disassembled_function_hash"] == "DISASM_HASH"

    def test_analyze_binary_links_cfg_disasm(self):
        """CFG gets disassembled_function_hash."""
        d = self._make_decompiler()
        d.bv = MagicMock()

        with patch.object(d, "extract_hlil", return_value=None), \
             patch.object(d, "extract_disasm") as mock_disasm, \
             patch.object(d, "extract_cfg") as mock_cfg, \
             patch.object(d, "extract_lowlevel", return_value=None):

            mock_disasm.return_value = {
                "disassembled_function_hash": "DISASM_HASH",
                "disassembled_function_no_addresses": "asm",
            }
            mock_cfg.return_value = {
                "function_address": 0x1000,
                "cyclomatic_complexity": 3,
            }

            mock_func = MagicMock()
            mock_func.symbol.type = SymbolType.FunctionSymbol
            mock_func.is_thunk = False
            mock_func.basic_blocks = [MagicMock(), MagicMock()]
            d.bv.functions = [mock_func]

            results = d.analyze_binary()
            if results and results["cfg"]:
                cfg_r = results["cfg"][0]
                assert cfg_r["disassembled_function_hash"] == "DISASM_HASH"

    def test_analyze_binary_sets_cyclomatic(self):
        """cyclomatic_complexity set on disasm from CFG."""
        d = self._make_decompiler()
        d.bv = MagicMock()

        with patch.object(d, "extract_hlil", return_value=None), \
             patch.object(d, "extract_disasm") as mock_disasm, \
             patch.object(d, "extract_cfg") as mock_cfg, \
             patch.object(d, "extract_lowlevel", return_value=None):

            mock_disasm.return_value = {
                "disassembled_function_hash": "HASH",
                "disassembled_function_no_addresses": "asm",
            }
            mock_cfg.return_value = {
                "function_address": 0x1000,
                "cyclomatic_complexity": 7,
            }

            mock_func = MagicMock()
            mock_func.symbol.type = SymbolType.FunctionSymbol
            mock_func.is_thunk = False
            mock_func.basic_blocks = [MagicMock(), MagicMock()]
            d.bv.functions = [mock_func]

            results = d.analyze_binary()
            if results and results["disassembled"]:
                disasm_r = results["disassembled"][0]
                assert disasm_r.get("cyclomatic_complexity") == 7


class TestApplyGoReSym:
    def _make_decompiler(self):
        with patch.object(BinaryNinjaDecompiler, "__init__", lambda self, *a, **kw: None):
            d = BinaryNinjaDecompiler.__new__(BinaryNinjaDecompiler)
            d.log = MagicMock()
            d.errors = []
            d.bv = MagicMock()
            return d

    def test_apply_goresym_user_functions(self):
        d = self._make_decompiler()
        d.goresym = "/tmp/goresym.json"
        data = {
            "UserFunctions": [{"Start": 0x1000, "FullName": "main.main"}],
        }
        with patch("builtins.open", mock_open(read_data=json.dumps(data))):
            d._BinaryNinjaDecompiler__apply_goresym()
            d.bv.define_user_symbol.assert_called()

    def test_apply_goresym_std_functions(self):
        d = self._make_decompiler()
        d.goresym = "/tmp/goresym.json"
        data = {
            "StdFunctions": [{"Start": 0x2000, "FullName": "runtime.main"}],
        }
        with patch("builtins.open", mock_open(read_data=json.dumps(data))):
            d._BinaryNinjaDecompiler__apply_goresym()
            d.bv.define_user_symbol.assert_called()

    def test_apply_goresym_invalid_json(self):
        d = self._make_decompiler()
        d.goresym = "/tmp/goresym.json"
        with patch("builtins.open", mock_open(read_data="not json {")):
            d._BinaryNinjaDecompiler__apply_goresym()
            # Should log error but not crash
            d.log.log_error if hasattr(d.log, 'log_error') else None
            # Just verify no exception raised