Mercurial > mplayer.hg
annotate libmpcodecs/vd_dshow.c @ 30903:565f6d0f0d2a
Make all instances of codec_patch unconditional, otherwise
compilation will break on systems that do not have win32 dlls
enabled. Fixes compilation bug introduced by r30942
10l to the anonymous guy who explains the importance of commit messages
and would like to have romance novels in these very messages.
author | attila |
---|---|
date | Sun, 21 Mar 2010 10:13:00 +0000 |
parents | 1c38d10731ab |
children | 33ff3fdad741 |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
4958 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
5003 | 21 #include <stdarg.h> |
4958 | 22 |
23 #include "config.h" | |
24 | |
25 #include "mp_msg.h" | |
26 #include "help_mp.h" | |
27 | |
28 #include "vd_internal.h" | |
29 | |
30 #include "loader/dshow/DS_VideoDecoder.h" | |
31 | |
30504
cc27da5d7286
Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents:
30421
diff
changeset
|
32 static const vd_info_t info = { |
4958 | 33 "DirectShow video codecs", |
34 "dshow", | |
35 "A'rpi", | |
36 "based on http://avifile.sf.net", | |
37 "win32 codecs" | |
38 }; | |
39 | |
40 LIBVD_EXTERN(dshow) | |
41 | |
42 // to set/get/query special features/parameters | |
43 static int control(sh_video_t *sh,int cmd,void* arg,...){ | |
44 switch(cmd){ | |
45 case VDCTRL_QUERY_MAX_PP_LEVEL: | |
46 return 4; | |
47 case VDCTRL_SET_PP_LEVEL: | |
48 if(!sh->context) return CONTROL_ERROR; | |
49 DS_VideoDecoder_SetValue(sh->context,"Quality",*((int*)arg)); | |
50 return CONTROL_OK; | |
51 | |
5003 | 52 case VDCTRL_SET_EQUALIZER: { |
53 va_list ap; | |
54 int value; | |
55 va_start(ap, arg); | |
56 value=va_arg(ap, int); | |
57 va_end(ap); | |
6802 | 58 if(DS_VideoDecoder_SetValue(sh->context,arg,50+value/2)==0) |
5003 | 59 return CONTROL_OK; |
60 return CONTROL_FALSE; | |
61 } | |
62 | |
4958 | 63 } |
64 return CONTROL_UNKNOWN; | |
65 } | |
66 | |
67 // init driver | |
68 static int init(sh_video_t *sh){ | |
30782
1c38d10731ab
Partially revert r30645, the final output format is determined by
reimar
parents:
30605
diff
changeset
|
69 unsigned int out_fmt=sh->codec->outfmt[0]; |
15344 | 70 |
71 /* Hack for VSSH codec: new dll can't decode old files | |
72 * In my samples old files have no extradata, so use that info | |
73 * to decide what dll should be used (here and in vd_vfw). | |
74 */ | |
75 if (!strcmp(sh->codec->dll, "vsshdsd.dll") && (sh->bih->biSize == 40)) | |
76 return 0; | |
77 | |
4958 | 78 if(!(sh->context=DS_VideoDecoder_Open(sh->codec->dll,&sh->codec->guid, sh->bih, 0, 0))){ |
79 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_MissingDLLcodec,sh->codec->dll); | |
12763
f34a7cf4265a
Console message corrected and moved to help_mp-en.h.
diego
parents:
8504
diff
changeset
|
80 mp_msg(MSGT_DECVIDEO,MSGL_HINT,MSGTR_DownloadCodecPackage); |
4958 | 81 return 0; |
82 } | |
30603
c5d8b7640b7d
Call mpcodecs_config_vo with the proper image format for dmo and dshow codecs.
reimar
parents:
30504
diff
changeset
|
83 if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,out_fmt)) return 0; |
30782
1c38d10731ab
Partially revert r30645, the final output format is determined by
reimar
parents:
30605
diff
changeset
|
84 // mpcodecs_config_vo can change the format |
1c38d10731ab
Partially revert r30645, the final output format is determined by
reimar
parents:
30605
diff
changeset
|
85 out_fmt=sh->codec->outfmt[sh->outfmtidx]; |
4958 | 86 switch(out_fmt){ |
87 case IMGFMT_YUY2: | |
88 case IMGFMT_UYVY: | |
89 DS_VideoDecoder_SetDestFmt(sh->context,16,out_fmt);break; // packed YUV | |
90 case IMGFMT_YV12: | |
91 case IMGFMT_I420: | |
92 case IMGFMT_IYUV: | |
93 DS_VideoDecoder_SetDestFmt(sh->context,12,out_fmt);break; // planar YUV | |
6525 | 94 case IMGFMT_YVU9: |
95 DS_VideoDecoder_SetDestFmt(sh->context,9,out_fmt);break; | |
4958 | 96 default: |
97 DS_VideoDecoder_SetDestFmt(sh->context,out_fmt&255,0); // RGB/BGR | |
98 } | |
5003 | 99 DS_SetAttr_DivX("Quality",divx_quality); |
4958 | 100 DS_VideoDecoder_StartInternal(sh->context); |
12763
f34a7cf4265a
Console message corrected and moved to help_mp-en.h.
diego
parents:
8504
diff
changeset
|
101 mp_msg(MSGT_DECVIDEO,MSGL_V,MSGTR_DShowInitOK); |
4958 | 102 return 1; |
103 } | |
104 | |
105 // uninit driver | |
106 static void uninit(sh_video_t *sh){ | |
107 DS_VideoDecoder_Destroy(sh->context); | |
108 } | |
109 | |
110 //mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h); | |
111 | |
112 // decode a frame | |
113 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ | |
114 mp_image_t* mpi; | |
115 if(len<=0) return NULL; // skipped frame | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
18765
diff
changeset
|
116 |
4958 | 117 if(flags&3){ |
118 // framedrop: | |
119 DS_VideoDecoder_DecodeInternal(sh->context, data, len, 0, 0); | |
120 return NULL; | |
121 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
18765
diff
changeset
|
122 |
30604
bc87504d1d6a
DShow and DMO decoders need MP_IMGFLAG_COMMON_PLANE
reimar
parents:
30603
diff
changeset
|
123 mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_COMMON_PLANE, |
4958 | 124 sh->disp_w, sh->disp_h); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
18765
diff
changeset
|
125 |
4958 | 126 if(!mpi){ // temporary! |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
15344
diff
changeset
|
127 mp_msg(MSGT_DECVIDEO,MSGL_WARN,MSGTR_MPCODECS_CouldntAllocateImageForCinepakCodec); |
4958 | 128 return NULL; |
129 } | |
130 | |
131 DS_VideoDecoder_DecodeInternal(sh->context, data, len, 0, mpi->planes[0]); | |
132 | |
133 return mpi; | |
134 } |