Vous êtes sur la page 1sur 7

A Proposed Method for Digital Video Clip Compression using EZT and RLE

Samaher Hussein Ali


Department of Computer Science, University of Babylon, Iraq
Samaher_hussein@yahoo.com

Abstract: A video Compression technique plays a vital role in storage & transmission through limited bandwidth. Because of video files contain repeated sequence of still image as a result each second represented by 24 image or more which is represent the motion in video file therefore that repeated sequence provide us large amount from temporal redundancy through similarities of sequence image with few difference between them. In addition to spatial redundancy contained in image data itself. The goal of compression algorithms is to gain best compression ratio with acceptable visual quality, the proposed compression method presented a new approach to satisfy this goal. Our proposed system achieves compression ratio close to the best known video compression techniques MPEG between (1:20- 1:40). This paper presents a method which can be summarized into five stages; the first stage is opening Audio/ Video Interleaved file (AVI) Video file which is called RIFF. AVI. Second stage, is transform color from color space called RGB to YUV which consist of two basis components Y represents the luminance and UV represent the chrominance. the third stage compress sequence of video by using hybrid techniques presented in lossy compression in video code through used of transform technique which is presented by discrete cosine transform to reduce spatial redundancy in image data itself and to reduce temporal redundancy by using motion compensation technique which is employed associated with discrete cosine transform to error image produced. The coefficients of DCT are coded using embedded Zerotree(EZT) algorithm in the fourth stage. Finally the sequence of symbols will be encoded by Run Length Encoding (RLE).
Key words: Video Compression, Discrete Cosine Transform, Embedded Zerotree, Run Length Encoding algorithm

Introduction
Image compression is very important in many applications, especially for progressive transmission, image browsing, and Internet and multimedia applications. The goal of compression is to obtain an image representation while reducing as much as possible the amount of memory needed to encode the image [1]. The task of compression consists of two components, an encoding algorithm that takes a file and generates a compressed representation (hopefully with fewer bits), and a decoding algorithm that reconstructs the original file or some approximation of it from the compressed representation. These two components are typically intricately tied together since they both have to understand the shared compressed representation. Compression of video imagery has become a necessity and very important because of transmission and storage of uncompressed video would be extremely costly and impractical. In the first we have to know again the digital video compression performance based on two important points, the first point use transform coding such as discrete cosine transform (DCT) or discrete wavelet transform (DWT) and second point is motion compensation or motion estimation[2].

Many research worked with video and image compression area using DCT, motion estimation, and embedded coding as a method for quantization or encoding coefficients results from one or many transform techniques, but we point to the ones closes to our search. Jermo M Shapiro (1993)[3], introduce effective and computationally simple technique for image compression called (EZW), The embedded wavelet algorithm(EZW) is a simple, yet remarkably effective, image compression algorithm, having the property that the bits in the bit stream are generated in order of importance, yielding a fully embedded code. The EZW algorithm is based on four key concepts: A discrete wavelet transform, Prediction of absence significant information, Entropy-coded successiveapproximation quantization, and Universal lossless data compression. Olivier Egger and others (1995)[4], proposed a new approach can be seen as a generalization of the embedded zerotree wavelet (EZW) algorithm from rectangular images to arbitrarily shaped regions. In the case of compressing rectangular pictures this operation is performed using appropriate block transforms such as DCT or subband/wavelet transforms. Various approaches have been proposed to generalize the block-based techniques to arbitrary shaped regions. These techniques are either

-1-

computationally very expensive and/or do not perform a full decorrelation of neighboring pixels in a given region . Special care has been dedicated to retain all the advantages of the EZW algorithm for arbitrarily shaped regions without any compromise. As for the original EZW algorithm the proposed technique is based on three basic blocks, namely the transformation, the zerotree prediction and the Successive Approximation Quantization (SAQ). Amir Said and others (1996)[5], offered an alternative explanation of the principles of J.M. Shapiro, so that the reasons for its excellent performance can be better understood. These principles are partial ordering by magnitude with a set partitioning sorting algorithm, ordered bit plane transmission, and exploitation of self-similarity across different scales of an image wavelet transform. Moreover, search presented a new and different implementation, based on set partitioning in hierarchical trees (SPIHT). In this paper, Amir Said again explain that the EZW technique is based on three concepts: Partial ordering of the transformed image elements by magnitude, with transmission of order by a subset partitioning algorithm that is duplicated at the decoder. Ordered bit plane transmission of refinement bits. Exploitation of the self-similarity of the image wavelet transform across different scales. As to be explained, the partial ordering is a result of comparison of transform element (coefficient) magnitudes to a set of octavely decreasing thresholds. He explains that an element is significant or insignificant with respect to a given threshold, depending on whether or not it exceeds that threshold. Amir Averbuch and others(1998)[6], presented a fast and modified version of the embedded zero-tree wavelet (EZW) coding algorithm that is based on for low bit-rate still image compression applications. This method presented the trade-off between the image compression algorithm speed and the reconstructed image quality measured in terms of PSNR. The fast algorithm based on three different techniques: Geometric wavelet decomposition. This technique speeds-up the multi-resolution wavelet decomposition significantly without any effect on the reconstructed image quality. Modified and reduced version of the EZW algorithm for zero-tree coefficient classification. Paper describe a very efficient data structure in which the zero-tree is scanned. In addition, a shorter scan in each quantization iteration is performed. And a combination of exact model arithmetic coding and binary coding. This technique affects the obtained image quality because it is sub-optimal in comparison to the adaptive model arithmetic coding. Each component of the algorithm contributes to the overall speedup. Neff and Zakhor (February-1999)[7] have applied the Matching Pursuits MP technique to code the motion prediction error signal. Neri Merhav & Vasudev Bhaskaran (2000) [8], proposed new algorithm converts motion

compensated compressed video into sequence of DCT- domain blocks corresponding to the spatial domain blocks of the current frame alone, without prediction based on other frame, i.e. removing the inter frame element of compression /decompression. Stefan Einerman (December -2001)[9], submit thesis in residual coding which is lossless video compression. He proposed method of residual video coding such that the residual sequence is obtain by differencing between original video and its MPEG-2 coded version: Residual Sequenc = Original MPEG-2 The resulting residual sequence will contain what can be called error frames, the resulting histogram of the residual or error frame will be highly peaked around zero, so that a distribution can easily be further compressed by an entropy coder such as Huffman. Amir Said (may-2004)[10], proposed new coding system, in this system the encoder perform coding depend on coding image block classification method that is very simple and low computational complexity. Ayman Darwish (November-2005)[11], submitted thesis in scalable video coding, she used DWT to reduce Spatial Redundancy at 1, 2, 3, 4-level and use quantization factor at 8, 16, 32, when increasing result in more quantization & worse quality reconstructed image. Wafaa Hussan (May 2006)[12], submitted thesis in video clip compression using DCT technique, aims to design and implementation a coder and decoder software for video clip file using lossy digital video compression and AVI movie file as a type of file under which windows was treated with to reduce the size of AVI video file for storage and transmission. The performance of the video compression techniques depends on the amount of spatial and temporal redundancy contained in video data as well as on actual compression techniques used for encoding with practical code schemes a trade off between coding performance (high compression with sufficient quality ) and implementation complexity is targeted thus one of the most method which is used for exploiting spatial redundancy is the transform coding and for exploiting temporal redundancy used motion estimation methods[12], all of these method used in video codec which explain in Figure (1)[2]. Video codec

hardware

Software

Lossy

Lossless

Transform coding for spatial

Motion compensation for temporal

Figure (1): Types of video codec

-2-

1. Discrete Cosine Transform (DCT)


The DCT is a widely used frequency analysis method in image processing. It has many advantages over other transform techniques. For example, no complex computation is involved in the DCT; fast DCT implementations are available; and most importantly, energy is packed efficiently into a small number of DCT coefficients. For the DCT, we convert an RGB image in to gray level image by using YUV model then work on this image. For each nn data block a two-dimensional DCT can be written in terms of pixel values f(i,j) for i,j =0,1,,N-1 and the frequency domain transform coefficients F(u,v)[13]:
F (u , v ) = 1 2n C (u )C ( v )
N 1 N 1 i=0 j=0

V = 0.877 (R - Y)

(5)

Any errors in the resolution of the luminance (Y) are more important than the errors in the chrominance (U,V) values. The luminance information can be coded using higher bandwidth than the chrominance information [15].

3. Run Length Encoding (RLE)


