Realization of H.26L 4 × 4 point integer transformation on TM1300

Abstract: H.26L is the next-generation video coding standard. Its codeability exceeds all existing standards, including H.263 + and MPEG-4 (SP). This article analyzes a variety of new coding features introduced by H.26L, focuses on 4 × 4 point integer transformation, and proposes a fast transformation algorithm implemented on TM1300.

introduction

H.26L is the next generation video coding standard. Initially, H.26L was developed by the ITU-T VCEG group. In November 2001, MPEG and VCEG jointly established the JVT group to participate in the formulation of H.26L. Because of the addition of MPEG, H.26L will be included in the tenth part of MPEG-4. Because the H.26L standard is still in the process of formulation, this article temporarily takes the test model TML8 provided by JVT as a reference.

The basic coding framework of H.26L source coding is similar to the current popular video coding standard, and uses a hybrid coding technique combining transform coding and predictive coding. Its excellent performance is mainly due to the introduction of new encoding features: 4 × 4 point integer transform, entropy encoding using UVLC, running vectors with 1/4 to 1/8 pixel accuracy, motion estimation with multiple block sizes, etc. These new coding techniques improve compression performance and fault tolerance from different sides. Especially the 4 × 4 point integer transform is unique among all video compression protocols.

Although the H.26L standard is still being formulated, in the preliminary test, its coding performance surpassed all existing standards, including H.263 + and MPEG-4 (Simple profile). These test results show that under the same objective video quality, H.26L can save 20% -50% bit rate than H.263 + and 50% bit rate than MPEG-4 (SP). As the next-generation video coding standard, H.26L demonstrates its huge development prospects.

1 H.26L 4 × 4 point integer transform

1.1 Introduction to Transformation

In H.26L coding technology, the 4 × 4 point integer transform can be regarded as an integer version of the DCT transform, which mainly removes the spatial correlation of the image, and has the same properties as the 4 × 4 point DCT transform. Consider the one-dimensional integer transformation first: Let a, b, c, and d be the four points to be transformed, and A, B, C, and D are the corresponding four transformation coefficients. , Positive transformation at point d:

A = 13a + 13b + 13c + 13d

B = 17a + 7b-7c-17d

C = 13a-13b-13c + 13d

D = 7a-17b + 17c-7d

The inverse transformation formula is as follows:

a '= 13A + 17B + 13C + 7D

b '= 13A + 7B-13C-17D

c '= 13A-7B-13C + 17D

d '= 13A-17B + 13C-7D

The relationship between a and a 'is a' = 676a. That is to say, after the inverse transformation, the normalization operation is also needed to make the forward transformation and the transformation scale consistent.

The transform kernel of the same two-dimensional 4 × 4 integer transform is separable. The separate transformation reduces the computational complexity from O (N4) to O (N3).

1.2 Comparison with 8 × 8 point DCT transform

Compared with traditional DCT transform, H.26L adopts 4 × 4 point integer transform to bring the following advantages to video coding:

① Helps to reduce block spots and ring spots, and improve the image quality. Due to the quantization of the transform coefficients, resulting in the loss of high-frequency coefficients, there will be block shifts and ring shifts in the restored image. In H.26L, a smaller 4 × 4 point transform is used, which can effectively suppress block spots and ring spots.

â‘¡Integer transform reduces the accumulated error. The traditional accumulated error comes from two aspects: the error caused by the mismatch between the forward transform and the inverse transform and the error caused by the quantization. In order to achieve the purpose of compression, the second error is inevitable. However, since H.26L uses precise integer transform, the forward transform and inverse transform will not produce errors, which effectively reduces the accumulated error.

â‘¢The calculation speed is fast. Because the transformation formula used by H.26L is a simple integer equation, that is to say, calculations are based on integers, not floating-point numbers, so it reduces the amount of calculation for a single transformation and is also beneficial to the use of fixed-point DSP implementation.

2 Implementation in TM1300

TM1300 is a 32-bit ultra-high performance multimedia processor. Its core processor uses the VLIW ultra-long instruction word structure, which can perform 5 operations simultaneously in each clock cycle; it supports highly parallel custom operations, which can greatly speed up the special operations common in digital signal processing and multimedia applications. Performance, and the use of custom operations is similar to C language function calls, which facilitates the design of the program.

In this paper, according to the characteristics of 4 × 4 point integer conversion and the characteristics of TM1300's custom operation instructions, the following adjustments are made to integer conversion: first perform row conversion, then do column conversion. Because the result of the row conversion will not exceed the 16-bit representation range, before the column conversion, the data is re-merged and the column conversion is performed. This is based on the following two considerations.

First, because the video input data is an unsigned byte type, and TM1300 is a 32-bit processor, accessing memory in word units can improve the efficiency of access. The data of the current 4 × 4 data block (pointer is P1) and the reference frame 4 × 4 data block (pointer is P2) are organized as follows. The point to be transformed is the difference between the value of the current data block and the corresponding value of the reference frame data block.

P1: cal, cb1, cc1, cd1 P2: ra1, rb1, rc1, rd1

ca2, cb2, cc2, cd2 ra2, rb2, rc2, rd2

ca3, cb3, cc3, cd3 ra3, rb3, rc3, rd3

ca4, cb4, cc4, cd4 ra4, rb4, rc4, rd4

Second, you can use the custom operation of 8-bit multiplication / accumulation. One operation can complete four 8-bit multiplication / accumulation, and a machine cycle (CLK) can perform up to 5 operations. Compared with non-customized multiplication / accumulation, it reduces the number of operations and improves the parallelism of program execution.

Figure 1 is a schematic diagram of ifir8ui customized operation functions.

3 Experimental results

The fast algorithm of 4 × 4 integer transform based on TM1300 proposed in this paper uses parallel computing technology to greatly reduce the amount of calculation. Experiments show that to perform a 4 × 4 point integer transform, it takes 80 machine cycles to directly use multiplication and addition operations, and the improved algorithm requires only 28 machine cycles; while using TM1300 to perform an 8 × 8 point fixed-point DCT transform requires 180 machine cycles are also significantly greater than four 4 × 4 point integer transformation times. In terms of transformation, H.264's transformation coding operation complexity is less than other encoding methods.

Tektronix supports Amazon (AWS) media services to provide quality assurance for end-to-end video Shengju Apple TV 4K disassembly report based on unified computing architecture technology video display system design: familiar modular components

Follow WeChat

Interesting and informative information and technical dry goods

Download Audiophile APP

Create your own personal electronic circle

Follow the audiophile class

Lock the latest course activities and technical live broadcast
Collect People collection
share it:
comment
Publish

related suggestion

