Mercurial > mplayer.hg
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 |