Hi Niels,
   Appreciate for your help.

1. I have try DSFLIP_NONE to see the playing rate, it still take 1.9s to
play 30 frame.

2. I use "for" loop to playing 30 frame, and measure how long it take.
like this


<=========
while (!quit) {

lastftick = myclock();
for(i=0;i<FRAME_NUMBER;I++){
CopyYUVData(temp[i], videosurface); //temp[i] is 30 frame

/*Flip the buffers of videosurface on the video layer*/
videosurface->Flip(videosurface, NULL, DSFLIP_WAITFORSYNC);
}
lastftick = myclock()-lastftick;
printf("playing %d buffer time used: %ld s\n", frame_number,lastftick);

}
=========>
output:  playing 30 buffer time used: 1941 s

3. My gfx card do support UYVY to RGB,  I read 30 UYVY files to memory(above
slice code's temp[i] )
   and copy to videosurface, it can display correctly.

4. Actually I regard this surface as "primary surface", is because I use the
DSCAPS_PRIMARY parameter 
 to create surface, 
  like this slice code.
<=========
        desc.caps = DSCAPS_PRIMARY;
        desc.pixelformat = DSPF_RGB16;
        desc.width = SCREEN_W;
        desc.height = SCREEN_H;
        dfb->CreateSurface(dfb, &desc, &primarysurface);
=========>
    Am I making some misunderstanding on this?

5. In fact, my example just can play each single frame in loop.   :o
  And it takes almost 2 seconds to play 30 frames(too slow, my main issue).

  Here is my guess, maybe root cause is on memcpy too slow?
  The XGA UYVY file size is 1.5mb/frame, memcpy can't move data to
"videosurface" in time.
  So it can't meet 30frame/s.  Is this guess reasonable?


Thanks for you help!
Best Regards.

Lidj.


Niels Roest wrote:
> 
> Hi, had a short look.
> Not quite sure what is your issue so I need to ask a few questions.
> 
> You might want to remove DSFLIP_WAITFORSYNC to see how close you are to
> 30.
> Did you do the math to check for the maximum theoretical throughput?
> Also curious if the layer really switched to UYVY, not sure if your gfx 
> driver supports this. You can check with dfbdump, best is to run this at 
> the same time as your test code (you need to have directfb configured 
> multi-app in this case).
> Also, you mention 'primarysurface' but if I understand the code, it 
> doesn't take the primary layer.
> 
> Is your example displaying the little movie correctly?
> 
> Greets
> Niels
> 
> Lidj wrote:
>> Dear all,
>>    I am new to DFB, here I modify df_layer.c to play UYVY data on XGI
>> graphic card,
>>   this graphic card support yuv to rgb. Now I playing XGA(1024x768
>> 16it)picture(about 1.5 mb/frame), 
>> the frame rate is just 15 frame/s,I want to achieve 30 frame/s at least. 
>>
>> Here is my flow.
>> 1. Create "dfb" super interface.
>> 2. Enumerate display layers "videolayer"  from dfb.
>> 3. "videolayer" get "videosurface" ,"dfb" create "primarysurface" 
>> 4. copy yuv data into "videosurface", then flip.
>>
>>   yuv data already buffer to memory, just playing yuv date cyclically.
>>
>> Here is slice code.
>> <=========
>> while (!quit) {
>>
>> lastftick = myclock();
>> for(i=0;i<FRAME_NUMBER;I++){
>> CopyYUVData(temp[i], videosurface);
>>
>> /*Flip the buffers of videosurface on the video layer*/
>> videosurface->Flip(videosurface, NULL, DSFLIP_WAITFORSYNC);
>> }
>> lastftick = myclock()-lastftick; 
>> printf("playing %d buffer time used: %ld s\n", frame_number,lastftick); 
>>
>> }
>> =========>
>>
>>
>> <=========
>> #define YUVSRC_W 1024
>> #define YUVSRC_H 768
>>
>> #define YUVFRAME_BYTESPerPixel 2
>> #define YUVFRAME_SIZE (YUVSRC_W * YUVSRC_H)
>> #define YUVFRAME_Pitch (YUVSRC_W * YUVFRAME_BYTESPerPixel)
>>
>> void CopyYUVData(unsigned char *src, IDirectFBSurface *des)
>> {
>> int y;
>> void             *data;
>> unsigned int      pitch;
>> DFBResult         ret;
>> ret = des->Lock (des, DSLF_WRITE, &data, &pitch);
>> if (ret)
>> {
>>   fprintf(stderr,"IDirectFBSurface:ock error code =%d", ret);
>>   return;
>> }
>> for(y=0; y<YUVSRC_H; y++)
>> {
>>   memcpy(data, src+YUVFRAME_Pitch*y, YUVFRAME_Pitch);
>>   data += pitch;
>> }
>> des->Unlock (des);
>> }
>> =========>
>>
>>    here is entire code. please go to below link, and simply click
>> dowoload.
>>    http://www.box.net/shared/7dafavyvrz
>>
>>    Any comment will be very appreciated :D
>>
>>    Best regard~
>>    Lidj.
>>
>>   
> 
> 
> -- 
> 
> .------------------------------------------.
> | DirectFB - Hardware accelerated graphics |
> | http://www.directfb.org/                 |
> "------------------------------------------" 
> 
> _______________________________________________
> directfb-users mailing list
> directfb-users@directfb.org
> http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-accelerate-playing-UYVY-data--tp21156543p21289672.html
Sent from the DirectFB Users mailing list archive at Nabble.com.

_______________________________________________
directfb-users mailing list
directfb-users@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to