tms320dm6437 algoritmo de com pres ion

83
IMPLEMENTATION OF VIDEO COMPRESSION ALGORITHM ON THE TEXAS INSTRUMENT VIDEO PROCESSING BOARD TMS320DM6437 Satpalsinh Parmar B.E., Gujarat University, India, 2006 PROJECT Submitted in partial satisfaction of the requirements for the degree of MASTER OF SCIENCE in ELECTRICAL AND ELECTRONIC ENGINEERING at CALIFORNIA STATE UNIVERSITY, SACRAMENTO SPRING 2010

Upload: elihu-fernan-dehesa-gonzalez

Post on 20-Apr-2015

114 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: TMS320DM6437 Algoritmo de Com Pres Ion

IMPLEMENTATION OF VIDEO COMPRESSION ALGORITHM ON THE TEXAS INSTRUMENT VIDEO PROCESSING BOARD TMS320DM6437

Satpalsinh Parmar B.E., Gujarat University, India, 2006

PROJECT

Submitted in partial satisfaction of the requirements for the degree of

MASTER OF SCIENCE

in

ELECTRICAL AND ELECTRONIC ENGINEERING

at

CALIFORNIA STATE UNIVERSITY, SACRAMENTO

SPRING 2010

Page 2: TMS320DM6437 Algoritmo de Com Pres Ion

ii

IMPLEMENTATION OF VIDEO COMPRESSION ALGORITHM ON THE TEXAS INSTRUMENT VIDEO PROCESSING BOARD TMS320DM6437

A Project

by

Satpalsinh Parmar

Approved by: __________________________________, Committee Chair Jing Pang, Ph.D. __________________________________, Second Reader Preetham Kumar, Ph.D. ____________________________ Date

Page 3: TMS320DM6437 Algoritmo de Com Pres Ion

iii

Student:

Satpalsinh Parmar

I certify that this student has met the requirements for format contained in the University

format manual, and that this project is suitable for shelving in the Library and credit is to

be awarded for the Project.

__________________________, Graduate Coordinator ________________ Preetham Kumar, Ph.D. Date Department of Electrical and Electronic Engineering

Page 4: TMS320DM6437 Algoritmo de Com Pres Ion

iv

Abstract

of

IMPLEMENTATION OF VIDEO COMPRESSION ALGORITHM ON THE TEXAS INSTRUMENT VIDEO PROCESSING BOARD TMS320DM6437

by

Satpalsinh Parmar

Video Compression is essential for Multi-Media Communication. Without the use

of video compression, it is nearly impossible to provide fast transmission of Video over

the Internet. The MPEG coding standard is becoming widely used in digital video

applications such as DVD and HDTV. In this project report, I have discussed the basics

of Video compression and different algorithms available for video compression

including the MPEG (Moving Picture Expert Group) Compression standard in detail. In

this project, I have implemented an algorithm for the generation of I-frame, B-frame and

P-frame and few steps of image compression (DCT and Quantization) as part of video

compression flow of MPEG-I standard using MATLAB and on TI’s Video development

Platform TMS320DM6437 DVDP.

Page 5: TMS320DM6437 Algoritmo de Com Pres Ion

v

In addition, I also captured some video images from the camera, and

compressed/decompressed the video I frames, B frames, and P frames. I performed DCT

and quantization steps. The design was implemented in MATLAB and in C language,

which is then successfully implemented on TI’s Video Development Platform.

_______________________, Committee Chair Jing Pang, Ph.D. _______________________ Date

Page 6: TMS320DM6437 Algoritmo de Com Pres Ion

vi

ACKNOWLEDGEMENTS

I am very grateful to all those people because of whom the completion of this

project was possible and because of whom my graduate experience has been so

wonderful.

My deepest gratitude is towards my project advisor Dr. Jing Pang. I am very

fortunate to have an opportunity to work under her guidance. I wish to extend my

appreciation to her encouragement, the invaluable knowledge and the assistance she

provided me.

I would like to thank Dr. Preetham Kumar for providing helpful suggestion and

reviewing my report as a second reader.

I am thankful to Department of Electrical and Electronics engineering for

providing me MATLAB and lab facilities.

Last, but not least, My parents receive my deepest gratitude and love for their

dedication and the many years of support during my graduate studies that provided

foundation of this work.

Page 7: TMS320DM6437 Algoritmo de Com Pres Ion

vii

TABLE OF CONTENTS

Page

Acknowledgements………………………………………………………………..……..vi

List of Tables.……………………………………………………………………….…….x

List of Figures...…………………………………………………………………………..xi

Chapter

1. INTRODUCTION……………………………………………………………..…….1

1.1 Need of Video Compression..………………………………………………...1

1.2 Goal of the Project…...……………………………………………………….2

1.3 Organization of Report…………………………………………………….....2

2. OVERVIEW OF VIDEO COMPRESSION...............................................................4

2.1 Sampling and Quantization………………………………………………….4

2.2 Image and Video Characteristics.…………………………………………....6

2.3 Image Color Formats.…………………………….………………………….9

2.3.1 RGB Color Format………………………………………………….9

2.3.2 YCrCb Color Format……………………………………………....10

2.4 Image and Video Compression Standards………………………...………..11

2.5 JPEG Image Compression………………………...........................................12

2.5.1 Separating Intensity Component…………………………………..13

2.5.2 Forward DCT and IDCT…………………………………………..13

2.5.3 Quantization and Dequantization………………………………….14

Page 8: TMS320DM6437 Algoritmo de Com Pres Ion

viii

2.5.4 DC coding and Zig-Zag Sequence………………………………...16

2.5.5 Entropy Coding……………………………………………………17

2.6 JPEG Applications..,……………………………………………………........17

2.7 MPEG………………………………………………………………………..18

2.7.1 MPEG-1……………………………………………………………18

2.7.1.1 MPEG-1 Video Encoder…………………………………..19

2.7.1.2 MPEG-1 Video Data Structure…………………………...20

2.8 Overview of MPEG-2, MPEG-4 and MPEG-7……………………………...22

2.8.1. MPEG-2…………………………………………………………...22

2.8.2 MPEG-4…………………………………………………………..23

2.8.3 MPEG-7…………………………………………………………...23

3. VIDEO COMPRESSION STRATEGY……………….……………………….........24

3.1 Block Matching Algorithm………………………………………………….25

3.1.1 Exhaustive Search Algorithm……………………………………..28

3.1.2 Three Step Search Algorithm……………………………………...28

3.2 Prediction Error Coding……………………………………………………..28

3.3 Types of Frames……………………………………………………………..30

4. MPEG ALGORITHM IMPLEMENTATION IN MATLAB AND ON TMS320DM6437 DVDP PLATFORM…………………………………………….32

4.1 Implementation of MPEG Algorithm in MATLAB…………………………32

4.1.1 I-frame Encoding and Decoding…………………………………...35

4.1.2 P-frame Encoding and Decoding…………………………………..36

Page 9: TMS320DM6437 Algoritmo de Com Pres Ion

ix

4.1.3 B-frame Encoding and Decoding………………………………….37

4.2 Implementation of MPEG Algorithm on TI’s TMS320DM6437 DVDP………38

4.2.1 Hardware Components and Interfaces on TMS320DM6437 DVDP …………………………………………………………….38

4.2.2 Capturing the Image on TMS320DM6437………………………...40

4.2.3 I-frame Encoding Decoding……………………………………….41

4.2.4 P-frame Encoding Decoding………………………………………42

4.2.5 B-frame Encoding Decoding………………………………………43

5. CONCLUSION AND FUTURE WORK........……….........................................44

Appendix A MATLAB Model for MPEG Video Compression Algorithm…......……...45

Appendix B C Code for MPEG compression Implementation on TMS320DM6437 DVDP……………………………………………………………………………………53 Bibliography………………………………………………………………………..……70

Page 10: TMS320DM6437 Algoritmo de Com Pres Ion

x

LIST OF TABLES

1. Table 2.2.1: Frame Frequency for Different Application…..……………………..7 2. Table 2.2.2: Bit Rate for Different Application…..……………………………….7 3. Table 2.4.1: Compression Standards…...…...…………………………………...11

Page 11: TMS320DM6437 Algoritmo de Com Pres Ion

xi

LIST OF FIGURES

1. Figure 2.1.1 (a): Continuos Image………….……………………………………..5

2. Figure 2.1.1 (b): A Scan Line from A to B in Continuous Image…………...……5

3. Figure 2.1.1 (c): Sampling and Quantization……………………………...……...5

4. Figure 2.1.1 (d): Digital Scan Line..………………………….…………...……...5

5. Figure 2.2.1: Resolution for Different Standards………..…...…………………..6

6. Figure 2.2.2: Interlaced Scanning…..…………...………………………………..8

7. Figure 2.2.3: Progressive Scanning………………………………………………8 8. Figure 2.3.2.1: 4:2:2 Subsample YCrCb Format……………………………….11

9. Figure 2.5.1: Block Diagram of JPEG Encoder and Decoder.………………….12 10. Figure 2.5.3.1: DCT and Quantization Example………...……………………....15 11. Figure 2.5.4.1: Zig-Zag Ordering of AC Coefficient..………………………….16 12. Figure 2.7.1.1.1: MPEG-1 Video Encoder……………………………………...19 13. Figure 2.7.1.2.1: MPEG Video Structure…………………….............................20

14. Figure 3.1.1: Motion Vector.……………………………………………...….....25

15. Figure 3.1.2: Block Matching Process…………………...…...…........................27

16. Figure 3.2.1: Reconstruction Using Motion Vector and Prediction Frame ……29

17. Figure 3.2.2: Motion Prediction……….………………………………………..30

18. Figure: 3.3.1: I, P, B Frames…………………………………..………………...31

19. Figure: 4.1.1: Block Diagram for Algorithm of MATLAB Code………………34

19. Figure 4.1.1.1: I frame, DCT of I frame, and IDCT of I frame………………....35

Page 12: TMS320DM6437 Algoritmo de Com Pres Ion

xii

20. Figure 4.1.2.1: P Frame Encoding and Decoding……………………………..36

21. Figure 4.1.3.1: B Frame Encoding and Decoding……………………………..37

22. Figure 4.2.1.1: Component Level Schematic of TMS320DM6437 DVDP…...39

23. Figure 4.2.1.2: Image of TMS320Dm6437 DVDP……………………………39