Probably the simplest coding scheme that takes advantage of the context is run-length coding. Although there are many variants, the basic idea is to identify strings of adjacent messages of equal value and replace them by a single occurrence along with a count [16]. For example, the message sequence acccbbaaabb could be transformed to (a,1), (c,3), (b,2), (a,3), (b,2). Once transformed, a probability coder (e.g., Huffman coder) can be used to code both the message values and the counts. An example of a real-world use of run-length coding is for Facsimile (fax) machines [16]. At the time of writing (1999), this was the standard for all home and business fax machines used over regular phone lines.

f (i, j )

(1)

( 2 i + 1) u . cos 2N
for 2 c(x) = 1 otherwise 1

( 2 j + 1) v . cos 2N
x = 0

For u,v=0,1,N-1, Where

The inverse DCT transform is given by


N 1N 1 (2 j +1)v (2i +1)u f (i, j) = c(u).v(v).F (u,v). cos . cos 2N 2N u =0 v =0

4. Embedded Zerotree Wavelet Algorithm


(2) The EZW coding algorithm can be summarized as follows. 4.1. Initialization: Place all wavelet coefficients on the dominant list. Set the initial threshold to

For i,j=0,1,N-1

2. Color Spaces
A color space is a mathematical representation of a set of colors. The three most popular color models are RGB (used in computer graphics); YIQ, YUV, or YCbCr (used in video systems); and CMYK (used in color printing). All of the color spaces can be derived from the RGB information supplied by devices such as cameras and scanners. The red, green, and blue (RGB) color space is widely used throughout computer graphics. Red, green, and blue are three primary additive colors (individual components are added together to form a desired color) and represented by a three-dimensional Cartesian coordinate system. The RGB color space is the most prevalent choice for computer graphics because color displays use red, green, and blue to create the desired color. Therefore, the choice of the RGB color space simplifies the architecture and design of the system [14]. 2.1. YUV Space YUV was originally used for PAL (European standard) analog video. To convert from RGB to YUV spaces, the following equations can be used:

| log 2 (max_ coeff) | T0 = 2

(6)

4.2. Dominant Pass: Scan the coefficients on the dominant list using the current threshold Ti and subband ordering. Assign each coefficient one of four symbols: Positive significant (ps): Meaning that the coefficient is significant relative to the current threshold Ti and positive. Negative significant (ns): Meaning that the coefficient is significant relative to the current threshold Ti and negative. Isolated Zero (iz): Meaning the coefficient is insignificant relative to the threshold Ti and one or more of its descendants are significant. Zero-Tree Root (ztr): Meaning the current coefficient and all of its descendants are insignificant relative to the current threshold Ti.

Y = 0.299 R + 0.587 G + 0.114 B U = 0.492 (B - Y)

(3) (4)

Any coefficient that is the descendant of a coefficient that has already been coded as a zero-tree root is not coded, since the decoder can deduce that it has a zero value. Coefficients found to be significant are moved to the subordinate list and their values in the original wavelet map are set to zero. The resulting symbol sequence is entropy coded.

-3-

4.3. Subordinate Pass: Output a 1 or a 0 for all coefficients on the subordinate list depending on whether the coefficient is in the upper or lower half of the quantization interval. 4.4. Loop: Reduce the current threshold by two, Ti = Ti / 2. Repeat the Steps (4.2.) through (4.4.) until the target fidelity or bit rate is achieved [17].

Step2: Transform Color RGB to YUV Transform color image into a suitable color space, generally RGB transform into luminance/chrominance color space (YUV), while the luminance component is grayscale and the other two axes are color information. The reason for this stage is that minimize the information in the luminance component, the human eye is not as sensitive to high-frequency chrominance information as it is to high frequency luminance as explained in paragraph(2.1). Step 3: Sub-Sampling 4:2:0 The sub sampling take only U and V components which carries color information and apply the algorithm which reduce each color component to half by dividing two in both direction height and width to reduce the size that take in compressed file. Step 4: DCT & Quantization The transform DCT apply algorithm to the three Y,U and V image matrix to transform image data from the spatial domain to frequency domain by dividing each frame block of 8*8 pixel and apply DCT transform to each block 8*8 pixel value to produce 64 coefficient. The quantization is the process of reducing the number of possible values of block, in other hand reduces the data required to represent the image. Simple example of quantization is the rounding of real values into integers, other scheme for quantization using table construct depend on one parameter R supplied by user, a simple expression such as Qij =1+(i+j)*R satisfy required table. In the proposed method the quantization accomplished by using Default tables were the elements in the table generally grow as we move from the upper left corner to the bottom right one.

