This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM365 vertical stripes composite video output issue

Other Parts Discussed in Thread: THS8200

Problem statement: simple 2 colors vertical stripes pattern is not displayed properly when rendered via NTSC composite output. Colors are not correctly reproduced, output is polluted by different shades of initial colors and video flickers in some cases.

Conditions: video0 is activated, video1, osd and attribute window are disabled; color space is ColorSpace_UYVY; video standard is D1 NTSC; video output is composite.

Background: I have tried to output a simple image contained green and white vertical stripes via NTSC to both my TV and capture card. Neither of them rendered image properly. Instead of clear white and green lines I was able to see all shades of green and even yellow and cyan. The pattern was fairly simple: 2 white pixels and 2 green pixels. You can see a cropped fragment(512x64) of one resulted frame, captured by capture card below.

White and black pattern after being output over NTSC contains shades of grey and lines are somehow smeared. Moreover, some color combinations(striking pink and white for instance) and/or 4 pixel wide stripes produce a visible and annoying flickering noise on the line edge.

As opposed to vertical stripes, horizontal stripes can be seen without any distortion. 

I have also tested this issue via component 480p output. Image can also be seen clearly without any artifacts.

Questions: could you please provide some solution or explanation to this problem ? Is it common for all NTSC encoders ? Are there any hardware horizontal filters which can produce such artifacts?

Function for pattern generation is provided below:

Int SetStripePatternUYVY(Buffer_Handle hBuf)

{

    Int8 *ptr, *ptr1, *ptr2;

    Int32 *ptr4;

    UInt32 offset;

    Int y, x;

 

    BufferGfx_Dimensions dim;

    BufferGfx_getDimensions(hBuf, &dim);

 

    offset = dim.y * dim.lineLength + dim.x * 2;

    ptr = Buffer_getUserPtr(hBuf) + offset;

 

    // vertical stripes pattern

    for (y = 0; y < dim.height; y++) {

        for (x = 0; x < dim.width*2; x+=8) {

            // white

            ptr[x+ 0] = 128;

            ptr[x+ 1] = 255;

            ptr[x+ 2] = 128;

            ptr[x+ 3] = 255;

            // green

            ptr[x+ 4] = 0;

            ptr[x+ 5] = 20;

            ptr[x+ 6] = 0;

            ptr[x+ 7] = 20;

        }

        ptr += dim.lineLength;

    }

 

    // horizontal stripes pattern

    /*

    ptr1 = Buffer_getUserPtr(hBuf) + offset + 0*dim.lineLength;

    ptr2 = Buffer_getUserPtr(hBuf) + offset + 1*dim.lineLength;

    for (y = 0; y < dim.height; y++) {

        for (x = 0; x < dim.width*2; x+=4) {

            // white

            ptr1[x+ 0] = 128; ptr1[x+ 1] = 255; ptr1[x+ 2] = 128; ptr1[x+ 3] = 255;

            // green

            ptr2[x+ 0] =   0; ptr2[x+ 1] =  20; ptr2[x+ 2] =   0; ptr2[x+ 3] =  20;

        }

        ptr1 += 2*dim.lineLength;

        ptr2 += 2*dim.lineLength;

    }*/

    return 0;

  • The fact that you are getting horizonal stripe displayed perfectly tells me that you've got VPBE init done correctly (or least almost all of register settings).

    What you've seen might be due to either chroma subsampling or luma/chroma cross interference.

    Please increase the width of the stripes to 16 or 32, and see if the color corruption only occurs at the boundary between green and white.

  • I have increased the width of stripes to 16 as you suggested. White and green colors can be seen now, but corruption indeed occurs on the boundary. The color on the edges of a green stripe appears to be darker or lighter green than in the middle. In addition to that, the boundary between green and white flickers, as though pixels on the edge change colors from white to green and back every other frame. 

    This picture shows how does it look now. Picture itself is an animated GIF; I hope you will be able to see artifacts in your browser or picture viewer.

    Actually this green and white patterns is just a synthetic test, which can reproduce error perfectly. The actual task is to display characters on the screen. Acceptable line width of character body is 2 or 4 pix, but not by any chance 16 or more. I made this test, because I noticed some artifacts (flickering noise and line smearing) appear on the edge of characters and in order to solve the issue I narrowed down my problem to NTSC output hardware.

    Is this chroma subsampling or luma/chroma cross interference has something to do with my display devices (or capture card) or it can be an issue of NTSC output on my reference board ? What can I do to get rid of that artifacts ?

  • I have seen this in several occasions. I believe this is something inherent to NTSC output (and it might have been exaggerated by the 422 input format and the quality of the display).

    Unfortunately, I don't have a good solution to get rid of the artifacts at the moment.

  • Were you at least able to recreate the same test on your DM365 EVM ?

    I just want to understand whether this problem exists on my exemplar of DM36X EVM or this problem expands to all DM365 processors as well.

    How do you think, will this problem disappear if in our custom design we drop DM365's composite output and provide it via external NTSC encoder chip ?

  • Hi,

    No. I haven't tried this particular pattern on the DM365 EVM.  However, I've tried this type of experiment on devices that have very similar backend. I am fairly confident this is a generic problem.  If you would like this escalated, please contact your sales/FAE.

    I'd suggest you to try component out first and see whether that removes this the artifact though.

    Were you thinking about using digital output to something like a THS8200?