24. Figure 4.2.3.1: I-Frame and DCT of I-Frame………..…………………………41

25. Figure 4.2.3.2: Inverse DCT of I-Frame…………..……………………………41

26. Figure 4.2.4.1: I-Frame and P-Frame……………………………………………42

27 Figure 4.2.4.2: Prediction Error and Decoder P Frame…………………………42

26. Figure 4.2.5.1: I,B and P-Frame……………………………………...…………43

27 Figure 4.2.5.2: Prediction Error and Decoder B-Frame…………………………43

Page 13: TMS320DM6437 Algoritmo de Com Pres Ion

xiii

Page 14: TMS320DM6437 Algoritmo de Com Pres Ion

1

Chapter 1

INTRODUCTION

Video has become essential source of entertainment and part of our life. For the

transmission of video and efficient storage of video in less memory, video compression is

essential. For example if you are transmitting video over the internet, it is nearly

impossible to transmit video in uncompressed format because of limited amount of

available bandwidth.

1.1 Need of Video Compression.

Video compression is needed in Internet Video streaming and TV broadcast

where multimedia signals are transmitted over a fixed amount of limited bandwith

channels. Video compression is also useful when multimedia data is stored in memory

devices like video-CDs or hard disk, which has limited storage capability. In case video is

stored in CD without compression, it will barely store 5 to 8 minutes of video. In another

example of, PAL system with standard TV resolution 720x576 pixels, and 8 bit RGB

color scheme, the frame rate is 30 frames/second, and the data rate is

720x576x30x8x3=284 Mb/s. For HDTV with 1920x1080 pixels/frame, the data rate is

2.78 Gb/s. Such bandwidth and storage are not possible even with current powerful

computer systems.[6]

But fortunately video contains a lot of repetitive information for human

capabilities. In Video compression, essentially the unnecessary information and repetitive

data is discarded. Video compression allows transmitting and storing video information

in a compact and efficient manner. There is a tradeoff between quality and compression.

Page 15: TMS320DM6437 Algoritmo de Com Pres Ion

2

If compression ratio is increased, data size decreases but the quality also decreases. On

the other hand, lower compression ratio contains more information that means more data

size but it increase video quality. There are several standards are developed for video

compression.

1.2 Goal of This Project

The purpose of this project is to understand the algorithms used for video

compression. In this project, video compression algorithm, for MPEG-I standard is

implemented using both MATLAB and on TI’s DaVInci board TMS320DM6437EVM

DVDP platform.

1.3 Organization of Report

Chapter 2 gives basic introduction of image and video and compression. It also

gives overview of different image and video compression standards available in industry.

Chapter 3 provides some details about how video compression algorithm works. It

discusses different algorithms available for block matching. It also gives hint that how

encoder complexity and compression ratio are related to each other.

Chapter 4 contains result of a MATLAB simulation for video compression

algorithm. It discusses various capabilities and features of the Texas instrument image

and video development platform TMS320DM6437 board. Moreover, this chapter shows

the result obtained through implementation of MPEG algorithm on TI’s DM6437

platform.

Chapter 5 discusses possible ways to build up a further development of this

project.

Page 16: TMS320DM6437 Algoritmo de Com Pres Ion

3

At the end, Appendix contains MATLAB code and C code for the

implementation of MPEG 1.

Page 17: TMS320DM6437 Algoritmo de Com Pres Ion

4

Chapter 2

OVERVIEW OF VIDEO COMPRESSION

Video is actually a sequence of still images; these images are displayed

successively at desired rate so it creates an illusion of motion. To achieve higher

compression efficient method for image compression is required. A digital image is

composed of number of intensity elements at a particular location called pixels. For a

gray scale images only one intensity value assigned for single pixel. In color image there

are three-color components including Red, Green and Blue and intensity values for each

color component is assigned per pixel. For 8-bit gray scale image, the range of the

intensity value changes from 0 to 255. In 24 bit color image intensity value for each color

component range from 0 to 255.

Video is the technology of electronically capturing, recording, processing, storing,

transmitting and reconstructing a sequence of still images representing scene in motion.

2.1 Sampling and Quantization

Evaluation of a continuous function at fixed intervals is called sampling. The

digital image pixel values are sampled spatially in two dimensions, horizontal and

vertical at finite and discrete coordinate positions. A video has the additional temporal

direction to represent frames.

Quantization is the procedure of constraining something from a continuous set of,

for example, real numbers values to a discrete set such as integers.

Figure 2.1.1 shows a continuous image, f(x,y), that we want to convert to digital

form. To convert it to digital form, we have to sample the function in both coordinates

Page 18: TMS320DM6437 Algoritmo de Com Pres Ion

5

and in amplitude. An image may be continuous with respect to the x- and y- coordinates

and in amplitude. Digitalizing the coordinate values is called sampling. Digitalizing the

amplitude values is called quantization.

Figure 2.1.1 Generating a Digital Image (a) Continuous Image (b) A Scan Line From A to B in Continuous Image (c) Sampling and Quantization (d) Digital Scan Line

Page 19: TMS320DM6437 Algoritmo de Com Pres Ion

6

2.2Image and Video Characteristics

Resolution of an image describes the detail that an image holds. The spatial

frequency at which a digital image is sampled is a good indicator of resolution.

Resolution can be increased by increasing sampling frequency.

The term "bit depth" is used to describe the number of bits used to store

information about each pixel of an image. The higher the depth, the more colors that are

available for storage. The bit depth of an image will determine how many levels of gray

(or color) can be generated.

Resolution of video is size of video image measure in pixels for digital video.

Figure2.2.1 shows resolution of different standards.

Figure2.2.1:Resolution for Different Standards

Page 20: TMS320DM6437 Algoritmo de Com Pres Ion

7

Frame rate is the frequency at which an imaging device produces unique

consecutive images called frames. The minimum required frame rate needed to

regenerate motion is 15 frames/second.

Application Frames/second

Surveillances 5

Multimedia 15

Video Telephony 10

PAL,SECAM 25

NTSC 29.97

HDTV 25-60

Table 2.2.1 Frame Frequencies for Different Applications

‘Bit rate’ or ‘Data rate’ is number of bits transferred per unit time.

Application Bit Rate

Video Telephony 16kbps

Video Conferencing 128-384 kbps

Blu-ray disc quality 54 Mbps

MPEG-1(VCD quality) 1.5 Mbps

MPEG-2(Digital TV,DVD) 16-80 Mbps

HDTV 15 Mbps

Table 2.2.2 Bit Rate for Different Application

Page 21: TMS320DM6437 Algoritmo de Com Pres Ion

8

Aspect ratio is the ratio of width and height of image. Normal TV ratio is 4:3, for

high definition, TV ratio is 16:9.[1]

Two different techniques are available to render the video: interlaced scanning

and progressive scanning. Interlaced scan-based images use techniques developed for

Cathode Ray Tube (CRT)-based TV monitor displays, made up of 576 visible horizontal

lines across a standard TV screen. Interlacing divides these into odd and even lines and

then alternately refreshes them at 30 frames per second. The slight delay between odd

and even line refreshes creates some distortion or 'jaggedness'. This is because only half

lines keep up with the moving image while the other half waits to be refreshed.

Figure 2.2.2 Interlaced Scanning

Figure 2.2.3 Progressive Scanning

Page 22: TMS320DM6437 Algoritmo de Com Pres Ion

9

Progressive scanning, as opposed to interlaced, scans the entire picture line by

line every sixteenth of a second. In other words, captured images are not split into

separate fields like in interlaced scanning. Computer monitors do not need interlace to

show the picture on the screen. It displays them on one line at a time in perfect. so there

is virtually no "flickering" effect. As such, in a surveillance application, it can be critical

in viewing detail within a moving image such as a person running away. However, a high

quality monitor is required to get the best out of this type of scan.

2.3 Image Color Formats

Mainly, there are two types of format available in color image.

1) RGB color format

2) YCrCb color format

RGB stands for Red, Green, Blue. The RGB format is easy to generate a color scheme

visible to human eye. The RGB model is used for display on screen and but not for

printing. RGB is the right choice for displays on websites, PowerPoint presentations and

Acrobat .pdf files. YCrCb color format is easy for image processing.[5]

2.3.1 RGB Color Format

Monitors use combination of these three colors and generate color image. A color

is represented by indicating how much each ingredients of red, green, and blue should be

included in it.

Page 23: TMS320DM6437 Algoritmo de Com Pres Ion

10

Some examples of 24-bit representation of colors:

• (255, 255, 255) represents white • (0, 0, 0) represents black • (255, 0, 0) represents red • (0, 0, 255) represents blue • (0, 255, 0) represents green

2.3.2 YCrCb Color Format

When RGB color format is used, human eyes are more sensitive to Green less

sensitive to Red and least sensitive to Blue. It can be advantageous if picture is described

in terms of luminance and chrominance. Conversion from color component to

luminance(Y) and chrominance (Cb and Cr) is helpful to separate Brightness and color

components.

The equation for the transformation of RGB components into YCrCb components

are:

0.299( ) 0.587( ) 0.114( )0.713( ) 0.500( ) 0.419( ) 0.081( )0.564( ) 0.169( ) 0.331( ) 0.500( )

Y R G BCr R Y R G BCb B Y R G B

= + += − = − −= − = − − + ………………(1)

There are several formats available for YCrCb color format. In 4:4:4 YCrCb format there

are equal number of components for Y and Cr and Cb. But, in 4:2:2 YCrCb formats, Cr

and Cb components are sub sampled to be presented in the interleaved fashion as shown

in the figure 2.3.2.1.

In this project, for Hardware implementation using TI Board I have used YCrCb

format in the interleaved fashion called 4:2:2 YCrCb sub sampled format. Every other

Page 24: TMS320DM6437 Algoritmo de Com Pres Ion

11

byte is Y, every 4th byte is a Cb, and every 4th byte is a Cr. The format is Cb Y Cr Y Cb

Y Cr Y and the sampling format is shown in the following figure.

X O X O X O X O

X O X O X O X O

X O X O X O X O

X=Cb/Cr component, O= Y component.

Figure 2.3.2.1 4:2:2 Subsample YCrCb Format

The notation 4:2:2 indicates that the chrominance components are sub sampled to 2:1

ratio. The above figure shows that every other pixel location has the Cb and Cr

components.[5]

2.4 Image and Video Compression Standards

STANDARD APPLICATION

JPEG Still Image Compression