5. The Proposed Method


The proposed method consist of two parts: the first part is the coder which contain several stage as shown in Figure (2) which represent the compression of movie file and the second part is decoder which contain several stages as shown in Figure(3), in the next sections we explain each part in details.

5.2. The Proposed Coder Algorithm Steps

Figure (2): Block Diagram of coder in the Proposed Method Step1:- open AVI File and Convert to Image In this stage we used algorithm to open AVI structure and reach to list movie (i.e. sequence frames/images) which are needed in the next stages to compression it. In this algorithm the function (ASCII to long)was used to convert FCC ASCCII character to long for example convert FCC RIFF to long by calling ASCII to long (R,I,F,F) to open AVI file, then after that take information from AVI header such as total frame, height, and width of the image and then search for list movie using search function about key word MOVI, when we search make a loop from one to sequence of image(frames) then search about keyword 00db which is the initial of each frame, then make two loops from height and from width respectively to read RGB pixel image, and split it into three bands that save it into three individual matrices called (red, green, blue) which are used in the next stage[12].

Step 5: Motion Based on Skew The motion on skew takes only Y luminance component of sequence frame and calculates the skew for each frame, then make absolute difference for successive frames and compare the result with some threshold. The threshold value will be indicated by the Embedded Zerotree Algorithm as explaining below. Step 6: Embedded Zerotree Algorithm Embedded Zerotree Algorithm consists of four main steps which are: threshold, dominant, subordinate, and loop. To make this algorithm appropriate to work with DCT coefficients which completely defers from Wavelet coefficients, the proposed method includes another steps to satisfy this goal. The used alphabetic contain eight symbols "p, n, z, t, #, @, -, y ", while first four symbols represent the original alphabetic used by Shapiro, other symbols added by proposed algorithm. Where: '#' represents a new block of coefficients,

-4-

'@' refers to similar block (all coefficients have same value), '-' refers to a new row (in another word new cycle), 'y' refers to special case appear when the returned value(sign) from Test function equaled to zero. Step 6.1: Initialize For each block a new threshold is specified, the threshold determines which of Coefficients should be classified as significant and which of coefficients should be classified as insignificant, significance concept means that the coefficient greater than the current threshold while insignificance concept refers to the coefficient less than the current threshold. There are many methods for finding the threshold for each block, most of these methods based on the maximum values of block, some of implementation, the initial threshold is set to be half of the maximum absolute value, in the suggested system, threshold obtained by apply equation (6). Step 6.2: Test Function This function tests all coefficients if there are at least one absolute value greater than Mini (Mini absolute smallest number of block), in the same time this coefficient is smaller than current threshold. Step 6.3: Dominant Pass Dominant pass checks all trees for significant values with respect to a certain threshold. If the coefficient is larger than the threshold, appositive (p) is coded. If the coefficient is larger than threshold, but it is minus, a negative (n) is coded. If the coefficient and his children smaller than current threshold, a zerotree (t) is coded. If coefficient smaller than threshold, but has children (at least one) greater than current threshold, an isolated (z) is coded. The coefficients coded as positive (p) or negative (n) consider significant. Finally, all the coefficients that are in absolute value larger than the current threshold are extracted and placed on the subordinate list. Step 6.4: Subordinate Pass The subordinate Pass (sometimes called the refinement 'refines' the value of each significant). For each coefficient in the subordinate list, the subordinate pass checks if there is value larger or smaller than the current threshold. Current threshold compute by Tc=3/2 *Ti (7)

Step 6.5: Filter This procedure search for the values to be coded as significant to extract it and replaced their positions with zeros (some literatures replaced this positions with stars). This will prevent them from being coded a gain. Step 7:- Run length Encoding (RLE) It's varying known algorithm. The reason for using this algorithm is to small alphabet of the proposed method with high frequency for specific symbol.

5.2. The Proposed Decoder Algorithm Steps

Compressed File

Inverse RLU

Inverse Embedded Encoding Y

Inverse Motion

Inverse DCT & De-Quant U&V

Sequence Reconstruct AVI File Image Transform color YUV to RGB

Sampling 4:2:0

Figure (3): Block Diagram of Decoder in the Proposed Method Step 1: Inverse RLU The inverse run length coding algorithm read from the compressed file, byte after byte, the first bytes assigned to the counters (high frequency for specific symbol), while counter less than 64, loop continued then read data. Step1.1: If the next character is '#' (which refers to new block), go to the following steps: assign current threshold to the T variable, assign current DC to the F variable, also assign initial value to Flag1, Flag2. Else go to Step1. Step1.2: If Cod (I+1) character is '@' (Which refers to similarity case), go to the following steps: Go to function that make a new block by using DC for first element at position (0,0), while all other position filled with the same value which are threshold.

Where Tc refers to current threshold which compute to assign zero or one to the coefficient, Ti represents the threshold comes from dominant pass for current phase. If the coefficient is larger than the threshold a '1' is assign to the coefficient and if the coefficient is smaller than the threshold a '0' assign to the coefficient.

Increment counter with 2 to reach the next '#'character. Change value of Flag1 to 1.

-5-

Step1.3: Else increment counters I, K Especially for I counter to reach the character this followed '#' character. Step1.4: If Flag1 equaled to 1, in this case Go to the Inverse Embedded Zerotree Algorithm. Sent the result block to the final array. Step1.5: Else Read the character Step1.6: Increment counter of character Step1.7: if the coming character is '# in this case, change the value of Flag1 to 1 . Else go to step 1.6. Step 2: Inverse Embedded Zerotree Algorithm We can summarize the Inverse Embedded Zerotree Algorithm by the following steps: Step2.1: Initial value to CKL variable, usually zero. Step2.2: Read the string array which contain p, n, a, t; also read another array which contain element and your counts. Step2.3: While the number of cycle still less than the final cycle (number of cycle taking from number of rows of coming array). Else the algorithm reach to final values of block and the reconstruction block is getting, then STOP. Step2.4: If coming row contain just one character which are 'y', this refers to special case when there are at least one absolute value greater than zero, but in the same time this value is smaller than threshold. Only In this case increment CKL counter and halving threshold. Step2.5: Dominant Pass, procedure for assign one of four symbols (p, n, z, t) to each position of default block. Step2.6: Subordinate Pass, by using default array coming from Dominant Pass procedure, and array of pair (counts, elements) and threshold coming from Step2.2 this procedure reconstructed the nearly original block following the same steps in the Subordinate Pass of compression algorithm. Step3: De-Quant and Inverse of DCT In this process which is the inverse of quantization take the 2D coefficients of block 8*8 and multiply by factor R to increase the value of coefficients to reach nearly from the source value coefficient then apply inverse DCT to produce red, green, blue image matrices which are used in the next steps. Step 4: Inverse of Sub-Sampling 4:2:0 This step takes U and V only color component (i.e., red and blue matrices) to make inverse of sub-sample by increasing U & V by multiplying two in both direction horizontal and vertical.
1

Step 5: Inverse Motion This process only read the key fram number from the compressed file and compares it with frame number output from 1-DCT process. If it is equal copy, the frame is as key frame this process applies only on Y luminance components. Step6: Transform Color YUV to RGB In this step take Y, U and V three image matrices and apply equation that transform them from YUV to RGB pixel channel which merge together to produce sequence of images Step 7: Reconstruct AVI File Write AVI block is the last step of the Decoder, in this step we form the structure of AVI movie file to play back again by using sequence images that obtained from previous steps of the Decoder which extract them from compressed file by using two process load AVI header which are used to store the all information needed to write AVI file.

6. The Experimental Result


A wide variety of techniques were used for video compression, they include lossy and lossless as explained in detail in preview the previous works. In this section we test the proposed compression method on video clip files in Table (1). The results of test were summarized below. Table (1): Rustle of the Proposed Method of Whole Video Clip

No.

Movie sample

Source file 6243256

Compress file 201506

Compression ratio 30.59:1

PSNR

37.30

19188296 2

621617

29.60:1

38.87

7895304 3

240832

34.68:1

3121

10794856 4

221314

35.51:1

32.55

-6-

In the proposed method numbers of video file movies was taken which are difference in natural complexity, scenes quality, and size. These movie implemented with proposed method give the results which explain in table (1), and we noticed the compression ratio increased if the files have few complexity with stable scene (i.e. the file contain one scene). In addition the PSNR is in negative with compression ratio for the same movie file; also depend on the complexity of the movie.