var check_allow = "/d/Api/iscantalk.html"; var add_url = '/ d / article / write /'; function CheckLogin () {now_uid = ''; var ElecfansApi_checklogin = '/ webapi / passport / checklogin'; var logout_url = "{: U ('Login / logout')}"; var logout_url = 'http://bbs.elecfans.com/member.php?mod=logging&action=logout&refer=front'; $ .get (ElecfansApi_checklogin, function (data, textStatus) {if (data! = "") {EchoLoginInfo (data); CheckEmailInfo (data); data = $ .parseJSON (data); now_uid = data.uid; / * var login_content = 'write an article
'+ data.username +'
Quit '; * / var login_content =' write an article
'+ data.username +'
Set exit '; $ (' # login_area '). Html (login_content); var win_width = $ (window) .width (); if (win_width> 1000) {$ ("# mine"). MouseDelay (200) .hover (function () {$ ("# mymenu"). show ();}, function () {$ ("# mymenu"). hide ();});}} else {var content = 'Login Registration'; $ ('# login_area'). html (content); $ (". special-login"). click (function (e) {$ .tActivityLogin (); return false;});}});} $ (function () {// comment ------------------------------- var comment = $ ("# comment"); var comment_input = $ ("# comContent"); // Submit comment click event interaction $ ("# comSubmit2"). on ('click', function () {var content = comment_input.text (); // Empty input box comment_input. html (""). focus (); // Submit data to server $ .ajax ({url: '/plus/arcComment.php', data: {aid: $ ("# webID"). val (), dopost : 'apiPubComment', content: content}, type: 'post', dataType: 'json', success: function (data) {// Data format returned: if (data.status == "successed") {// Build temporary comment DOM var dom = ''; dom + = '
'; dom + =' '; dom + ='
'; dom + ='

'+ data.data.username +' '; dom + ='

'; dom + =' '+ content +' '; dom + =' '; dom + =' just now '; dom + =' '; dom + =' '; // insert a temporary comment to the list $ ("# comment ") .append (dom);} if (data.status ==" failed ") {// alert (data.msg); layer.msg (data.msg);}}}); return false;}); (function () {/ * * Insert single sign-on JS * / var setHost = 'https://passport.elecfans.com'; // Set domain name var script = document.createElement ('script'); script.type = 'text / javascript'; script.src = setHost + '/public/pc/js/t.passport.js'; script.setAttribute ("id", "sso_script"); script.setAttribute ("data-ssoSite", setHost); script.setAttribute ("data-ssoReferer", encodeURIComponent (location.href)); script.setAttribute ("data-ssoSiteid", "11"); var body = document.getElementsByTagName ("body"). item ( 0); body.appendChild (script);}) () / * * It is recommended to modify the style of the article without a picture * * / $ (". Article .thumb"). Each (function () {if ($ (this). find ('img'). attr ('src') == "") {$ (this) .find ('img'). remove (); $ (this) .parent (). css ('padding-left ',' 0px ');}}); / * Baidu share * / window._bd_share_config = {common: {bdText: '', // Custom share content bdDesc: '', // Custom share summary bdUrl: window.location.href, // Custom share URL address bdPic: ''} , share: [{"bdSize": 60, "bdCustomStyle": true}]} with (document) 0 [(getElementsByTagName ('head') [0] || body) .appendChild (createElement ('script')). src = 'http://bdimg.share.baidu.com/static/api/js/share.js?cdnversion=' + ~ (-new Date () / 36e5)]; var add_url = '/ d / article / write / '; // var check_allow = "{: U (' Api / iscantalk ')}"; var check_allow = "/ d / api / iscantalk"; var click_items_length = $ ('. art_click_count '). length; if ( click_items_length> 0) {var id_str = ''; $ ('. art_click_count'). each (function () {id_str + = $ (this) .attr ('data-id') + ',';}) // var url = "{: U ('Api / getclickbyids')}"; var url = "/ d / api / getclickbyids"; var id_data = 'id_str =' + id_str; $ .ajax ({url: url, data: id_data, type: 'post', dataType: 'json', success: function (re) {if (re.list.length> = 1) {var list = re.list; for (var i in list) {var t emp_id = list [i] ['id']; var temp_span = $ (". art_click_count [data-id =" + temp_id + "]") temp_span.html (list [i] ['click']);}} }})} $ ("# comContent"). click (function () {if (now_uid == '') {$ .tActivityLogin (); return false;}}) $ (function () {var follow_wrap = $ ( ".author-collect"); var now_uid = "{$ _super ['uid']}"; var face_src = "{$ _super ['uface']}"; var getFollowNum = $ (". followNum strong"). html (); // Follow $ (window) .on ('click', '.author-collect', function () {if (now_uid == '') {$ .tActivityLogin (); return false;} if ( $ (this) .attr ('id') == 'follow') {$ .post ('/ d / user / follow', {tuid: article_user_id}, function (data) {// Data format returned: if (data.status == "successed") {$ (". followNum strong"). html (++ getFollowNum); follow_wrap.html ('followed'). attr ('id', 'cancelFollow'). css ( 'background', '# 999'); var follow_user = ' '; $ (' # follow_list '). append (follow_user);} if (data.status == "failed") {alert (data.msg);}});} else {// Unfollow if ($ ( this) .attr ('id') == 'cancelFollow') {$ .post ('/ d / user / cancelFollow', {tuid: article_user_id}, function (data) {// Data format returned: if (data .status == "successed") {follow_wrap.html ('Follow'). attr ('id', 'follow'). css ('background', '# f90'); $ (". followNum strong"). html (-getFollowNum); $ ('# follow_list .face'). each (function () {var target_uid = $ (this) .attr ('data-uid'); if (target_uid == now_uid) {$ ( this) .remove ();}})} if (data.status == "failed") {alert (data.msg);}}); return false;}}});});}); / * var myface = "{$ _super ['uid'] | avatar}"; var myname = "{$ _super ['username']}"; var article_id = {$ article ['id']}; var article_user_id = {$ article ['mid']}; // Article author ID $ (function () {<notempty name = "clearnum"> // Reduce the number of reminders var count = parseInt ($ ("# noticeCount"). html ()); count = count-{$ clearnum}; $ ("# noticeCount"). html (count); if ( count

Guangzhou Ehang Electronic Co., Ltd. , https://www.ehangmobile.com