JPEG-2000 Improved Still Image Compression

MPEG-1 Video on digital storage media

MPEG-2 Digital TV

MPEG-4 Mobile Application, HD, DVDs

H.261 Video Conferencing Over ISDN

H.263 Video Telephony over PSTN

Table 2.4.1- Compression Standards

Page 25: TMS320DM6437 Algoritmo de Com Pres Ion

12

2.5 JPEG Image Compression

JPEG stands for ‘Joint Picture Expert Group’, A committee created to form

standards for compression of still image. Digital images have mostly gradual changes in

intensity over most of image. Human eyes are less sensitive to chrominance information

and can differentiate between similar shades of luminance to certain extent only. So, to

discard the information which human eyes cannot differentiate JPEG implements DCT

(Discrete cosine Transform) and Quantization. A simplified block diagram for JPEG

encoder and decoder is shown in figure. 2.5.1 [4]

Figure 2.5.1 Block Diagram for JPEG Encoder and Decoder

Page 26: TMS320DM6437 Algoritmo de Com Pres Ion

13

The steps for JPEG encoding are:

1) If the color is represented in RGB mode, Translate it to YUV

2) Divide the file in to 8X8 blocks

3) Transform the pixel information from spatial domain to the frequency domain

with the Discrete Cosine Transform

4) Quantize the resulting values by dividing each coefficient by an integer value

and rounding off to the nearest integer

5) After arranging in Zig-Zag order. Do a run length encoding of the coefficients.

Followed by Huffman coding.

2.5.1 Separating Intensity Component

Human eyes are more sensitive to change in luminance than change in color that

is chrominance difference. In JPEG file format RGB data is translated in to YCbCr data.

This is done by following equations.

0.299( ) 0.587( ) 0.114( )0.713( ) 0.500( ) 0.419( ) 0.081( )0.564( ) 0.169( ) 0.331( ) 0.500( )

Y R G BCr R Y R G BCb B Y R G B

= + += − = − −= − = − − + ………………………(2)

Chroma sub sampling is the process whereby the color information in image sampled at a

lower resolution than the original.

2.5.2 Forward DCT and IDCT

Forward DCT (FDCT) and Inverse DCT (IDCT) are applied to each 8x8 blocks.

The following equations are used for FDCT and IDCT operation.

Page 27: TMS320DM6437 Algoritmo de Com Pres Ion

14

[ ] [ ]1 1

0( , ) ( ) ( ) ( , ) cos (2 1) / 2 cos (2 1) / 2 , 0,1,2,... 1.

( ) ( ) 1/ , 0

( ) ( ) 2 / , 1, 2,3... 1

N N

x sC u v a u a v f x y x u N y v N wh en u v N

a u a v N wh en u v

a u a v N wh en u v N

π π− −

== + + → = −∑ ∑

= = → =

= = → = − ..(3)

And, the formula for IDCT (Inverse Discrete Cosine Transform) is:

[ ] [ ]1 1

0 0( , ) ( ) ( ) ( , ) cos (2 1) / 2 cos (2 1) / 2 , 0,1,2,..., 1.

( ) ( ) 1/ , 0

( ) ( ) 2 / , 1, 2,3,..., 1.

N N

u vf x y a u a v C u v x u N y v N wh en x y N

a u a v N wh en u v

a u a v N wh en u v N

π π− −

= == + + → = −∑ ∑

= = → =

= = → = − ..(4)

DCT converts spatial domain to frequency domain. DCT does not do any

compression but it converts the image in proper format so that compression can be done

in the form of Quantization.[4]

2.5.3 Quantization and Dequantization

After the output from the FDCT , each of 64 DCT coefficients are quantized in

conjunction with a 64-element Quantization table, which is supplied by the user as input

to the encoder, elements of the quantization table can be any integer value from 1 to 255,

which specified the step size of quantizer for corresponding DCT coefficient. The

purpose of quantization is to throw away the unnecessary precision, which is not visually

significant. In quantization, we throw away unnecessary information, which cannot be

retrieved back. This way it is main source of precision loss in DCT based Encoders.

Quantization is defined as division of DCT co-efficient by its corresponding

quantizer step size followed by rounding to the nearest integer:

Page 28: TMS320DM6437 Algoritmo de Com Pres Ion

15

)),(),((),(

vuQvuFndIntegerRouvuF = …………………..(5)

This output is normalized by the quantizer step size. Dequantization is the inverse

function. In dequantization normalization is removed by multiplying by the step size.[4]

For Inverse DCT:

),(*),(),(' vuQvuFvuF = ….……………(6)

Figure 2.5.3.1 DCT and Quantization Example

Page 29: TMS320DM6437 Algoritmo de Com Pres Ion

16

2.5.4 DC Coding and Zig-Zag Sequence

This step achieves additional compression lossless by encoding the quantized

DCT coefficient. After quantization, the DC coefficient is treated separately from 63 AC

coefficients. The DC coefficient is a measure of the average value of the 64 image

samples. The quantized DC coefficients are encoded as the difference from the DC

coefficient of previous blocks in encoding order because there is strong correlation

between DC coefficients of adjacent blocks. DC coefficient contains significant portion

of the energy of image. So this difference provide sufficient compression. After this step,

all of quantized coefficients are ordered into the “Zig-Zag” sequence, The Zig-Zag

scanning of the 2D quantized coefficients orders the frequencies into a 1D stream of

frequencies from lower to higher. This ordering helps to facilitate entropy coding by

placing low frequency coefficients before high frequency coefficients.[4]

Figure 2.5.4.1 Zig-Zag Ordering of AC Coefficient

Page 30: TMS320DM6437 Algoritmo de Com Pres Ion

17

2.5.5 Entropy Coding

Entropy coding achieves addition compression lossless by encoding the quantized

DCT coefficient more compactly based on their statistical characteristics

In JPEG two Entropy coding methods are available

(1) Huffman Coding

(2) Arithmetic Coding

Entropy coding is 2-step process. During the first step, the zigzag sequence of

quantized coefficient is converted into intermediate sequence of symbols. The second

step converts the symbols to a data stream in which the symbols no longer have

externally identified boundaries.

Huffman coding uses Huffman table defined by application for compress an

image and then the same table is used for decompression. These Huffman tables are

predefined or computed specifically for a given image during initialization, prior to

compression.

Arithmetic coding doesn’t requires tables like Huffman coding because it is able

to adapt to the image statistics as it encodes the image. Arithmetic coding is a little

complex than Huffman coding for certain implementation, for example, the highest-speed

hardware implementation. Trans coding between two coding method is possible by

simply entropy decoding with one method and entropy recoding with the other.

2.6 JPEG Applications

JPEG application areas are internet, digital photography, cinema and also

frequently in MPEG video compression. JPEG achieves high compression for an

Page 31: TMS320DM6437 Algoritmo de Com Pres Ion

18

acceptable quality. JPEG is the building block in MPEG video compression. DCT,

Quantization, Huffman coding, all techniques used in JPEG are also used in MPEG to

compress individual frames in a Video sequence.

2.7 MPEG

International Standards Organization (ISO) established the MPEG standard to

meet the demand of exchanging coded representation of moving pictures between

different platforms and applications. In 1988 ISO established the Moving Picture Expert

Group (MPEG) to develop the standard.

The MPEG standards define only the decoding process; the process of creating

the coded bit-stream from the source video material is not defined by the standard and

therefore different encoder can use different algorithms and methods to generate the bit

stream. As long as the coded bit stream conforms to the standard, it is considered as valid

bit stream and should be decodable by any MPEG-compliant decoders.

2.7.1 MPEG-1

MPEG-1 standard is optimized for stored digital video in storage medium such as

video CDs. It is not designed for progressive video and does not support interlaced

scanning. So, it is not used for TV broadcasting .

Video is sequence of still digital images, So JPEG coding can compress this

images. This technique is called Motion JPEG, But this technique does not take

advantage of temporal redundancy, hence MPEG achieves much more compression.[6]

Page 32: TMS320DM6437 Algoritmo de Com Pres Ion

19

2.7.1.1 MPEG-1 Video Encoder

MPEG-1 video encoder block diagram is shown in Figure 2.7.1.1.1. In put Video

is first converted from RGB to YUV format. If the given frame is I frame, it will be

simply compressed as JPEG compression. That means I frame is passed through DCT,

quantization and then entropy coding is done. If it is P frame or B frame then motion

estimation is done with respect to reference frame and prediction error and then motion

vector is coded.[6]

Figure 2.7.1.1.1 MPEG-1 Video Encoder

Page 33: TMS320DM6437 Algoritmo de Com Pres Ion

20

2.7.1.2 MPEG-1 Video Data Structure

A Video structure is composed of following layers:

1) Sequence layer

2) Group of Picture Layer

3) Picture layer

4) Slice Layer

5) Macro block

6) Block layer

Figure 2.7.1.2.1 MPEG Video Structure

Page 34: TMS320DM6437 Algoritmo de Com Pres Ion

21

1) Sequence Layer

A video is a sequence of still digital images displayed successively to

create an illusion of motion.

2) Group of Pictures (GOP) Layer

The GOP (Group of Picture) represents the number of frames between

reference frames. There are three types of frames, I, P and B-frames. GOP is

consist of I frame followed by B frames and P frames. P frames are forward

coded, while B frames are bi-directional coded. The GOP value (distance between

two I frames) is user defined during encoding. The lower the GOP value, the

better response with the movement will be, But the compression ratio will be

poor.

The coding order and transmission order are different from the display

order. In coding, I frame is first encoded, next P frame is encoded and then

intermediate B frames are encoded. Similar order is followed while transmitting

the data. Thus the order of encoding would be ‘IPBBPBBPBB’, but the display

order will be ‘IBBPBBPBBP’.

3) Picture Layer

In GOP, there are two kinds of frames. I frame are intra-frame coded

whereas B and P frames are inter-frame coded.

Intra frame (I-frame) coding

I-frames or Intra frames are used for reference frames. Intra frame coding

is done using information available within the frame only. The coding of Intra

Page 35: TMS320DM6437 Algoritmo de Com Pres Ion

22

frame does not depends on any other frame, this reduces the spatial redundancy

within each frame. I frames are coded similarly as JPEG coding.

Inter-frame Coding

P frames and B frames are inter-coded frames. P frames are forward

predicted from either previous I frame or previous P frame. P frame encoding

would require motion estimation. Motion vector and prediction error are

