Mercurial > mplayer.hg
annotate libmpcodecs/vd_libdv.c @ 31816:ab9824b6acc7
dvd: Improve seeking by chapters.
The current code seeks to the start of the chapter. From this position, it then
tries to figure out the starting cell. This is completely suboptimal and error
prone since the starting cell can be directly deduced from the chapter.
patch by Olivier Rolland, billl users.sourceforge net
author | diego |
---|---|
date | Sun, 01 Aug 2010 22:51:15 +0000 |
parents | b2829d4f2de4 |
children |
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 |
6927 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 #include <sys/types.h> | |
23 #include <unistd.h> | |
24 #include <math.h> | |
25 | |
26 #include "config.h" | |
27 | |
28 #include "img_format.h" | |
29 | |
30 #include <libdv/dv.h> | |
31 #include <libdv/dv_types.h> | |
32 | |
22599
4faee1254928
Add explicit location for headers from the stream/ directory.
diego
parents:
18771
diff
changeset
|
33 #include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
34 #include "libmpdemux/demuxer.h" |
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
35 #include "libmpdemux/stheader.h" |
6927 | 36 |
37 #include "vd_internal.h" | |
30553
b2829d4f2de4
Add header for init_global_rawdv_decoder() instead of forward declaring it.
diego
parents:
30504
diff
changeset
|
38 #include "vd_libdv.h" |
6927 | 39 |
30504
cc27da5d7286
Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents:
30421
diff
changeset
|
40 static const vd_info_t info = |
6927 | 41 { |
42 "Raw DV Video Decoder", | |
43 "libdv", | |
44 "Alexander Neundorf <neundorf@kde.org>", | |
45 "http://libdv.sf.net", | |
7191
1eadce15446c
-afm/-vfm help implemenetd, some cosmetics of ad/vd codec names/comments
arpi
parents:
7180
diff
changeset
|
46 "native codec" |
6927 | 47 }; |
48 | |
49 LIBVD_EXTERN(libdv) | |
50 | |
51 // to set/get/query special features/parameters | |
52 static int control(sh_video_t *sh,int cmd,void* arg,...){ | |
53 return CONTROL_UNKNOWN; | |
54 } | |
55 | |
56 static dv_decoder_t* global_rawdv_decoder=NULL; | |
57 | |
22886 | 58 dv_decoder_t* init_global_rawdv_decoder(void) |
6927 | 59 { |
60 if(!global_rawdv_decoder){ | |
61 global_rawdv_decoder=dv_decoder_new(TRUE,TRUE,FALSE); | |
62 global_rawdv_decoder->quality=DV_QUALITY_BEST; | |
63 global_rawdv_decoder->prev_frame_decoded = 0; | |
64 } | |
65 return global_rawdv_decoder; | |
66 } | |
67 | |
68 // init driver | |
69 static int init(sh_video_t *sh) | |
70 { | |
71 sh->context = (void *)init_global_rawdv_decoder(); | |
72 return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2); | |
73 } | |
74 | |
75 // uninit driver | |
76 static void uninit(sh_video_t *sh){ | |
77 } | |
78 | |
79 // decode a frame | |
80 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags) | |
81 { | |
82 mp_image_t* mpi; | |
83 dv_decoder_t *decoder=sh->context; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
22886
diff
changeset
|
84 |
6927 | 85 if(len<=0 || (flags&3)){ |
86 // fprintf(stderr,"decode() (rawdv) SKIPPED\n"); | |
87 return NULL; // skipped frame | |
88 } | |
89 | |
90 dv_parse_header(decoder, data); | |
91 | |
92 mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, sh->disp_w, sh->disp_h); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
22886
diff
changeset
|
93 |
6927 | 94 if(!mpi){ // temporary! |
95 fprintf(stderr,"couldn't allocate image for stderr codec\n"); | |
96 return NULL; | |
97 } | |
98 | |
99 dv_decode_full_frame(decoder, data, e_dv_color_yuv, mpi->planes, mpi->stride); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
22886
diff
changeset
|
100 |
6927 | 101 return mpi; |
102 } |