comparison libvo/vo_directfb2.c @ 32169:e55fdf5b1dd7

Require DirectFB version 0.9.22. This allows getting rid of a lot of library version check #ifdeffery. Release 0.9.22 is from February 2005, so the requirement is reasonable.
author diego
date Wed, 15 Sep 2010 18:34:15 +0000
parents c026f1657647
children 5c91b8727591
comparison
equal deleted inserted replaced
32168:c026f1657647 32169:e55fdf5b1dd7
20 * You should have received a copy of the GNU Lesser General Public License 20 * You should have received a copy of the GNU Lesser General Public License
21 * along with MPlayer; if not, write to the Free Software Foundation, Inc., 21 * along with MPlayer; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 */ 23 */
24 24
25 // directfb includes
26
27 #include <directfb.h> 25 #include <directfb.h>
28 #include <directfb_version.h> 26 #include <directfb_version.h>
29
30 #define DFB_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c))
31 #define DIRECTFBVERSION DFB_VERSION(DIRECTFB_MAJOR_VERSION, DIRECTFB_MINOR_VERSION, DIRECTFB_MICRO_VERSION)
32
33 // other things
34
35 #include <stdio.h> 27 #include <stdio.h>
36 #include <stdlib.h> 28 #include <stdlib.h>
37 #include <string.h> 29 #include <string.h>
38 30
39 #include "config.h" 31 #include "config.h"
48 40
49 #ifndef min 41 #ifndef min
50 #define min(x,y) (((x)<(y))?(x):(y)) 42 #define min(x,y) (((x)<(y))?(x):(y))
51 #endif 43 #endif
52 44
53 #if DIRECTFBVERSION > DFB_VERSION(0,9,17)
54 // triple buffering 45 // triple buffering
55 #define TRIPLE 1 46 #define TRIPLE 1
56 #endif
57 47
58 static const vo_info_t info = { 48 static const vo_info_t info = {
59 "Direct Framebuffer Device", 49 "Direct Framebuffer Device",
60 "directfb", 50 "directfb",
61 "Jiri Svoboda Jiri.Svoboda@seznam.cz", 51 "Jiri Svoboda Jiri.Svoboda@seznam.cz",
62 "v 2.0 (for DirectFB version >=0.9.15)" 52 "v 2.0 (for DirectFB version >=0.9.22)"
63 }; 53 };
64 54
65 const LIBVO_EXTERN(directfb) 55 const LIBVO_EXTERN(directfb)
66 56
67 /****************************** 57 /******************************
270 * (Initialize) 260 * (Initialize)
271 */ 261 */
272 262
273 DFBCHECK (DirectFBCreate (&dfb)); 263 DFBCHECK (DirectFBCreate (&dfb));
274 264
275 #if DIRECTFBVERSION < DFB_VERSION(0,9,17)
276 if (DFB_OK != dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)) {
277 mp_msg(MSGT_VO, MSGL_WARN,"DirectFB: Warning - cannot switch to fullscreen mode");
278 };
279 #endif
280
281 /* 265 /*
282 * (Get keyboard) 266 * (Get keyboard)
283 */ 267 */
284 268
285 if (use_input) { 269 if (use_input) {
315 case IMGFMT_BGR32: return DSPF_RGB32; break; 299 case IMGFMT_BGR32: return DSPF_RGB32; break;
316 case IMGFMT_RGB24: return DSPF_RGB24; break; 300 case IMGFMT_RGB24: return DSPF_RGB24; break;
317 case IMGFMT_BGR24: return DSPF_RGB24; break; 301 case IMGFMT_BGR24: return DSPF_RGB24; break;
318 case IMGFMT_RGB16: return DSPF_RGB16; break; 302 case IMGFMT_RGB16: return DSPF_RGB16; break;
319 case IMGFMT_BGR16: return DSPF_RGB16; break; 303 case IMGFMT_BGR16: return DSPF_RGB16; break;
320 #if DIRECTFBVERSION > DFB_VERSION(0,9,15)
321 case IMGFMT_RGB15: return DSPF_ARGB1555; break; 304 case IMGFMT_RGB15: return DSPF_ARGB1555; break;
322 case IMGFMT_BGR15: return DSPF_ARGB1555; break; 305 case IMGFMT_BGR15: return DSPF_ARGB1555; break;
323 case IMGFMT_RGB12: return DSPF_ARGB4444; break; 306 case IMGFMT_RGB12: return DSPF_ARGB4444; break;
324 case IMGFMT_BGR12: return DSPF_ARGB4444; break; 307 case IMGFMT_BGR12: return DSPF_ARGB4444; break;
325 #else
326 case IMGFMT_RGB15: return DSPF_RGB15; break;
327 case IMGFMT_BGR15: return DSPF_RGB15; break;
328 case IMGFMT_RGB12: return DSPF_RGB12; break;
329 case IMGFMT_BGR12: return DSPF_RGB12; break;
330 #endif
331 case IMGFMT_YUY2: return DSPF_YUY2; break; 308 case IMGFMT_YUY2: return DSPF_YUY2; break;
332 case IMGFMT_UYVY: return DSPF_UYVY; break; 309 case IMGFMT_UYVY: return DSPF_UYVY; break;
333 case IMGFMT_YV12: return DSPF_YV12; break; 310 case IMGFMT_YV12: return DSPF_YV12; break;
334 case IMGFMT_I420: return DSPF_I420; break; 311 case IMGFMT_I420: return DSPF_I420; break;
335 // case IMGFMT_IYUV: return DSPF_IYUV; break; 312 // case IMGFMT_IYUV: return DSPF_IYUV; break;
609 586
610 // setup layer 587 // setup layer
611 588
612 DFBCHECK (dfb->GetDisplayLayer( dfb, params.id, &layer)); 589 DFBCHECK (dfb->GetDisplayLayer( dfb, params.id, &layer));
613 590
614 #if DIRECTFBVERSION > DFB_VERSION(0,9,16)
615 mp_msg(MSGT_VO, MSGL_DBG2,"DirectFB: Config - switching layer to exclusive mode\n"); 591 mp_msg(MSGT_VO, MSGL_DBG2,"DirectFB: Config - switching layer to exclusive mode\n");
616 ret = layer->SetCooperativeLevel (layer, DLSCL_EXCLUSIVE); 592 ret = layer->SetCooperativeLevel (layer, DLSCL_EXCLUSIVE);
617 593
618 if (DFB_OK != ret) { 594 if (DFB_OK != ret) {
619 mp_msg(MSGT_VO, MSGL_WARN,"DirectFB: Warning - cannot switch layer to exclusive mode. This could cause\nproblems. You may need to select correct pixel format manually!\n"); 595 mp_msg(MSGT_VO, MSGL_WARN,"DirectFB: Warning - cannot switch layer to exclusive mode. This could cause\nproblems. You may need to select correct pixel format manually!\n");
620 DirectFBError("MPlayer - Switch layer to exlusive mode.",ret); 596 DirectFBError("MPlayer - Switch layer to exlusive mode.",ret);
621 }; 597 };
622 #endif
623 if (params.scale) { 598 if (params.scale) {
624 mp_msg(MSGT_VO, MSGL_DBG2,"DirectFB: Config - changing layer configuration (size)\n"); 599 mp_msg(MSGT_VO, MSGL_DBG2,"DirectFB: Config - changing layer configuration (size)\n");
625 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; 600 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT;
626 dlc.width = s_width; 601 dlc.width = s_width;
627 dlc.height = s_height; 602 dlc.height = s_height;
667 switch (dlc.pixelformat) { 642 switch (dlc.pixelformat) {
668 case DSPF_ARGB: 643 case DSPF_ARGB:
669 case DSPF_RGB32: bpp=32;break; 644 case DSPF_RGB32: bpp=32;break;
670 case DSPF_RGB24: bpp=24;break; 645 case DSPF_RGB24: bpp=24;break;
671 case DSPF_RGB16: bpp=16;break; 646 case DSPF_RGB16: bpp=16;break;
672 #if DIRECTFBVERSION > DFB_VERSION(0,9,15)
673 case DSPF_ARGB1555: bpp=15;break; 647 case DSPF_ARGB1555: bpp=15;break;
674 case DSPF_ARGB4444: bpp=12; break; 648 case DSPF_ARGB4444: bpp=12; break;
675 #else
676 case DSPF_RGB15: bpp=15;break;
677 case DSPF_RGB12: bpp=12; break;
678 #endif
679 case DSPF_RGB332 : bpp=8;break; 649 case DSPF_RGB332 : bpp=8;break;
680 } 650 }
681 651
682 switch (dlc.pixelformat) { 652 switch (dlc.pixelformat) {
683 case DSPF_ARGB: 653 case DSPF_ARGB:
684 case DSPF_RGB32: 654 case DSPF_RGB32:
685 case DSPF_RGB24: 655 case DSPF_RGB24:
686 case DSPF_RGB16: 656 case DSPF_RGB16:
687 #if DIRECTFBVERSION > DFB_VERSION(0,9,15)
688 case DSPF_ARGB1555: 657 case DSPF_ARGB1555:
689 case DSPF_ARGB4444: 658 case DSPF_ARGB4444:
690 #else
691 case DSPF_RGB15:
692 case DSPF_RGB12:
693 #endif
694 case DSPF_RGB332: 659 case DSPF_RGB332:
695 mp_msg(MSGT_VO, MSGL_V,"DirectFB: Trying to recover via videomode change (VM).\n"); 660 mp_msg(MSGT_VO, MSGL_V,"DirectFB: Trying to recover via videomode change (VM).\n");
696 // get size 661 // get size
697 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; 662 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT;
698 if (DFB_OK==layer->GetConfiguration(layer,&dlc)) { 663 if (DFB_OK==layer->GetConfiguration(layer,&dlc)) {
755 } else { 720 } else {
756 mp_msg(MSGT_VO, MSGL_V,"DirectFB: Triple buffering is active\n"); 721 mp_msg(MSGT_VO, MSGL_V,"DirectFB: Triple buffering is active\n");
757 } 722 }
758 #endif 723 #endif
759 724
760 #if DIRECTFBVERSION > DFB_VERSION(0,9,16)
761 if (field_parity != -1) { 725 if (field_parity != -1) {
762 dlc.flags = DLCONF_OPTIONS; 726 dlc.flags = DLCONF_OPTIONS;
763 ret = layer->GetConfiguration( layer, &dlc ); 727 ret = layer->GetConfiguration( layer, &dlc );
764 if (ret==DFB_OK) { 728 if (ret==DFB_OK) {
765 dlc.options |= DLOP_FIELD_PARITY; 729 dlc.options |= DLOP_FIELD_PARITY;
780 case 1: 744 case 1:
781 mp_msg( MSGT_VO, MSGL_DBG2, "Bottom field first\n"); 745 mp_msg( MSGT_VO, MSGL_DBG2, "Bottom field first\n");
782 break; 746 break;
783 } 747 }
784 748
785 #endif
786
787
788 // get layer surface 749 // get layer surface
789 750
790 ret = layer->GetSurface(layer,&primary); 751 ret = layer->GetSurface(layer,&primary);
791 752
792 if (ret) { 753 if (ret) {
1484 break; 1445 break;
1485 1446
1486 case DSPF_RGB16: 1447 case DSPF_RGB16:
1487 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch); 1448 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch);
1488 break; 1449 break;
1489 #if DIRECTFBVERSION > DFB_VERSION(0,9,15)
1490 case DSPF_ARGB1555: 1450 case DSPF_ARGB1555:
1491 #else
1492 case DSPF_RGB15:
1493 #endif
1494 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch); 1451 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch);
1495 break; 1452 break;
1496 #if DIRECTFBVERSION > DFB_VERSION(0,9,15)
1497 case DSPF_ARGB4444: 1453 case DSPF_ARGB4444:
1498 #else
1499 case DSPF_RGB12:
1500 #endif
1501 vo_draw_alpha_rgb12(w, h, src, srca, stride, 1454 vo_draw_alpha_rgb12(w, h, src, srca, stride,
1502 ((uint8_t *) dst) + pitch * y0 + 2 * x0, 1455 ((uint8_t *) dst) + pitch * y0 + 2 * x0,
1503 pitch); 1456 pitch);
1504 break; 1457 break;
1505 1458