generated, and only these information is encoded and transmitted. Inter-frame

coding achieves more compression than intra-frame coding as it exploits temporal

redundancy. B frames carry difference from previous reference frame as well as

next reference frame. Thus B frames achieve the highest compression.

2.8 Overview of MPEG-2,MPEG-4 and MPEG-7

2.8.1 MPEG-2

MPEG-2 is just an extension of MPEG-1.

The enhancements of MPEG-2 Over MPEG-1

• Support field interlaced video

• Better quality

• Profiles & levels for flexible option

• Digital TV broadcasting standard

• Several bit rates and compression ratios

Page 36: TMS320DM6437 Algoritmo de Com Pres Ion

23

2.8.2 MPEG-4

Multimedia and web compression uses MPEG-4. In MPEG-4, individual objects

are tracked separately and compressed together. MPEG-4 provides very high scalability;

from low bit rates to high bit rate. MPEG-4 supports very low bandwidth applications

such as Mobile application. On the other hand, it also supports application with extremely

high quality and unlimited bandwidth such as HD DVD and Blu-ray discs.[6]

2.8.3 MPEG-7

MPEG-7 is multimedia content description standard. It is used for search

algorithm for image or audio tunes in database.

Page 37: TMS320DM6437 Algoritmo de Com Pres Ion

24

Chapter 3

VIDEO COMPRESSION STRATEGY

Two types of redundancy are responsible for compression. Redundancy between

the pixels called spatial redundancy. Redundancy between frames called temporal

redundancy. Spatial redundancy, also known as Intra-frame redundancy is achieved using

techniques of DCT, Quantization and Entropy coding. Temporal redundancy, also known

as Inter-frame redundancy is achieved using techniques of motion estimation.

An MPEG video is sequence of still digital images. Two successive frames in

video have minor difference. Motion estimation is the process, which tracks such changes

in order to reduce this inter-frame redundancy. Motion estimation is the process by which

a macro block in a picture is best correlated to macro block in previous or next picture by

the estimated amount of motion. The motion vector stores the amount of motion.

Correlation with previous image is stored in forward motion vector and correlation with

future image is stored in backward motion vector. Background of images generally does

not change position while object in the foreground moves a little with relative to

reference frame. Motion estimation is used to determine the displacement of an object in

frame. Displacement of an object with reference to another frame is coded. In industry

many motion estimation algorithm are implemented. Block matching algorithms are most

effectively used for motion estimation.

Page 38: TMS320DM6437 Algoritmo de Com Pres Ion

25

3.1 Block Matching Algorithms

Objects in the frame of video sequence move within frame to form corresponding

objects in new subsequence. Generally, background of image remains the same. To find

matching block, each block of current frame is compared with past or future frame within

a search area.

Firstly, current frame is divided into smaller macro blocks (16x16). And then they

are compared to corresponding macro blocks and its adjacent neighbors in previous or

future frame. MAD (mean absolute difference) is calculated at each position in search

area; and macro block that results in least cost is the one that matches the closest to

current block. A vector is found which indicates the movement of current block with

respect to matching block in future or past frame. This vector is called motion vector.

Motion vectors for each and every macro block are found in the raster scan order and

stored.

Figure 3.1.1 Motion Vector

Page 39: TMS320DM6437 Algoritmo de Com Pres Ion

26

||1 1

0

1

02 ij

N

i

N

jij RC

NMAD −= ∑∑

=

= ………………………………(7)

∑∑−

=

=

−=1

0

21

02 )(1 N

i

N

jijij RC

NMSE …………………………….(8)

Where, N=16 ,Cij and Rij is current and reference macro blocks being compared

Mean Absolute Difference (MAD) and Mean Squared Error (MSE) are mostly

used for Macro block matching.

Block size, search area, and motion vector accuracy defines the quality of

prediction. It is most likely that matching block is found if search area is larger, but larger

search area will slow down the encoding process. Usually block size is 16x16.

Figure 3.2.1 shows block matching process with block size of NxN, Search range

is p. Block matching algorithm is very time consuming. There are many faster search

algorithms available which saves computation time and provide better match.[6]

Page 40: TMS320DM6437 Algoritmo de Com Pres Ion

27

Figure 3.1.2 Block Matching Process

Page 41: TMS320DM6437 Algoritmo de Com Pres Ion

28

3.1.1 Exhaustive Search Algorithm (ES)

This is the most basic search algorithm. It searches in every possible search area

and provides the best match possible, however this algorithm is extremely computation

expensive, and it is very slow. As the search area increases computation time increases

exponentially. For example with macro block size of 16 and with search range of 7 , a

total of 255 MAD computations are required in this algorithm[6]

3.1.2 Three Step Search Algorithm

This algorithm does not search all possible locations. It starts search at center

location usually step size S=4 usually, and finds cost at all 9 locations around it at S=4.

The location where the cost is least is then set as a new origin and again cost is found at 9

locations around it with S=check)4/2. Again the least cost location is set as origin and

cost is searched at 9 locations with S=2/2 now. The final least cost location selected as

best match and motion vector is coded. Because TSS takes up less number of steps it is

faster than ES.[6]

3.2 Prediction Error Coding

Only the motion vector is not sufficient to regenerate predicted macro block,

hence the difference between predicted macro block and original macro block, known as

prediction error, is also coded along with motion vector. At the decoder, combination of

motion vector and prediction error will regenerate exact macro block. At the decoder

side, with help of motion vector, decoder will generate predicted frame. Finally, by

adding this predicted frame with the prediction error it can exactly regenerate original

image. [6]

Page 42: TMS320DM6437 Algoritmo de Com Pres Ion

29

Figure 3.2.1 Reconstruction using Motion Vector and Prediction Frame

Motion estimation uses the Motion vector to store the movement of the macro

block. So, the amount of data to be stored for image difference is greatly reduced. Figure

3.2.2 shows that motion predicted difference image stores very less data compared to

normal difference image. Hence, motion estimation is very efficient way for data

compression. [6]

Page 43: TMS320DM6437 Algoritmo de Com Pres Ion

30

Frame N Frame N+1

Difference Image Motion predicted difference image

Figure 3.2.2 Motion Prediction

3.3 Types of Frames

Frames are classified in three types.

1) I-Frames (Intra)

2) P-Frames (Forward Predicted)

3) B-Frames (Bi-Directional Prediction)

I-frames are compressed using JPEG standards. I–frames do not have any

reference frame. They serve as reference frames for B-frames and P-frames. I frame

Page 44: TMS320DM6437 Algoritmo de Com Pres Ion

31

compression is not as high as B and P-frames because it uses spatial redundancy and

compress frame as it is.

P frames are forward predicted frames, which mean they are predicted with

reference to previous frame of either P-frame or I-frame. In P-frame coding only

motion vector and prediction error is stored instead of intra-coding of whole frame.

B-frames are Bi-predicted frames, which mean they are predicted with reference

to previous frame as well as future frame.

Figure 3.3.1 I , P , B Frames

Page 45: TMS320DM6437 Algoritmo de Com Pres Ion

32

Chapter 4

MPEG ALGORITHM IMPLEMENTATION IN MATLAB AND ON TMS320DM6437 DVDP PLATFORM

4.1 Implementation of MPEG Algorithm in MATLAB

The algorithm was first modeled and implemented in MATLAB, to perform Intra

coding to generate I frame and perform Inter coding to generate P and B frames. I used

exhaustive search algorithm for motion estimation. Not all steps for JPEG compression

were implemented here. Only DCT, and quantization were included.

Figure 4.1.1.1 shows a block diagram of algorithm, implemented using MATLAB

code. For MATLAB simulations, I used my own Video source. I captured three images

as I-frame, B-frame and P-frame. First, these images are converted in to gray scale

images, I-frame is Intra coded, and Quantization and DCT are performed on I frame.

Forward prediction block takes I frame and P frame as input and as output respectively,

and it will generate prediction error frame and motion vector. For the generation of

prediction error, exhaustive search algorithm is used as block matching algorithm.

Similarly Bidirectional prediction block takes I-frame, B-frame and P-frame as input and

as output to generate prediction error and motion vector for B frame. Prediction error for

B frame is generated using both forward prediction as well as backward prediction.

Prediction error frames are then passed through DCT and quantization step. Because

prediction error frames contains only the difference between predicted frame and current

frame, most of the pixel value of prediction error frame is zero so compression ratio for

prediction error frame is high compared to B- frame or P-frame. On decoder side,

Page 46: TMS320DM6437 Algoritmo de Com Pres Ion

33

dequantization and inverse DCT are performed on compressed I-frame and compressed

prediction error frame. Using the prediction error of P-frame, Motion vector and decoded

I frame, P-frame encoder will regenerate P frame. Similarly, Using prediction error of B-

frame, Motion vector and decoded I and P frames B-frame decoder will regenerate B

frame

Page 47: TMS320DM6437 Algoritmo de Com Pres Ion

34

Capture Images from Camera

Convert Images into GrayScale

Images

Store Images as I frame, B frame, P

frame

Discrete Cosine Transform

Quantization

Forward Prediction

Bi-Directional Prediction

Display Images on TV

Inverse Discrete Cosine Transform

Dequantization

P frame decoder

B frame Decoder

Motion vector of B and P frame

I fra

me

Pred

ictio

n er

ror f

or

P an

d B

fram

e

DC

T of

I fra

me,

pr

edic

tion

erro

r of B

an

d P

fram

e

DCT + Quantized value of I frame ,Prediction error of B and Pframe

DC

T of I frame,

prediction error of B and P fram

e

I frame

Prediction error for P and B fram

eC

olor

Imag

esG

ray

Scal

e Im

ages

I fra

me,

B fr

ame,

Pf

ram

e

I frame, B fram

e , Pfram

e

Figure. 4.1.1 Block Diagram for Algorithm of MATLAB Code

Page 48: TMS320DM6437 Algoritmo de Com Pres Ion

35

4.1.1 I-frame Encoding Decoding

Figure 4.1.1.1 I Frame, DCT of I Frame and IDCT of I Frame

Figure 4.1.1.1 shows I-frame, DCT of I frame, and IDCT of I frame. IDCT of I –

frame is done to verify the DCT operation.

Page 49: TMS320DM6437 Algoritmo de Com Pres Ion

36

4.1.2 P frame Encoding and Decoding

Figure 4.1.2.1 P-frame Encoding and Decoding