[3] Shapiro J., Embedded image using zerotrees of wavelet coefficient, IEEE Trans. Signal Processing, vol. 41, pp3445-3462, Dec. 1993. [4] Oliver E., Pascal F and Touradj E., Shape-Adaptive Wavelet Transform for Zerotree Coding, In Proceedings of the Inter-national Conference on Acoustics, Speech, and Signal Processing ICASSP, Detroit, USA, May 1995. [5] Said A. and Pearlman W., A new Fast and Efficient Image Codec Based on Set Partitioning in Hierarchical Trees, IEEE Transactions on Circuits and Systems for Video Technology ,Vol. 6, June 1996. [6] Amir A., Moshe I. and Francois M., Speed Versus Quality in Low Bit-Rate Still Image Compression, Signal Processing, 1998. [7] R.Neff and A.Zakhor, " Video Compression using Matching Pursuits", Department of Electronical Engineering and computer science, California University, IEEE Transaction on circuits and system for video technology, February 1999. [8] Neri Merhav & Vasudev Bhaskaran," A Fast Algorithm for DCT-domain inverse motion compensation", Computer system laboratory and Hewlett-PL in Isreal Science Center, Technion city, Haifa-3- 2000. [9] S. Einerman, " Residual Coding", department of signal, Sensors and systems, Royal Institute of Technology(KTH), December 2001. [10] Amir Said, "Compression of Compound Images and Video for Enabling Rich Media in Embedded Systems", imaging system laboratories HP laboratories Palo Alto, May 2004. [11] A. Darwish, "Scalable Video Coding", Clyton School of Information Technology, Monash University, November 2005. [12] Wafaa. Hassan.A. "Video clip compression using DCT Technique" M.Sc. Thesis, Dep. Of computer science, University of Babylon, May 2006. [13] Zhiling .L,The Design and Implementation of an Image Segmentation System for Forest Image Analysis. M.Sc.Thesis, Mississippi State University, 2001.

7. Conclusions
The suggested method highlights the coding gained by DCT and embedded zerotree algorithm, this allows to address the real issues involved in frame coding, which are quantization and Entropy Coding. The proposed method can split movie file in the scene depending on the skew measurement with a specific threshold determined by embedded zerotree algorithm for that purpose. Natural of the motion make the sequence frames similar with some differences in some regions, thus the differences between frames due to smaller pixel value. Therefore the coefficients produced through DCT tend to zero which make the compression operation by using Run Length Coding very high. Many researches considered EZW algorithm "does not really compression thing, it only reorder coefficients in such a way that can be compressed very efficiently"[18], while others showed "EZW algorithm which is considerably effective and important compression algorithm"[1]. The proposed method proved that Embedded Zerotree algorithm is effective compression algorithm. The transform of color from RGB to YCC luminance /chrominance components reduced the inter pixels redundancy (i.e. reduce pixel value), subsequently increased similarities between them. The compression ratio based on the number of frames in each scene because of the relation between them is positive while the relation is in negative between the compression ratio and number of scene (i.e. when increase number of frame, increased compression Ratio, but when increase the number of scene the compression ratio is decreased). Future work used this method to compress other type of files such as sound files or a coasted Radar files.

[14] Plataniotis K. and Venetsanopoulos, Color Image Processing and Application, Springer, 2000. [15] Panrony X., Image Compression by Wavelet
Transform, East Tennessee State University, Master Thesis, 2001. [16] Guy E. Blelloch, "Introduction to Data Compression", Computer Science Department, Carnegie Mellon University, 2001. [17] Bryan E., A Tutorial on Modern Lossy Wavelet Image Compression: Foundations of LPEG 2000, IEE, 2001. [18] Suresh S., Hardware Acceleration of the Embedded Zerotree Wavelet Algorithm, East Tennessee State University, Master Thesis, 2004.

REFERENCES
[1] Neyre T. and Hakan S., Embedded Zerotree Wavelet Compression, Eastern Mediterranean University , 2005. [2] P. Lindmark, Optimizing Video Compression and Streaming Media for E-Learning, M.Sc thesis IT university of Goteborg, Sweden 2005.

-7-

Vous aimerez peut-être aussi