annotate libmpcodecs/ve_libdv.c @ 27404:778fac8c186f

Add separate variables for CFLAGS that are specific to internal libraries and only add them to CFLAGS when compiling objects from those libraries.
author diego
date Thu, 07 Aug 2008 21:46:06 +0000
parents ed8f90096c65
children 0f1b5b68af32
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
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15212
diff changeset
8 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15212
diff changeset
9 #include "mp_msg.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
10
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
11 #include "codec-cfg.h"
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 21660
diff changeset
12 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
13 #include "libmpdemux/demuxer.h"
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
14 #include "libmpdemux/stheader.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
15
22600
3c2b4a866c6a Add explicit location for headers from the stream/ directory.
diego
parents: 21660
diff changeset
16 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22600
diff changeset
17 #include "libmpdemux/muxer.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
18
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5577
diff changeset
19 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5577
diff changeset
20 #include "mp_image.h"
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
21 #include "vf.h"
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
22
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
23 #include <libdv/dv.h>
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
24
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
25 #ifndef DV_WIDTH
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
26 #define DV_WIDTH 720
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
27 #define DV_PAL_HEIGHT 576
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
28 #define DV_NTSC_HEIGHT 480
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
29 #endif
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
30
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
31 struct vf_priv_s {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 7557
diff changeset
32 muxer_stream_t* mux;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
33 dv_encoder_t* enc;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
34
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
35 };
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
36 #define mux_v (vf->priv->mux)
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
37
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 static int config(struct vf_instance_s* vf,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
41 int width, int height, int d_width, int d_height,
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
42 unsigned int flags, unsigned int outfmt){
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
43
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
44 if(width!=DV_WIDTH || (height!=DV_PAL_HEIGHT && height!=DV_NTSC_HEIGHT)){
11261
835822ce4bb1 -vop ---> -vf
diego
parents: 9014
diff changeset
45 mp_msg(MSGT_VFILTER,MSGL_ERR,"DV: only 720x480 (NTSC) and 720x576 (PAL) resolutions allowed! Try with -vf scale=720:480\n");
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
46 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
47
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
48 vf->priv->enc->isPAL=(height==DV_PAL_HEIGHT);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
49 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
50 vf->priv->enc->vlc_encode_passes=3;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
51 vf->priv->enc->static_qno=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
52 vf->priv->enc->force_dct=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
53
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
54 mux_v->bih->biWidth=width;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
55 mux_v->bih->biHeight=height;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
56 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
12061
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 11811
diff changeset
57 mux_v->aspect = (float)d_width/d_height;
5577
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){
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14878
diff changeset
68 if(fmt==IMGFMT_YUY2) return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14878
diff changeset
69 if(fmt==IMGFMT_RGB24) return VFCAP_CSP_SUPPORTED;
5577
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
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17487
diff changeset
73 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
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
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17487
diff changeset
79 muxer_write_chunk(mux_v, 480 * (vf->priv->enc->isPAL ? 300 : 250) , 0x10, pts, pts);
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;
14878
5723c4b2a2ea fixes for encoding of multiple files
henry
parents: 14549
diff changeset
87 vf->default_caps=VFCAP_CONSTANT;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
88 vf->control=control;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
89 vf->query_format=query_format;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
90 vf->put_image=put_image;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
91 vf->priv=malloc(sizeof(struct vf_priv_s));
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
92 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
93 vf->priv->mux=(muxer_stream_t*)args;
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
94
11811
30507afa1cf6 prevent the libdv decoder from adding "NTSC setup" on decode
attila
parents: 11261
diff changeset
95 vf->priv->enc=dv_encoder_new(0,1,1); // FIXME, parse some options!
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
96 if(!vf->priv->enc) return 0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
97
14549
acf3241be19b Initialized BITMAPINFOHEADER to 0 to avoid problems, esp. windows has problems
reimar
parents: 12061
diff changeset
98 mux_v->bih=calloc(1, sizeof(BITMAPINFOHEADER));
5577
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
99 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER);
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
100 mux_v->bih->biWidth=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
101 mux_v->bih->biHeight=0;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
102 mux_v->bih->biCompression=mmioFOURCC('d','v','s','d');
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
103 mux_v->bih->biPlanes=1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
104 mux_v->bih->biBitCount=24;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
105
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
106 return 1;
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
107 }
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
108
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
109 vf_info_t ve_info_libdv = {
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
110 "DV encoder using libdv",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
111 "libdv",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
112 "A'rpi",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
113 "for internal use by mencoder",
80eedd3ef6d3 RGB24/YUY2 -> DV encoding, using libdv
arpi
parents:
diff changeset
114 vf_open
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 //===========================================================================//