In Figure 4.1.2.1 I-frame, P-frame, Prediction error of P frame, and decode P

frame is shown. From the figure we can see that Prediction error contains difference

between Predicted P-frame and I-frame. This difference is smaller than the difference of I

frame and P-frame. So by taking prediction error instead of normal difference we achieve

noticeable compression ratio.

Page 50: TMS320DM6437 Algoritmo de Com Pres Ion

37

4.1.3 B frame Encoding and Decoding

Figure 4.1.3.1 B frame Encoding and Decoding

Figure 4.1.3.1 shows I,B,P frames, Prediction error for B frame and Decoded B-frame.

From the figure it can be seen that as B frame use bidirectional prediction it has very

minimal difference between predicted frame and B-frame. So, compression of prediction

error of B-frame would be more than compression of prediction error of P-frame.

Page 51: TMS320DM6437 Algoritmo de Com Pres Ion

38

4.2 Implementation of MPEG Algorithm on TI’s TMS320DM6437 DVDP

4.2.1 Hardware Components and Interfaces on TMS320DM6437 DVDP

TI’s platform DM6437 has all the capabilities that are required for develepoment

of the complex application related to audio and video. Combining capabilities of Texas

instrument’s latest DSP processor core and high quality audio and video interfaces

provides developer the full power of development in less time to market. Code Composer

Studio v3.3 provides Integrated Development Platform (IDE) for implementation and

debug of various image and video application in the C/C++ programming language. [2]

Some feature of TMS320DM6437 DVDP.

1. TMS320C64x TM DSP core operating at 600 MHz.

2. 80 KB L1D,32 KB L1P cache/SRAM and 128 KI L2 cache SRAM memory

3. Two 32-bit,133-MHz extended memory interfaces(EMIFs)

4. 10/100 Ethernet media access controller (MAC), two UARTs, I2C, SPI,

GPIO, McASP and three PWMs.

Page 52: TMS320DM6437 Algoritmo de Com Pres Ion

39

NANDFLASH

DM6437

Video DecoderVideo IN

SRAM

Ethernet CAN RS-232

AIC 33CODEC

MIC IN

LINE IN

LINE OUT

LINE OUT

POWER

DDR2

DDR2

TMS320DM6437

Figure 4.2.1.1: Component Level Schematic of TMS320DM6437 DVDP

Figure 4.2.1.1 shows DM6437 DSP core, memories such as DDR2,

SRAM and NAND flash and various interfaces such as CAN, RS-232 and SVideo

IN, SVideo OUT on the periphery of the platform.

Figure 4.2.1.2: Image of TMS320DM6437 DVDP

Page 53: TMS320DM6437 Algoritmo de Com Pres Ion

40

For capturing the image and storing it, the on board RCA type connector was

used.

4.2.2 Capturing the Image on TMS320DM6437

To capture an image from a camera I used FVID_exchange function from VPFE

standard library function. FVID_exchange function takes image from camera connected

at S-video IN port, and the captured image through this function is in YCrCb format. The

luminance component is separated from this image to get gray scale image. After

capturing the Image Intra frame coding or inter frame coding is performed. I have

explained this steps in detail in previous chapters. I have attached a C code in Appendix

B, which will performs encoding and decoding of I frame, P frame and B frame. In this

chapter I will just show the results. The Code in Appendix is well commented and self

explanatory.[3]

Page 54: TMS320DM6437 Algoritmo de Com Pres Ion

41

4.2.3 I-frame Encoding Decoding

Figure 4.2.3.1 I-frame and DCT of I-frame

Figure 4.2.3.2 Inverse DCT of I-frame

Figure 4.2.3.1 and 4.2.3.2 shows results of DCT and IDCT of I-frame on the

DM6437 DVDP.

Page 55: TMS320DM6437 Algoritmo de Com Pres Ion

42

4.2.4 P-frame Encoding Decoding

Figure 4.2.4.1 I-frame and P-frame

Figure 4.2.4.2 Prediction Error and Decoder P frame

Figure 4.2.4.1 and 4.2.4.2 shows display of I, P frames, Prediction error, and

Decoded P frame on TV using DM6437DVDP

Page 56: TMS320DM6437 Algoritmo de Com Pres Ion

43

4.2.5 B-frame Encoding Decoding

Figure 4.2.5.1 I,B and P frame

Figure 4.2.5.2 Prediction Error and Decoder B-frame

Figure 4.2.5.1 and 4.2.5.2 shows display of I, B, P frames, Prediction error, and

Decoded B frame on TV using DM6437DVDP

Page 57: TMS320DM6437 Algoritmo de Com Pres Ion

44

Chapter 5

CONCLUSION AND FUTURE WORK

Video compression is essential for transmission and storage of multimedia

signals. MPEG 1 is the first implementation of video compression and is used

everywhere even today in form of distributing contents over CDs.

In this project, function blocks used in MPEG1 algorithm were verified in

MATLAB simulation. Then the implementation of this video compression algorithm on

hardware (TI’s DM6437) was also done successfully.

Additionally, in this project implementation of the algorithm for generating I

frame, B frame and P frame was also achieved. All steps other than entropy coding are

also included in the algorithm for still image compression. The current implementation

can work very well on stored multimedia data. However, to make it work in real time

applications, modifications are required to allow fast algorithm. Other scope of future

work is to include audio component in the video compression, however implementation

of MPEG-4 or MPEG -7 would be a challenging task.

Page 58: TMS320DM6437 Algoritmo de Com Pres Ion

45

APPENDIX A

MATLAB Model for MPEG Video Compression Algorithm

close all clc %reading video file frame by frame and stored video is used as a pointer to %access frames one buy on [video_file,file]=uigetfile({'*.avi';'*.*'},'Open Video'); video=aviread(video_file); nframes=size(video) %movie(video,1,473) % separating I frame,B frame and P frame and converting them to grayscale % image I_frame=double(rgb2gray(video(1).cdata)) B_frame=double(rgb2gray(video(30).cdata)) P_frame=double(rgb2gray(video(80).cdata)) %to see what images have been captured as I B and P frame %imshow(uint8(I_frame)) %imshow(uint8(I_frame)) %imshow(uint8(P_frame)) %this is the prediction function which will take I_frame and P_frame as %Input and return the motion vector and predicted frame. Using predicted %frame prediction error is generated on the decoder side only compressed %prediction error and motion vector is availabe. image compression of %prediction error is much more than normal frame as it has all zeroes %except where there is difference between predicted_frame and I_frame %(To check detail how this function works look the .m file for this %function) [motion_vector_P,encoder_predicted_P_frame]=forwardprediction(I_frame,P_frame) prediction_error_P=P_frame-encoder_predicted_P_frame %for encoding of B_frame we consider both forward prediction and backward %prediction and combine this two such that generated prediction error frame %will have a lot compression capabilities [forward_motion_vector,forward_predicted_B_frame]=forwardprediction(I_frame,B_frame) forward_prediction_error=B_frame-forward_predicted_B_frame %this will generate backward motion vector and backward prediction error [backward_motion_vector,backward_predicted_B_frame]=backwardprediction(P_frame,B_frame) backward_prediction_error=B_frame-backward_predicted_B_frame

Page 59: TMS320DM6437 Algoritmo de Com Pres Ion

46

%this function will generate prediction error and motion vector from %forward prediction and backward prediction such that the resulted %preiction error can provide much more compression ratio %(for detail see .m file for this function) [motion_vector_B,prediction_error_B]= encode_B_frame(forward_motion_vector,backward_motion_vector,forward_prediction_error,backward_prediction_error) %Now from encoder will only send compressed I frame,compressed prediction error for P and B frame % Here I have perform only Dct from whole compression %flow. I_frame_dct=dct_function(I_frame) prediction_error_P_dct=dct_function(prediction_error_P) prediction_error_B_dct=dct_function(prediction_error_B) %%%quantization not included in c code quantize_prediction_error_P= quant_funct(prediction_error_P_dct) quantize_prediction_error_B= quant_funct(prediction_error_B_dct) quantize_I_frame=quant_funct(I_frame_dct) %%%%%%%%%%%%%%%%%%%%decoder%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%side%%%%%%%%%%%%%%%%%%%%% %%dequantization not included in c code dequantize_prediction_error_P_dct= dequant_funct(quantize_prediction_error_P) dequantize_prediction_error_B_dct= dequant_funct(quantize_prediction_error_B) dequantize_I_frame_dct=dequant_funct(quantize_I_frame) %After receiving compressed frames decoder will decompress these frames. %here only inverse DCT is performed I_frame_idct=idct_function(dequantize_I_frame_dct) prediction_error_P_idct=idct_function(dequantize_prediction_error_P_dct) prediction_error_B_idct=idct_function(dequantize_prediction_error_B_dct) %After decompressed Predcition error and motion vector is available decoder %will generate P frame decoder_predicted_P_frame=deoderprediction(motion_vector_P,I_frame_idct) decoded_P_frame=prediction_error_P_idct+decoder_predicted_P_frame %After decompressed Predcition error and motion vector is available decoder %will generate B frame decoder_predicted_B_frame=B_frame_decoder_prediction(motion_vector_B,I_frame_idct,decoded_P_frame) decoded_B_frame=prediction_error_B_idct+decoder_predicted_B_frame %plotting of frames from begining to intermidiate stges subplot(2,7,1) imshow(uint8(I_frame)) title('encoder I frame') subplot(2,7,2)

Page 60: TMS320DM6437 Algoritmo de Com Pres Ion

47

imshow(uint8(P_frame)) title('encoder P frame') subplot(2,7,3) imshow(uint8(B_frame)) title('encoder B frame') subplot(2,7,4) imshow(uint8(prediction_error_P)) title('prediction error of P') subplot(2,7,5) imshow(uint8(prediction_error_B)) title('prediction error of B') subplot(2,7,6) imshow(uint8(I_frame_dct)) title('dct of I_frame') subplot(2,7,7) imshow(uint8(prediction_error_P_dct)) title('dct of prediction error of P') subplot(2,7,8) imshow(uint8(prediction_error_B_dct)) title('dct of prediction error of B') subplot(2,7,9) imshow(uint8(I_frame_idct)) title('inverse dct of I_frame') subplot(2,7,10) imshow(uint8(prediction_error_P_idct)) title('inverse dct of prediction error of P') subplot(2,7,11) imshow(uint8(prediction_error_B_idct)) title('inverse dct of prediction error of B') subplot(2,7,12) imshow(uint8(decoded_P_frame)) title('decoder P frame') subplot(2,7,13) imshow(uint8(decoded_B_frame)) title('decoder B frame') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Internal Functions %%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function mb_MAD = MAD(P_block,I_block) global mb mb_MAD= sum(sum(abs((P_block-I_block))))/mb^2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function quantize_frame= quant_funct(frame)

