Mercurial > mplayer.hg
comparison libvo/vo_directfb.c @ 5258:c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
new requirements for preinit/control. by jiri svoboda
author | atmos4 |
---|---|
date | Fri, 22 Mar 2002 03:22:34 +0000 |
parents | c663455448e8 |
children | 1972c3475d93 |
comparison
equal
deleted
inserted
replaced
5257:1823c7dff423 | 5258:c9ccddcbdd81 |
---|---|
126 extern char *fb_dev_name; | 126 extern char *fb_dev_name; |
127 #else | 127 #else |
128 char *fb_dev_name; | 128 char *fb_dev_name; |
129 #endif | 129 #endif |
130 | 130 |
131 static int preinitdone=0; | |
132 | |
133 static void (*draw_alpha_p)(int w, int h, unsigned char *src, | 131 static void (*draw_alpha_p)(int w, int h, unsigned char *src, |
134 unsigned char *srca, int stride, unsigned char *dst, | 132 unsigned char *srca, int stride, unsigned char *dst, |
135 int dstride); | 133 int dstride); |
136 | 134 |
137 static uint32_t in_width; | 135 static uint32_t in_width; |
149 int overx,overy; | 147 int overx,overy; |
150 } modes [4]; | 148 } modes [4]; |
151 static unsigned int best_bpp=5; | 149 static unsigned int best_bpp=5; |
152 // videolayer stuff | 150 // videolayer stuff |
153 static int videolayeractive=0; | 151 static int videolayeractive=0; |
152 static int videolayerpresent=0; | |
154 //some info about videolayer - filled on preinit | 153 //some info about videolayer - filled on preinit |
155 struct vlayer_t { | 154 struct vlayer_t { |
156 int iv12; | 155 int iv12; |
157 int i420; | 156 int i420; |
158 int yuy2; | 157 int yuy2; |
168 #define DIRECTRENDER | 167 #define DIRECTRENDER |
169 #ifdef DIRECTRENDER | 168 #ifdef DIRECTRENDER |
170 static int dr_enabled=0; | 169 static int dr_enabled=0; |
171 static int framelocked=0; | 170 static int framelocked=0; |
172 #endif | 171 #endif |
173 | 172 // primary & frame stuff |
173 static int frameallocated=0; | |
174 static int primaryallocated=0; | |
174 | 175 |
175 DFBEnumerationResult enum_modes_callback( unsigned int width,unsigned int height,unsigned int bpp, void *data) | 176 DFBEnumerationResult enum_modes_callback( unsigned int width,unsigned int height,unsigned int bpp, void *data) |
176 { | 177 { |
177 int overx=0,overy=0; | 178 int overx=0,overy=0; |
178 unsigned int index=bpp/8-1; | 179 unsigned int index=bpp/8-1; |
272 * (Initialize) | 273 * (Initialize) |
273 */ | 274 */ |
274 | 275 |
275 if (verbose) printf("DirectFB: Preinit entered\n"); | 276 if (verbose) printf("DirectFB: Preinit entered\n"); |
276 | 277 |
277 if (preinitdone) return 0; | |
278 | |
279 DFBCHECK (DirectFBInit (NULL,NULL)); | 278 DFBCHECK (DirectFBInit (NULL,NULL)); |
280 | 279 |
281 if ((directfb_major_version >= 0) && | 280 if ((directfb_major_version >= 0) && |
282 (directfb_minor_version >= 9) && | 281 (directfb_minor_version >= 9) && |
283 (directfb_micro_version >= 7)) | 282 (directfb_micro_version >= 7)) |
404 | 403 |
405 | 404 |
406 // is there a working yuv ? if no we will not use videolayer | 405 // is there a working yuv ? if no we will not use videolayer |
407 if ((videolayercaps.iv12==0)&&(videolayercaps.i420==0)&&(videolayercaps.yuy2==0)&&(videolayercaps.uyvy==0)) { | 406 if ((videolayercaps.iv12==0)&&(videolayercaps.i420==0)&&(videolayercaps.yuy2==0)&&(videolayercaps.uyvy==0)) { |
408 // videolayer doesn't work with yuv so release it | 407 // videolayer doesn't work with yuv so release it |
409 videolayeractive=0; | 408 videolayerpresent=0; |
410 videolayer->SetOpacity(videolayer,0); | 409 videolayer->SetOpacity(videolayer,0); |
411 videolayer->Release(videolayer); | 410 videolayer->Release(videolayer); |
412 } else { | 411 } else { |
413 videolayeractive=1; | 412 videolayerpresent=1; |
414 }; | 413 }; |
415 } | 414 } |
416 | 415 |
417 // just look at RGB things for main layer | 416 // just look at RGB things for main layer |
418 modes[0].valid=0; | 417 modes[0].valid=0; |
419 modes[1].valid=0; | 418 modes[1].valid=0; |
420 modes[2].valid=0; | 419 modes[2].valid=0; |
421 modes[3].valid=0; | 420 modes[3].valid=0; |
422 DFBCHECK (dfb->EnumVideoModes(dfb,enum_modes_callback,NULL)); | 421 DFBCHECK (dfb->EnumVideoModes(dfb,enum_modes_callback,NULL)); |
423 preinitdone=1; | 422 |
423 /* | |
424 * (Get keyboard) | |
425 */ | |
426 DFBCHECK (dfb->GetInputDevice (dfb, DIDID_KEYBOARD, &keyboard)); | |
427 | |
428 /* | |
429 * Create an input buffer for the keyboard. | |
430 */ | |
431 #ifdef HAVE_DIRECTFB099 | |
432 DFBCHECK (keyboard->CreateEventBuffer (keyboard, &buffer)); | |
433 #else | |
434 DFBCHECK (keyboard->CreateInputBuffer (keyboard, &buffer)); | |
435 #endif | |
436 // just to start with clean ... | |
437 buffer->Reset(buffer); | |
424 return 0; | 438 return 0; |
425 | 439 |
426 } | 440 } |
427 | 441 |
428 | 442 |
439 | 453 |
440 int vm = fullscreen & 0x02; | 454 int vm = fullscreen & 0x02; |
441 int zoom = fullscreen & 0x04; | 455 int zoom = fullscreen & 0x04; |
442 | 456 |
443 if (verbose) printf("DirectFB: Config entered [%ix%i]\n",width,height); | 457 if (verbose) printf("DirectFB: Config entered [%ix%i]\n",width,height); |
458 if (verbose) printf("DirectFB: With requested format: %s\n",vo_format_name(format)); | |
444 | 459 |
445 fs = fullscreen & 0x01; | 460 fs = fullscreen & 0x01; |
446 flip = fullscreen & 0x08; | 461 flip = fullscreen & 0x08; |
447 | 462 |
448 pixel_format=format; | 463 pixel_format=format; |
469 if (vm) { | 484 if (vm) { |
470 // need better algorithm just hack | 485 // need better algorithm just hack |
471 if (modes[source_pixel_size-1].valid) dfb->SetVideoMode(dfb,modes[source_pixel_size-1].width,modes[source_pixel_size-1].height,source_pixel_size); | 486 if (modes[source_pixel_size-1].valid) dfb->SetVideoMode(dfb,modes[source_pixel_size-1].width,modes[source_pixel_size-1].height,source_pixel_size); |
472 } | 487 } |
473 | 488 |
474 | 489 // release primary if it is already allocated |
475 if (videolayeractive) { | 490 if (primaryallocated) { |
476 videolayeractive=0; // will be enabled on succes later | 491 if (verbose ) printf("DirectFB: Release primary\n"); |
492 primary->Release (primary); | |
493 primaryallocated=0; | |
494 }; | |
495 | |
496 videolayeractive=0; // will be enabled on succes later | |
497 | |
498 if (videolayerpresent) { | |
477 | 499 |
478 // try to set proper w a h values matching image size | 500 // try to set proper w a h values matching image size |
479 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; | 501 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; |
480 dlc.width = in_width; | 502 dlc.width = in_width; |
481 dlc.height = in_height; | 503 dlc.height = in_height; |
518 dlc.pixelformat=DSPF_YV12; | 540 dlc.pixelformat=DSPF_YV12; |
519 break; | 541 break; |
520 #endif | 542 #endif |
521 }; | 543 }; |
522 // shouldn't happen - if it reaches here -> bug | 544 // shouldn't happen - if it reaches here -> bug |
523 dsc.pixelformat = DSPF_RGB24; break; | 545 |
524 | 546 case IMGFMT_RGB32: dlc.pixelformat = DSPF_ARGB; break; |
525 case IMGFMT_RGB32: dsc.pixelformat = DSPF_ARGB; break; | 547 case IMGFMT_BGR32: dlc.pixelformat = DSPF_ARGB; break; |
526 case IMGFMT_BGR32: dsc.pixelformat = DSPF_ARGB; break; | 548 case IMGFMT_RGB24: dlc.pixelformat = DSPF_RGB24; break; |
527 case IMGFMT_RGB24: dsc.pixelformat = DSPF_RGB24; break; | 549 case IMGFMT_BGR24: dlc.pixelformat = DSPF_RGB24; break; |
528 case IMGFMT_BGR24: dsc.pixelformat = DSPF_RGB24; break; | 550 case IMGFMT_RGB16: dlc.pixelformat = DSPF_RGB16; break; |
529 case IMGFMT_RGB16: dsc.pixelformat = DSPF_RGB16; break; | 551 case IMGFMT_BGR16: dlc.pixelformat = DSPF_RGB16; break; |
530 case IMGFMT_BGR16: dsc.pixelformat = DSPF_RGB16; break; | 552 case IMGFMT_RGB15: dlc.pixelformat = DSPF_RGB15; break; |
531 case IMGFMT_RGB15: dsc.pixelformat = DSPF_RGB15; break; | 553 case IMGFMT_BGR15: dlc.pixelformat = DSPF_RGB15; break; |
532 case IMGFMT_BGR15: dsc.pixelformat = DSPF_RGB15; break; | 554 default: dlc.pixelformat = DSPF_RGB24; break; |
533 default: dsc.pixelformat = DSPF_RGB24; break; | |
534 } | 555 } |
535 | 556 |
536 if (verbose) switch (dlc.pixelformat) { | 557 if (verbose) switch (dlc.pixelformat) { |
537 case DSPF_ARGB: printf("DirectFB: layer format ARGB\n"); | 558 case DSPF_ARGB: printf("DirectFB: layer format ARGB\n"); |
538 break; | 559 break; |
562 if (verbose) printf("DirectFB: SetConfiguration for layer OK\n"); | 583 if (verbose) printf("DirectFB: SetConfiguration for layer OK\n"); |
563 ret = videolayer->GetSurface( videolayer, &primary ); | 584 ret = videolayer->GetSurface( videolayer, &primary ); |
564 if (!ret){ | 585 if (!ret){ |
565 videolayeractive=1; | 586 videolayeractive=1; |
566 if (verbose) printf("DirectFB: Get surface for layer OK\n"); | 587 if (verbose) printf("DirectFB: Get surface for layer OK\n"); |
567 }; | 588 primaryallocated=1; |
568 }; | 589 } else { |
590 videolayeractive=0; | |
591 if (videolayer) videolayer->SetOpacity(videolayer,0); | |
592 }; | |
593 } else { | |
594 videolayeractive=0; | |
595 if (videolayer) videolayer->SetOpacity(videolayer,0); | |
596 }; | |
569 | 597 |
570 } | 598 } |
571 | 599 |
572 // for flipping we will use BitBlt not integrated directfb flip | 600 // for flipping we will use BitBlt not integrated directfb flip |
573 dsc.flags = DSDESC_CAPS | DSDESC_PIXELFORMAT; | 601 dsc.flags = DSDESC_CAPS | DSDESC_PIXELFORMAT; |
585 default: dsc.pixelformat = DSPF_RGB24; source_pixel_size=2; break; //YUV formats | 613 default: dsc.pixelformat = DSPF_RGB24; source_pixel_size=2; break; //YUV formats |
586 }; | 614 }; |
587 | 615 |
588 if (!videolayeractive) { | 616 if (!videolayeractive) { |
589 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary )); | 617 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary )); |
590 | 618 if (verbose) printf("DirectFB: Get primary surface OK\n"); |
619 primaryallocated=1; | |
591 } | 620 } |
592 | 621 |
593 DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height)); | 622 DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height)); |
594 | 623 |
595 DFBCHECK (primary->GetPixelFormat (primary, &frame_format)); | 624 DFBCHECK (primary->GetPixelFormat (primary, &frame_format)); |
596 | 625 |
597 // temporary buffer buffer | 626 // temporary frame buffer |
598 dsc.flags = DSDESC_CAPS | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_WIDTH; | 627 dsc.flags = DSDESC_CAPS | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_WIDTH; |
599 | 628 |
600 dsc.width = in_width; | 629 dsc.width = in_width; |
601 dsc.height = in_height; | 630 dsc.height = in_height; |
602 | 631 |
626 }; | 655 }; |
627 #else | 656 #else |
628 memcpyBitBlt = 0; | 657 memcpyBitBlt = 0; |
629 #endif | 658 #endif |
630 | 659 |
660 // release frame if it is already allocated | |
661 if (frameallocated) { | |
662 if (verbose ) printf("DirectFB: Release frame\n"); | |
663 frame->Release (frame); | |
664 frameallocated=0; | |
665 }; | |
666 | |
667 | |
631 // prevent from memcpy from videomemory to videomemory | 668 // prevent from memcpy from videomemory to videomemory |
632 /* if (memcpyBitBlt) { | 669 /* if (memcpyBitBlt) { |
633 dsc.caps = DSCAPS_SYSTEMONLY; | 670 dsc.caps = DSCAPS_SYSTEMONLY; |
634 } else { | 671 } else { |
635 dsc.caps = DSCAPS_VIDEOONLY; | 672 dsc.caps = DSCAPS_VIDEOONLY; |
637 ret = dfb->CreateSurface( dfb, &dsc, &frame); | 674 ret = dfb->CreateSurface( dfb, &dsc, &frame); |
638 if (ret) { | 675 if (ret) { |
639 if (verbose) printf ("DirectFB: Trying do create buffer in system memory (2)\n");*/ | 676 if (verbose) printf ("DirectFB: Trying do create buffer in system memory (2)\n");*/ |
640 dsc.caps = DSCAPS_SYSTEMONLY; | 677 dsc.caps = DSCAPS_SYSTEMONLY; |
641 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &frame)); | 678 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &frame)); |
679 frameallocated=1; | |
642 // } | 680 // } |
643 | 681 |
644 DFBCHECK (frame->GetPixelFormat (frame, &frame_format)); | 682 DFBCHECK (frame->GetPixelFormat (frame, &frame_format)); |
645 | 683 |
646 switch (frame_format) { | 684 switch (frame_format) { |
680 printf("Screensize is smaller than video size !\n"); | 718 printf("Screensize is smaller than video size !\n"); |
681 // return 1; // doesn't matter we will rescale | 719 // return 1; // doesn't matter we will rescale |
682 } | 720 } |
683 | 721 |
684 | 722 |
685 | |
686 /* | |
687 * (Get keyboard) | |
688 */ | |
689 DFBCHECK (dfb->GetInputDevice (dfb, DIDID_KEYBOARD, &keyboard)); | |
690 | |
691 /* | |
692 * Create an input buffer for the keyboard. | |
693 */ | |
694 #ifdef HAVE_DIRECTFB099 | |
695 DFBCHECK (keyboard->CreateEventBuffer (keyboard, &buffer)); | |
696 #else | |
697 DFBCHECK (keyboard->CreateInputBuffer (keyboard, &buffer)); | |
698 #endif | |
699 | 723 |
700 // yuv2rgb transform init | 724 // yuv2rgb transform init |
701 | 725 |
702 if (((format == IMGFMT_YV12) || (format == IMGFMT_YUY2)) && (!videolayeractive)){ yuv2rgb_init(frame_pixel_size * 8,MODE_RGB);}; | 726 if (((format == IMGFMT_YV12) || (format == IMGFMT_YUY2)) && (!videolayeractive)){ yuv2rgb_init(frame_pixel_size * 8,MODE_RGB);}; |
703 | 727 |
783 case IMGFMT_RGB16: | 807 case IMGFMT_RGB16: |
784 case IMGFMT_BGR16: | 808 case IMGFMT_BGR16: |
785 case IMGFMT_RGB15: | 809 case IMGFMT_RGB15: |
786 case IMGFMT_BGR15: if (modes[1].valid) return ret|0x2; | 810 case IMGFMT_BGR15: if (modes[1].valid) return ret|0x2; |
787 break; | 811 break; |
788 case IMGFMT_YUY2: if (videolayeractive) { | 812 case IMGFMT_YUY2: if (videolayerpresent) { |
789 if (videolayercaps.yuy2) { | 813 if (videolayercaps.yuy2) { |
790 return ret|0x2; | 814 return ret|0x2|0x1; |
791 } else { | 815 } else { |
792 return ret|0x1; | 816 return ret|0x1; |
793 }; | 817 }; |
794 }; | 818 }; |
795 break; | 819 break; |
796 case IMGFMT_YV12: if ((videolayeractive) && | 820 case IMGFMT_YV12: if ((videolayerpresent) && |
797 (videolayercaps.i420 || videolayercaps.iv12)) | 821 (videolayercaps.i420 || videolayercaps.iv12)) |
798 return ret|0x2; else return ret|0x1; | 822 return ret|0x2|0x1; else return ret|0x1; |
799 break; | 823 break; |
800 // YV12 should work in all cases | 824 // YV12 should work in all cases |
801 } | 825 } |
802 | 826 |
803 return 0; | 827 return 0; |
1033 break; | 1057 break; |
1034 | 1058 |
1035 #ifdef HAVE_DIRECTFB099 | 1059 #ifdef HAVE_DIRECTFB099 |
1036 case DSPF_YV12: | 1060 case DSPF_YV12: |
1037 switch (pixel_format) { | 1061 switch (pixel_format) { |
1038 case IMGFMT_YV12: { | 1062 case IMGFMT_YV12: { |
1063 void *d,*s; | |
1039 int i; | 1064 int i; |
1040 dst += x; | 1065 d = dst + pitch*y + x; |
1041 for (i=y;i<(y+h);i++) { | 1066 s = src[0]; |
1042 memcpy(dst+i*pitch,src[0]+i*stride[0],w); | 1067 for (i=0;i<h;i++) { |
1068 memcpy(d,s,w); | |
1069 d+=pitch; | |
1070 s+=stride[0]; | |
1043 } | 1071 } |
1044 dst += pitch*in_height - (x)/2; | 1072 d = dst + pitch*in_height + pitch*y/4 + x/2; |
1045 for (i=y/2;i<(y+h)/2;i++) { | 1073 s = src[2]; |
1046 memcpy(dst+i*pitch/2,src[2]+i*stride[2],w/2); | 1074 for (i=0;i<h/2;i++) { |
1075 memcpy(d,s,w/2); | |
1076 d+=pitch/2; | |
1077 s+=stride[2]; | |
1047 } | 1078 } |
1048 dst += pitch*in_height/4; | 1079 d = dst + pitch*in_height + pitch*in_height/4 + pitch*y/4 + x/2; |
1049 for (i=y/2;i<(y+h)/2;i++) { | 1080 s = src[1]; |
1050 memcpy(dst+i*pitch/2,src[1]+i*stride[1],w/2); | 1081 for (i=0;i<h/2;i++) { |
1082 memcpy(d,s,w/2); | |
1083 d+=pitch/2; | |
1084 s+=stride[1]; | |
1051 } | 1085 } |
1052 }; | 1086 }; |
1053 break; | 1087 break; |
1054 /* case IMGFMT_YUY2: { | 1088 /* case IMGFMT_YUY2: { |
1055 int i; | 1089 int i; |
1064 break; | 1098 break; |
1065 | 1099 |
1066 case DSPF_I420: | 1100 case DSPF_I420: |
1067 switch (pixel_format) { | 1101 switch (pixel_format) { |
1068 case IMGFMT_YV12: { | 1102 case IMGFMT_YV12: { |
1103 void *d,*s; | |
1069 int i; | 1104 int i; |
1070 dst += x; | 1105 d = dst + pitch*y + x; |
1071 for (i=y;i<(y+h);i++) { | 1106 s = src[0]; |
1072 memcpy(dst+i*pitch,src[0]+i*stride[0],w); | 1107 for (i=0;i<h;i++) { |
1108 memcpy(d,s,w); | |
1109 d+=pitch; | |
1110 s+=stride[0]; | |
1073 } | 1111 } |
1074 dst += pitch*in_height - (x)/2; | 1112 d = dst + pitch*in_height + pitch*y/4 + x/2; |
1075 for (i=y/2;i<(y+h)/2;i++) { | 1113 s = src[1]; |
1076 memcpy(dst+i*pitch/2,src[1]+i*stride[1],w/2); | 1114 for (i=0;i<h/2;i++) { |
1115 memcpy(d,s,w/2); | |
1116 d+=pitch/2; | |
1117 s+=stride[1]; | |
1077 } | 1118 } |
1078 dst += pitch*in_height/4; | 1119 d = dst + pitch*in_height + pitch*in_height/4 + pitch*y/4 + x/2; |
1079 for (i=y/2;i<(y+h)/2;i++) { | 1120 s = src[2]; |
1080 memcpy(dst+i*pitch/2,src[2]+i*stride[2],w/2); | 1121 for (i=0;i<h/2;i++) { |
1122 memcpy(d,s,w/2); | |
1123 d+=pitch/2; | |
1124 s+=stride[2]; | |
1081 } | 1125 } |
1082 }; | 1126 }; |
1083 break; | 1127 break; |
1084 /* case IMGFMT_YUY2: { | 1128 /* case IMGFMT_YUY2: { |
1085 int i; | 1129 int i; |
1086 for (i=y;i<(y+h);i++) { | 1130 for (i=y;i<(y+h);i++) { |
1087 yuy2toyv12(src[0]+i*stride[0],dst+i*pitch+x*frame_pixel_size,dst+pitch*(in_height+in_height/4+i/2)+x*frame_pixel_size/2,dst+pitch*(in_height+i/2)+x*frame_pixel_size/2,w,h,pitch,pitch/2,pitch/2); | 1131 yuy2toyv12(src[0]+i*stride[0],dst+i*pitch+x*frame_pixel_size,dst+pitch*(in_height+in_height/4+i/2)+x*frame_pixel_size/2,dst+pitch*(in_height+i/2)+x*frame_pixel_size/2,w,h,pitch,pitch/2,pitch/2); |
1231 */ | 1275 */ |
1232 if (verbose ) printf("DirectFB: Release buffer\n"); | 1276 if (verbose ) printf("DirectFB: Release buffer\n"); |
1233 buffer->Release (buffer); | 1277 buffer->Release (buffer); |
1234 if (verbose ) printf("DirectFB: Release keyboard\n"); | 1278 if (verbose ) printf("DirectFB: Release keyboard\n"); |
1235 keyboard->Release (keyboard); | 1279 keyboard->Release (keyboard); |
1236 if (verbose ) printf("DirectFB: Release frame\n"); | 1280 if (frameallocated) { |
1237 frame->Release (frame); | 1281 if (verbose ) printf("DirectFB: Release frame\n"); |
1238 | 1282 frame->Release (frame); |
1283 frameallocated=0; | |
1284 }; | |
1285 | |
1239 // we will not release dfb and layer because there could be a new film | 1286 // we will not release dfb and layer because there could be a new film |
1240 | 1287 |
1241 if (verbose ) printf("DirectFB: Release primary\n"); | 1288 if (verbose ) printf("DirectFB: Release primary\n"); |
1242 primary->Release (primary); | 1289 primary->Release (primary); |
1243 // switch off BES | 1290 // switch off BES |
1247 if (verbose&&videolayer ) printf("DirectFB: Release videolayer\n"); | 1294 if (verbose&&videolayer ) printf("DirectFB: Release videolayer\n"); |
1248 if (videolayer) videolayer->Release(videolayer); | 1295 if (videolayer) videolayer->Release(videolayer); |
1249 | 1296 |
1250 if (verbose ) printf("DirectFB: Release DirectFB library\n"); | 1297 if (verbose ) printf("DirectFB: Release DirectFB library\n"); |
1251 dfb->Release (dfb); | 1298 dfb->Release (dfb); |
1252 preinitdone=0; | |
1253 #endif | 1299 #endif |
1254 | 1300 |
1255 if (verbose ) printf("DirectFB: Uninit done.\n"); | 1301 if (verbose ) printf("DirectFB: Uninit done.\n"); |
1256 } | 1302 } |
1257 | 1303 |
1336 | 1382 |
1337 #ifdef DIRECTRENDER | 1383 #ifdef DIRECTRENDER |
1338 static uint32_t get_image(mp_image_t *mpi){ | 1384 static uint32_t get_image(mp_image_t *mpi){ |
1339 int err; | 1385 int err; |
1340 void *dst; | 1386 void *dst; |
1341 uint8_t *s; | |
1342 int pitch; | 1387 int pitch; |
1343 int i; | |
1344 | 1388 |
1345 // printf("DirectFB: get_image() called\n"); | 1389 // printf("DirectFB: get_image() called\n"); |
1346 | 1390 |
1347 // now we are always in system memory (in this version - mybe will change in future) | 1391 // now we are always in system memory (in this version - mybe will change in future) |
1348 // if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram | 1392 // if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram |