annotate libmpcodecs/ve_libdv.c @ 11007:48b7d7aa444d

configure altivec patch by Magnus Damm <damm@opensource.se> * CC is not checked for Altivec support (see above). The patch adds checks for FSF-style flags and Darwin-style flags. The check is performed regardless of the gcc version. * Disabling of Altivec. --disable-altivec is broken today if /proc/cpuinfo shows that your cpu supports altivec. The patch takes care of that. * "GCC & CPU optimization abilities" always show that it is optimizing for the cpu configure is running on, it should show the optimization that is enabled for gcc instead. Cosmetic change only, but confusing as it is today IMHO. * Runtime CPU-detection now enables altivec for powerpc. Now with the patch it should be possible to use --enable-altivec, --disable-altivec, --enable-runtime-cpudetection regardless of powerpc cpu type. The configure script handles altivec support in the following order: 1. Altivec is enabled by default if your cpu supports it. 2. --enable-runtime-cpudetection will enable altivec support. 3. If you have forced altivec on/off with --enable-altivec/--disable-altivec, then your selection will override the previous altivec configuration. 4. If altivec is enabled but the compiler doesn't support it, altivec gets turned off.
author attila
date Sat, 04 Oct 2003 23:06:04 +0000
parents c671e9adbe22
children 835822ce4bb1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
1 // requires libdv-0.9.5 !!!
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
2 // (v0.9.0 is too old and has no encoding functionality exported!)
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
3
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
4 #include <stdio.h>
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
5 #include <stdlib.h>
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
6 #include <string.h>
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
7
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
8 #include "../config.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
9 #include "../mp_msg.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
10
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
11 #ifdef HAVE_LIBDV095
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
12
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
13 #include "codec-cfg.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
14 #include "stream.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
15 #include "demuxer.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
16 #include "stheader.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
17
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7557
diff changeset
18 #include "muxer.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
19
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5577
diff changeset
20 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5577
diff changeset
21 #include "mp_image.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
22 #include "vf.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
23
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
24 #include <libdv/dv.h>
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
25
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
26 #ifndef DV_WIDTH
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
27 #define DV_WIDTH 720
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
28 #define DV_PAL_HEIGHT 576
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
29 #define DV_NTSC_HEIGHT 480
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
30 #endif
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
31
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
32 struct vf_priv_s {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7557
diff changeset
33 muxer_stream_t* mux;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
34 dv_encoder_t* enc;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
35
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
36 };
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
37 #define mux_v (vf->priv->mux)
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
38
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
39 //===========================================================================//
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
40
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
41 static int config(struct vf_instance_s* vf,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
42 int width, int height, int d_width, int d_height,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
43 unsigned int flags, unsigned int outfmt){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
44
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
45 if(width!=DV_WIDTH || (height!=DV_PAL_HEIGHT && height!=DV_NTSC_HEIGHT)){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
46 mp_msg(MSGT_VFILTER,MSGL_ERR,"DV: only 720x480 (NTSC) and 720x576 (PAL) resolutions allowed! try with -vop scale=720:480\n");
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
47 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
48
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
49 vf->priv->enc->isPAL=(height==DV_PAL_HEIGHT);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
50 vf->priv->enc->is16x9=(d_width/(float)d_height > 1.7); // 16:9=1.777777
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
51 vf->priv->enc->vlc_encode_passes=3;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
52 vf->priv->enc->static_qno=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
53 vf->priv->enc->force_dct=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
54
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
55 mux_v->bih->biWidth=width;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
56 mux_v->bih->biHeight=height;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
57 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
58
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
59 return 1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
60 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
61
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
62 static int control(struct vf_instance_s* vf, int request, void* data){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
63
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
64 return CONTROL_UNKNOWN;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
65 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
66
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
67 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
68 if(fmt==IMGFMT_YUY2) return 3;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
69 if(fmt==IMGFMT_RGB24) return 1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
70 return 0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
71 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
72
7368
a894e99c1e51 changing return type of put_image void->int
arpi
parents: 7127
diff changeset
73 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
74
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
75 dv_encode_full_frame(vf->priv->enc, mpi->planes,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
76 (mpi->flags&MP_IMGFLAG_YUV) ? e_dv_color_yuv : e_dv_color_rgb,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
77 mux_v->buffer);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
78
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8585
diff changeset
79 muxer_write_chunk(mux_v, 480 * (vf->priv->enc->isPAL ? 300 : 250) , 0x10);
7368
a894e99c1e51 changing return type of put_image void->int
arpi
parents: 7127
diff changeset
80 return 1;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
81 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
82
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
83 //===========================================================================//
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
84
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
85 static int vf_open(vf_instance_t *vf, char* args){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
86 vf->config=config;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
87 vf->control=control;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
88 vf->query_format=query_format;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
89 vf->put_image=put_image;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
90 vf->priv=malloc(sizeof(struct vf_priv_s));
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
91 memset(vf->priv,0,sizeof(struct vf_priv_s));
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7557
diff changeset
92 vf->priv->mux=(muxer_stream_t*)args;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
93
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
94 vf->priv->enc=dv_encoder_new(1,1,1); // FIXME, parse some options!
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
95 if(!vf->priv->enc) return 0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
96
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
97 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER));
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
98 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
99 mux_v->bih->biWidth=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
100 mux_v->bih->biHeight=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
101 mux_v->bih->biCompression=mmioFOURCC('d','v','s','d');
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
102 mux_v->bih->biPlanes=1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
103 mux_v->bih->biBitCount=24;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
104
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
105 return 1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
106 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
107
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
108 vf_info_t ve_info_libdv = {
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
109 "DV encoder using libdv",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
110 "libdv",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
111 "A'rpi",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
112 "for internal use by mencoder",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
113 vf_open
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
114 };
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
115
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
116 //===========================================================================//
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
117 #endif