Page 61: TMS320DM6437 Algoritmo de Com Pres Ion

48

qtz_mtrx=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 12 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99]; [m n]=size(frame); % add ofset of 100 for the elimination of the negative pixel values img_os= frame+200; for i=1:8:m for j=1:8:n quantize_frame(i:i+7,j:j+7)=round(img_os(i:i+7,j:j+7)./qtz_mtrx); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function dequantize_frame= dequant_funct(frame) qtz_mtrx=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 12 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99]; [m n]=size(frame); for i=1:8:m for j=1:8:n dequantize_frame_os(i:i+7,j:j+7)=frame(i:i+7,j:j+7).*qtz_mtrx; end end % add ofset of 100 for the elimination of the negative pixel values dequantize_frame=dequantize_frame_os-200; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function frame_dct=dct_function(frame) [m n]=size(frame); for a=1:8:m for b=1:8:n frame_dct(a:a+7,b:b+7)=dct2(frame(a:a+7,b:b+7)); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function frame_idct=idct_function(frame) [m n]=size(frame); for a=1:8:m for b=1:8:n frame_idct(a:a+7,b:b+7)=idct2(frame(a:a+7,b:b+7)); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [motion_vector,new_B_frame]=forwardprediction(I_frame,B_frame) global mb_MAD mb_MAD_3d prediction_error mb range

Page 62: TMS320DM6437 Algoritmo de Com Pres Ion

49

[m n]=size(I_frame); threshold=16; mb=16; range=20; vector_size =(m*n)/(mb^2); motion_vector = zeros(3,vector_size); mb_MAD=256*ones(15,15); %-----Block Matching Algorithm----------------% count =1; for i=1:mb:m-mb+1 for j=1:mb:n-mb+1 min=512; k1=0; l1=0; for k= -range:range for l = -range:range if ((i+k)<1||(j+l)<1||(i+k)+mb-1>m||(j+l)+mb-1>n) continue; end %MAD function stands for Mean Absolute Difference ,which %decide weather two macro block are matching or not %depending on allowed threshold min_MAD=MAD(B_frame(i:i+mb-1,j:j+mb-1),I_frame((i+k):(i+k+mb-1),(j+l):(j+l+mb-1))); if min_MAD<min min=min_MAD; k1=k; l1=l; end end end %comparing with threshold value to check intra-MBs---% if min > threshold new_B_frame(i:i+mb-1,j:j+mb-1) = I_frame(i:i+mb-1,j:j+mb-1); motion_vector(1,count) = 0; %Horizontal motion vector motion_vector(2,count) = 0; %vertical motion vector motion_vector(3,count) = 0; else new_B_frame(i:i+mb-1,j:j+mb-1)= I_frame((i+k1):(i+k1+mb-1),(j+l1):(j+l1+mb-1)); motion_vector(1,count) = k1; %Horizontal motion vector motion_vector(2,count) = l1; %vertical motion vector motion_vector(3,count) = 0;

Page 63: TMS320DM6437 Algoritmo de Com Pres Ion

50

end count=count+1; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [motion_vector,new_B_frame]=backwardprediction(I_frame,B_frame) global mb_MAD mb_MAD_3d prediction_error mb range [m n]=size(I_frame); threshold=16; mb=16; range=20; vector_size =(m*n)/(mb^2); motion_vector = zeros(3,vector_size); mb_MAD=256*ones(15,15); %-----Block Matching Algorithm----------------% count =1; for i=1:mb:m-mb+1 for j=1:mb:n-mb+1 min=512; k1=0; l1=0; for k= -range:range for l = -range:range if ((i+k)<1||(j+l)<1||(i+k)+mb-1>m||(j+l)+mb-1>n) continue; end min_MAD=MAD(B_frame(i:i+mb-1,j:j+mb-1),I_frame((i+k):(i+k+mb-1),(j+l):(j+l+mb-1))); if min_MAD<min min=min_MAD; k1=k; l1=l; end end end %comparing with threshold value to check intra-MBs---% if min > threshold new_B_frame(i:i+mb-1,j:j+mb-1) = I_frame(i:i+mb-1,j:j+mb-1); motion_vector(1,count) = 0; %Horizontal motion vector motion_vector(2,count) = 0; %vertical motion vector motion_vector(3,count) = 1; else

Page 64: TMS320DM6437 Algoritmo de Com Pres Ion

51

new_B_frame(i:i+mb-1,j:j+mb-1)= I_frame((i+k1):(i+k1+mb-1),(j+l1):(j+l1+mb-1)); motion_vector(1,count) = k1; %Horizontal motion vector motion_vector(2,count) = l1; %vertical motion vector motion_vector(3,count) = 1; end count=count+1; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [motion_vector,prediction_error]= encode_B_frame(forward_motion_vector,backward_motion_vector,forward_prediction_error,backward_prediction_error) global mb cnt=1; mb=16; [m n]=size(forward_prediction_error); vector_size =(m*n)/(mb^2); motion_vector = zeros(3,vector_size); for i=1:mb:m-mb+1 for j=1:mb:n-mb+1 energy_fp=sum(sum(forward_prediction_error(i:i+mb-1,j:j+mb-1).^2)) energy_bp=sum(sum(backward_prediction_error(i:i+mb-1,j:j+mb-1).^2)) %energy defines that which block will provide more compressionto %ratio according to that particular macroblock is selected for %prediction error if energy_fp > energy_bp prediction_error(i:i+mb-1,j:j+mb-1) = backward_prediction_error(i:i+mb-1,j:j+mb-1); motion_vector(1,cnt) = backward_motion_vector(1,cnt); %Horizontal motion vector motion_vector(2,cnt) = backward_motion_vector(2,cnt); %vertical motion vector motion_vector(3,cnt) = backward_motion_vector(3,cnt); else prediction_error(i:i+mb-1,j:j+mb-1) = forward_prediction_error(i:i+mb-1,j:j+mb-1); motion_vector(1,cnt) = forward_motion_vector(1,cnt); %Horizontal motion vector motion_vector(2,cnt) = forward_motion_vector(2,cnt); %vertical motion vector motion_vector(3,cnt) = forward_motion_vector(3,cnt); end cnt=cnt+1;

Page 65: TMS320DM6437 Algoritmo de Com Pres Ion

52

end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function decoder_predicted_frame=deoderprediction(motion_vector,I_frame) global mb cnt=1; mb=16; [m n]=size(I_frame); vector_size=(m*n)/(mb^2); for i=1:mb:m-mb+1 for j=1:mb:n-mb+1 k1=motion_vector(1,cnt); %Horizontal motion vector l1=motion_vector(2,cnt); decoder_predicted_frame(i:i+mb-1,j:j+mb-1)= I_frame((i+k1):(i+k1+mb-1),(j+l1):(j+l1+mb-1)); cnt=cnt+1; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function decoder_predicted_B_frame=B_frame_decoder_prediction(motion_vector,I_frame,P_frame) global mb cnt=1; mb=16; [m n]=size(I_frame); vector_size=(m*n)/(mb^2); for i=1:mb:m-mb+1 for j=1:mb:n-mb+1 k1=motion_vector(1,cnt); %Horizontal motion vector l1=motion_vector(2,cnt); decide=motion_vector(3,cnt); if(decide==0) decoder_predicted_B_frame(i:i+mb-1,j:j+mb-1)= I_frame((i+k1):(i+k1+mb-1),(j+l1):(j+l1+mb-1)); else decoder_predicted_B_frame(i:i+mb-1,j:j+mb-1)= P_frame((i+k1):(i+k1+mb-1),(j+l1):(j+l1+mb-1)); end cnt=cnt+1; end end

Page 66: TMS320DM6437 Algoritmo de Com Pres Ion

53

APPENDIX B

C Code for MPEG Compression Implementation on the TMS320DM6437

/* * ======== video_preview.c ======== */ /* runtime include files */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <math.h> /* BIOS include files */ #include <std.h> #include <gio.h> #include <tsk.h> #include <trc.h> /* PSP include files */ #include <psp_i2c.h> #include <psp_vpfe.h> #include <psp_vpbe.h> #include <fvid.h> #include <psp_tvp5146_extVidDecoder.h> /* CSL include files */ #include <soc.h> #include <cslr_sysctl.h> /* BSL include files */ #include <evmdm6437.h> #include <evmdm6437_dip.h> /* Video Params Defaults */ #include <vid_params_default.h> /* This example supports either PAL or NTSC depending on position of JP1 */ #define STANDARD_PAL 0 #define STANDARD_NTSC 1 #define FRAME_BUFF_CNT 6 /* User defined constants Satpal*/ #define THRESHOLD 16 #define MB 16 #define RANGE 20 #define VECTOR_SIZE (720*480)/(MB*MB) /*User Defined Functions Satpal*/ void get_frame(void * frame);

Page 67: TMS320DM6437 Algoritmo de Com Pres Ion

54

void display_frame(void * frame); void MAD(int i,int j,int k,int l,int current[720][480],int reference[720][480]); void prediction_function(int current[][480], int reference[][480], int prediction_error[][480], short int motion_vector[][VECTOR_SIZE], short int type); void dct(int frame[][480],int frame_dct[][480]); void multiply1(); void multiply2(); void multiply3(); void multiply4(); void idct(int frame_dct[][480],int frame[][480]); void energy_function(int i,int j,int current[][480]); void copy(int i,int j,int temp[][480]); //*********************** /* User defined Variables Satpal*/ int read_frame[720][480]; int I_frame[720][480]; int P_frame[720][480]; int B_frame[720][480]; int I_frame_dct[720][480]; int I_frame_idct[720][480]; int prediction_error_P_dct[720][480]; int prediction_error_B_dct[720][480]; int prediction_error_P_idct[720][480]; int prediction_error_B_idct[720][480]; int write_frame[720][480]; int decoded_P_frame[720][480]; int decoded_B_frame[720][480]; long double energy,energy_fp,energy_bp; int prediction_error_P[720][480]; int forward_prediction_error_B[720][480]; int backward_prediction_error_B[720][480]; int prediction_error_B[720][480]; short int forward_motion_vector_B[3][VECTOR_SIZE]; short int backward_motion_vector_B[3][VECTOR_SIZE]; short int motion_vector_B[3][VECTOR_SIZE]; int flag; short int motion_vector_P[3][VECTOR_SIZE]; float min_MAD; FILE * fp1; //*********************** static int read_JP1(void);

Page 68: TMS320DM6437 Algoritmo de Com Pres Ion

55

static CSL_SysctlRegsOvly sysModuleRegs = (CSL_SysctlRegsOvly )CSL_SYS_0_REGS; /* * ======== main ======== */ void main() { printf("Video Preview Application\n"); fflush(stdout); /* Initialize BSL library to read jumper switches: */ EVMDM6437_DIP_init(); /* VPSS PinMuxing */ /* CI10SEL - No CI[1:0] */ /* CI32SEL - No CI[3:2] */ /* CI54SEL - No CI[5:4] */ /* CI76SEL - No CI[7:6] */ /* CFLDSEL - No C_FIELD */ /* CWENSEL - No C_WEN */ /* HDVSEL - CCDC HD and VD enabled */ /* CCDCSEL - CCDC PCLK, YI[7:0] enabled */ /* AEAW - EMIFA full address mode */ /* VPBECKEN - VPBECLK enabled */ /* RGBSEL - No digital outputs */ /* CS3SEL - LCD_OE/EM_CS3 disabled */ /* CS4SEL - CS4/VSYNC enabled */ /* CS5SEL - CS5/HSYNC enabled */ /* VENCSEL - VCLK,YOUT[7:0],COUT[7:0] enabled */ /* AEM - 8bEMIF + 8bCCDC + 8 to 16bVENC */ sysModuleRegs -> PINMUX0 &= (0x005482A3u); sysModuleRegs -> PINMUX0 |= (0x005482A3u); /* PCIEN = 0: PINMUX1 - Bit 0 */ sysModuleRegs -> PINMUX1 &= (0xFFFFFFFEu); sysModuleRegs -> VPSSCLKCTL = (0x18u); return; } /* * ======== video_preview ======== */ void video_preview(void) { FVID_Frame *frameBuffTable[FRAME_BUFF_CNT]; FVID_Frame *frameBuffPtr; GIO_Handle hGioVpfeCcdc; GIO_Handle hGioVpbeVid0; GIO_Handle hGioVpbeVenc;

Page 69: TMS320DM6437 Algoritmo de Com Pres Ion

56

int status = 0; int result; int i; int standard; int width; int height; /* Set video display/capture driver params to defaults */ PSP_VPFE_TVP5146_ConfigParams tvp5146Params = VID_PARAMS_TVP5146_DEFAULT; PSP_VPFECcdcConfigParams vpfeCcdcConfigParams = VID_PARAMS_CCDC_DEFAULT_D1; PSP_VPBEOsdConfigParams vpbeOsdConfigParams = VID_PARAMS_OSD_DEFAULT_D1; PSP_VPBEVencConfigParams vpbeVencConfigParams; standard = read_JP1(); /* Update display/capture params based on video standard (PAL/NTSC) */ if (standard == STANDARD_PAL) { width = 720; height = 576; vpbeVencConfigParams.displayStandard = PSP_VPBE_DISPLAY_PAL_INTERLACED_COMPOSITE; } else { width = 720; height = 480; vpbeVencConfigParams.displayStandard = PSP_VPBE_DISPLAY_NTSC_INTERLACED_COMPOSITE; } vpfeCcdcConfigParams.height = vpbeOsdConfigParams.height = height; vpfeCcdcConfigParams.width = vpbeOsdConfigParams.width = width; vpfeCcdcConfigParams.pitch = vpbeOsdConfigParams.pitch = width * 2; /* init the frame buffer table */ for (i=0; i<FRAME_BUFF_CNT; i++) { frameBuffTable[i] = NULL; } /* create video input channel */ if (status == 0) { PSP_VPFEChannelParams vpfeChannelParams; vpfeChannelParams.id = PSP_VPFE_CCDC; vpfeChannelParams.params = (PSP_VPFECcdcConfigParams*)&vpfeCcdcConfigParams;

Page 70: TMS320DM6437 Algoritmo de Com Pres Ion

57

hGioVpfeCcdc = FVID_create("/VPFE0",IOM_INOUT,NULL,&vpfeChannelParams,NULL); status = (hGioVpfeCcdc == NULL ? -1 : 0); } /* create video output channel, plane 0 */ if (status == 0) { PSP_VPBEChannelParams vpbeChannelParams; vpbeChannelParams.id = PSP_VPBE_VIDEO_0; vpbeChannelParams.params = (PSP_VPBEOsdConfigParams*)&vpbeOsdConfigParams; hGioVpbeVid0 = FVID_create("/VPBE0",IOM_INOUT,NULL,&vpbeChannelParams,NULL); status = (hGioVpbeVid0 == NULL ? -1 : 0); } /* create video output channel, venc */ if (status == 0) { PSP_VPBEChannelParams vpbeChannelParams; vpbeChannelParams.id = PSP_VPBE_VENC; vpbeChannelParams.params = (PSP_VPBEVencConfigParams *)&vpbeVencConfigParams; hGioVpbeVenc = FVID_create("/VPBE0",IOM_INOUT,NULL,&vpbeChannelParams,NULL); status = (hGioVpbeVenc == NULL ? -1 : 0); } /* configure the TVP5146 video decoder */ if (status == 0) { result = FVID_control(hGioVpfeCcdc, VPFE_ExtVD_BASE+PSP_VPSS_EXT_VIDEO_DECODER_CONFIG, &tvp5146Params); status = (result == IOM_COMPLETED ? 0 : -1); } /* allocate some frame buffers */ if (status == 0) { for (i=0; i<FRAME_BUFF_CNT && status == 0; i++) { result = FVID_allocBuffer(hGioVpfeCcdc, &frameBuffTable[i]); status = (result == IOM_COMPLETED && frameBuffTable[i] != NULL ? 0 : -1); } }

Page 71: TMS320DM6437 Algoritmo de Com Pres Ion

58

/* prime up the video capture channel */ if (status == 0) { FVID_queue(hGioVpfeCcdc, frameBuffTable[0]); FVID_queue(hGioVpfeCcdc, frameBuffTable[1]); FVID_queue(hGioVpfeCcdc, frameBuffTable[2]); } /* prime up the video display channel */ if (status == 0) { FVID_queue(hGioVpbeVid0, frameBuffTable[3]); FVID_queue(hGioVpbeVid0, frameBuffTable[4]); FVID_queue(hGioVpbeVid0, frameBuffTable[5]); } /* grab first buffer from input queue */ if (status == 0) { FVID_dequeue(hGioVpfeCcdc, &frameBuffPtr); } fp1 = fopen ("I_frame.txt","w"); for(flag=0;flag<3;flag++) { int i,j; for (i = 0;i <100000 ;i++) { for (j = 0;j < 3000;j++) { continue; } } BCACHE_wbInvAll(); FVID_exchange(hGioVpfeCcdc, &frameBuffPtr); BCACHE_wbInvAll(); get_frame((frameBuffPtr->frame.frameBufferPtr)); if(flag==0) { memcpy(I_frame,read_frame,sizeof(read_frame)); memcpy(write_frame,I_frame,sizeof(write_frame)); fprintf(fp1,"%d\n",flag); } else { if (flag==1) { memcpy(B_frame,read_frame,sizeof(read_frame)); memcpy(write_frame,B_frame,sizeof(write_frame));

Page 72: TMS320DM6437 Algoritmo de Com Pres Ion

59

fprintf(fp1,"%d\n",flag); } else { memcpy(P_frame,read_frame,sizeof(read_frame)); memcpy(write_frame,P_frame,sizeof(write_frame)); fprintf(fp1,"%d\n",flag); } } display_frame((frameBuffPtr->frame.frameBufferPtr)); BCACHE_wbInvAll(); FVID_exchange(hGioVpbeVid0, &frameBuffPtr); fprintf(fp1,"%d\n",(Int)TSK_time()); } flag=0; fprintf(fp1,"done"); fclose(fp1); while ( status == 0 && flag==0) { //Used defined variable Satpal int cnt=0; int i,j,m,n,k1,l1; /* grab a fresh video input frame */ //*********************************satpal //both frames are ready now prediction_function(P_frame,I_frame,prediction_error_P,motion_vector_P,0); prediction_function(B_frame,I_frame,forward_prediction_error_B,forward_motion_vector_B,0); prediction_function(B_frame,P_frame,backward_prediction_error_B,backward_motion_vector_B,1); //generating B Frame motion vector and prediction_error for (i=0;i<=(720-MB);i=i+MB) { for(j=0;j<=(480-MB);j=j+MB) { energy_function(i,j,forward_prediction_error_B); energy_fp=energy; energy_function(i,j,backward_prediction_error_B); energy_bp=energy; if(energy_fp>energy_bp) { copy(i,j,backward_prediction_error_B); motion_vector_B[0][cnt]=backward_motion_vector_B[0][cnt];

Page 73: TMS320DM6437 Algoritmo de Com Pres Ion

60

motion_vector_B[1][cnt]=backward_motion_vector_B[1][cnt]; motion_vector_B[2][cnt]=backward_motion_vector_B[2][cnt]; } else { copy(i,j,forward_prediction_error_B); motion_vector_B[0][cnt]=forward_motion_vector_B[0][cnt]; motion_vector_B[1][cnt]=forward_motion_vector_B[1][cnt]; motion_vector_B[2][cnt]=forward_motion_vector_B[2][cnt]; } cnt=cnt+1; } } ///////////////////////////////////////////////// //These only data will decoder have dct(I_frame,I_frame_dct); dct(prediction_error_P,prediction_error_P_dct); dct(prediction_error_B,prediction_error_B_dct); //Decoder Side idct(I_frame_dct,I_frame_idct); idct(prediction_error_P_dct,prediction_error_P_idct); idct(prediction_error_B_dct,prediction_error_B_idct); //decoder Satpal cnt=0; for (i=0;i<=(720-MB);i=i+MB) { for(j=0;j<=(480-MB);j=j+MB) { k1=motion_vector_P[0][cnt]; l1=motion_vector_P[1][cnt]; for (m=0;m<MB;m++) { for(n=0;n<MB;n++) { decoded_P_frame[i+m][n+j]=I_frame_idct[i+m+k1][j+n+l1]+prediction_error_P_idct[i+m][j+n]; } } cnt=cnt+1; } }

Page 74: TMS320DM6437 Algoritmo de Com Pres Ion

61

///Decoding B frame cnt=0; for (i=0;i<=(720-MB);i=i+MB) { for(j=0;j<=(480-MB);j=j+MB) { k1=motion_vector_B[0][cnt]; l1=motion_vector_B[1][cnt]; if(motion_vector_B[2][cnt]==0) { for (m=0;m<MB;m++) { for(n=0;n<MB;n++) { decoded_B_frame[i+m][n+j]=I_frame_idct[i+m+k1][j+n+l1]+prediction_error_B_idct[i+m][j+n]; } } } else { for (m=0;m<MB;m++) { for(n=0;n<MB;n++) { decoded_B_frame[i+m][n+j]=decoded_P_frame[i+m+k1][j+n+l1]+prediction_error_B_idct[i+m][j+n]; } } } cnt=cnt+1; } } memcpy(write_frame,decoded_B_frame,sizeof(write_frame)); display_frame((frameBuffPtr->frame.frameBufferPtr)); //*********************************satpal BCACHE_wbInv((void*)(frameBuffPtr->frame.frameBufferPtr), 480*720*2, 1); FVID_exchange(hGioVpbeVid0, &frameBuffPtr); } } void get_frame (void * frame)

Page 75: TMS320DM6437 Algoritmo de Com Pres Ion

62

{ int j,k, n; n = 1; for (j = 0;j < 720;j++) { for (k = 0;k < 480;k++) { read_frame[j][k]= * (((unsigned char * )frame)+n); n=n+2; } } } void display_frame (void * frame) { int j,k, n; n = 1; for (j = 0;j < 720;j++) { for (k = 0;k < 480;k++) { * (((unsigned char * )frame)+n)=write_frame[j][k]; * (((unsigned char * )frame)+n+1)= 128; n=n+2; } } } void MAD(int i,int j,int k,int l,int current[][480],int reference[][480]) { int m,n; for (m=0;m<MB;m++) { for(n=0;n<MB;n++) { min_MAD=min_MAD+abs(current[i+m][j+n]- reference[i+k+m][j+l+n]); } } void prediction_function(int current[][480],int reference[][480],int prediction_error [][480],short int motion_vector[][VECTOR_SIZE],short int type) { int i,j,k,l,k1,l1,count,min,x,y; float min_MAD; count =0;

Page 76: TMS320DM6437 Algoritmo de Com Pres Ion

63

k1=0; l1=0; for (i=0;i<=(720-MB);i=i+MB) { for(j=0;j<=(480-MB);j=j+MB) { min=512; k1=0; l1=0; for(k=-RANGE;k<=RANGE;k=k+1) { for(l=-RANGE;l<=RANGE;l=l+1) { if((i+k)<0||(j+l)<0||(i+k+MB)>720||(j+l+MB)>480) { continue; } min_MAD=0; MAD(i,j,k,l,current,reference); if(min_MAD < min) { min=min_MAD; k1=k; l1=l; } } } if(min > THRESHOLD) { for (x=0;x<MB;x++) { for(y=0;y<MB;y++) { prediction_error[i+x][j+y]=current[i+x][j+y]-reference[i+x][j+y]; } } motion_vector [0][count]=0; motion_vector [1][count]=0; motion_vector [2][count]=type; } else

Page 77: TMS320DM6437 Algoritmo de Com Pres Ion

64

{ for (x=0;x<MB;x++) { for(y=0;y<MB;y++) { prediction_error[i+x][j+y]= current[i+x][j+y]-reference[i+x+k1][j+y+l1]; } } motion_vector [0][count]=k1; motion_vector [1][count]=l1; motion_vector [2][count]=type; } count=count+1; } } } //DCT FUNCTIONS Satpal float a[8][8]; float ct[8][8]; float c[8][8]; // CO-EFF Matrix float b[8][8] = { {0.353553, 0.353553, 0.353553, 0.353553, 0.353553, 0.353553, 0.353553, 0.353553}, {0.490393, 0.415818, 0.277992, 0.097887, -0.097106, -0.277329, -0.415375, -0.490246}, {0.461978, 0.191618, -0.190882, -0.461673, -0.462282, -0.192353, 0.190145, 0.461366}, {0.414818, -0.097106, -0.490246, -0.278653, 0.276667, 0.490710, 0.099448, -0.414486}, {0.353694, -0.353131, -0.354256, 0.352567, 0.354819, -0.352001, -0.355378, 0.351435}, {0.277992, -0.490246, 0.096324, 0.4167, -0.414486, -0.100228, 0.491013, -0.274673}, {0.191618, -0.462282, 0.461366, -0.189409, -0.193822, 0.463187, -0.460440, 0.187195}, {0.097887, -0.278653, 0.4167, -0.490862, 0.489771, -0.413593, 0.274008, -0.092414} }; float bt[8][8] = { {0.353553, 0.490393, 0.461978, 0.414818, 0.353694, 0.277992, 0.191618, 0.097887},

Page 78: TMS320DM6437 Algoritmo de Com Pres Ion

65

{0.353553, 0.415818, 0.191618, -0.097106, -0.353131, -0.490246, -0.462282, -0.278653}, {0.353553, 0.277992, -0.190882, -0.490296, -0.354256, 0.096324, 0.461366, 0.4167 }, {0.353553, 0.097887, -0.461673, -0.278653, 0.352567, 0.4167, -0.189409, -0.490862}, {0.353553, -0.097106, -0.462282, 0.276667, 0.354819, -0.414486, -0.193822, 0.489771}, {0.353553, -0.277329, -0.192353, 0.490710, -0.352001, -0.100228, 0.463187, -0.413593}, {0.353553, -0.415375, 0.190145, 0.099448, -0.355378, 0.491013, -0.460440, 0.274008}, {0.353553, -0.490246, 0.461366, -0.414486, 0.351435, -0.274673, 0.187195, -0.092414} }; //********************************************************************** //DCT ///********************************************************************** // Details: 2D DCT transform //********************************************************************** void dct(int frame[][480],int frame_dct[][480]) { int i, j; int m, n; int k, l; for (i=0; i<720; i = i+8) { for(j=0; j<480; j = j+8) { k = 0; l = 0; for(m = i; m<(i+8); m++) { for(n = j; n<(j+8); n++) { a[k][l++] = frame[m][n]; } l = 0; k++; } multiply1(); multiply2(); k = 0;

Page 79: TMS320DM6437 Algoritmo de Com Pres Ion

66

l = 0; for (m = i; m < (i+8); m++) { for(n = j; n < (j+8); n++) { frame_dct[m][n] = c[k][l++]; if(l == 8) { l = 0; k++; } } } } } } void multiply1() { int i, j, k; float sum; for ( i = 0; i < 8; i++) { for ( j = 0; j < 8; j++) { sum = 0; for (k = 0; k < 8; k++) { sum = sum + a[i][k] * bt[k][j]; } ct[i][j] = sum; } } } void multiply2() { int i, j, k; int sum; for ( i = 0; i < 8; i++) { for ( j = 0; j < 8; j++) { sum = 0; for (k = 0; k < 8; k++)

Page 80: TMS320DM6437 Algoritmo de Com Pres Ion

67

{ sum = sum + b[i][k] * ct[k][j]; } c[i][j] = sum; } } } ///IDCT void idct(int frame_dct[][480],int frame[][480]) { int i, j; int m, n; int k, l; for (i=0; i<720; i = i+8) { for(j=0; j<480; j = j+8) { k = 0; l = 0; for(m = i; m<(i+8); m++) { for(n = j; n<(j+8); n++) { a[k][l++] = frame_dct[m][n]; } l = 0; k++; } multiply3(); multiply4(); k = 0; l = 0; for (m = i; m < (i+8); m++) { for(n = j; n < (j+8); n++) { frame[m][n] = c[k][l++]; if(l == 8) { l = 0; k++; }

Page 81: TMS320DM6437 Algoritmo de Com Pres Ion

68

} } } } } void multiply3() { int i, j, k; float sum; for ( i = 0; i < 8; i++) { for ( j = 0; j < 8; j++) { sum = 0; for (k = 0; k < 8; k++) { sum = sum + a[i][k] * b[k][j]; } ct[i][j] = sum; } } } void multiply4() { int i, j, k; int sum; for ( i = 0; i < 8; i++) { for ( j = 0; j < 8; j++) { sum = 0; for (k = 0; k < 8; k++) { sum = sum + bt[i][k] * ct[k][j]; } c[i][j] = sum; } } } void energy_function(int i,int j,int current[][480]) { int m,n; for (m=0;m<MB;m++)

Page 82: TMS320DM6437 Algoritmo de Com Pres Ion

69

{ for(n=0;n<MB;n++) { energy=energy+current[i+m][j+n]*current[i+m][j+n]); } } } void copy(int i,int j,int temp[][480]) { int m,n; for (m=0;m<MB;m++) { for(n=0;n<MB;n++) { prediction_error[i+m][j+n]=temp[i+m][j+n]; } } } /* * ======== read_JP1 ======== * Read the PAL/NTSC jumper. * Retry, as I2C sometimes fails: */ static int read_JP1(void) { int jp1 = -1; while (jp1 == -1) { jp1 = EVMDM6437_DIP_get(JP1_JUMPER); TSK_sleep(1); } return(jp1); }

Page 83: TMS320DM6437 Algoritmo de Com Pres Ion

70

BIBLIOGRAPHY

1. D. Brown, H. Ballard and Christopher M., Computer Vision, New Jersey: Prentice Hall, Inc., 1982

2. Texas Instruments, “DaVinci Digital Media Processor”, July 27, 2009

3. Texas Instruments Inc. “How to Use the VPBE and VPFE Driver on TMS320DM643x” Dallas, Texas, November 2007.

4. Digital Compression and Coding of Continuous-tone Still Images, Part 1, Requirements and Guidelines. ISO/IEC JTC1 Draft International Standard 10918-1, Nov. 1991 5. Keith Jack, “YCbCr to RGB Consideration”, Intersil, March 1997

6. Joan L Mitchell, William B. Pennebaker, Chad E. Fogg, and Didier J. Legall, MPEG VIDEO COMPRESSION STANDARD, New-York: Chapman & Hall,1997.