annotate libmpdemux/video.c @ 20658:ed20cbab07a4

Corrigendum 1 change chapter_id from v to s to allow negative chapter_id as required by the spec text change was unanimously accepted (rich, oded, myself) this change should not break any existing muxers or demuxers, with the exception of assumtations about (non)overlapping chapters
author michael
date Sat, 04 Nov 2006 22:01:51 +0000
parents f1655de446c4
children 3ec5917cdae2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
1 // read video frame
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
2
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2567
diff changeset
3 #include "config.h"
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2567
diff changeset
4
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
5 #include <stdio.h>
2775
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2567
diff changeset
6 #ifdef HAVE_MALLOC_H
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2567
diff changeset
7 #include <malloc.h>
8e3875816f6d added missing #include <malloc.h>
pl
parents: 2567
diff changeset
8 #endif
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
9 #include <stdlib.h>
3726
1acf2f1f9dc8 missing #include's
pl
parents: 3666
diff changeset
10 #include <string.h>
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
11 #include <unistd.h>
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
12
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
13 #include "mp_msg.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
14 #include "help_mp.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
15
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
16 #include "stream.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
17 #include "demuxer.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
18 #include "stheader.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
19 #include "parse_es.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
20 #include "mpeg_hdr.h"
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
21
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents: 6571
diff changeset
22 /* sub_cc (closed captions)*/
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16505
diff changeset
23 #include "sub_cc.h"
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents: 6571
diff changeset
24
17343
b07bb7ee7ce4 include the right avcodec.h, consistently with the rest of mplayer
nicodvb
parents: 17339
diff changeset
25 #ifdef USE_LIBAVCODEC_SO
b07bb7ee7ce4 include the right avcodec.h, consistently with the rest of mplayer
nicodvb
parents: 17339
diff changeset
26 #include <ffmpeg/avcodec.h>
b07bb7ee7ce4 include the right avcodec.h, consistently with the rest of mplayer
nicodvb
parents: 17339
diff changeset
27 #elif defined(USE_LIBAVCODEC)
b07bb7ee7ce4 include the right avcodec.h, consistently with the rest of mplayer
nicodvb
parents: 17339
diff changeset
28 #include "libavcodec/avcodec.h"
17226
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
29 #else
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
30 #define FF_INPUT_BUFFER_PADDING_SIZE 8
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
31 #endif
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
32
4774
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
33 /* biCompression constant */
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
34 #define BI_RGB 0L
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
35
18219
2ea5d88eacd4 Rename some forgotten #ifdef STREAMING_LIVE_DOT_COM to STREAMING_LIVE555.
diego
parents: 17960
diff changeset
36 #ifdef STREAMING_LIVE555
9457
ea1c0a4520bf Repairing breakage to RTP streaming. Patch by Ross Finlayson <finlayson@live.com>
bertrand
parents: 9221
diff changeset
37 #include "demux_rtp.h"
ea1c0a4520bf Repairing breakage to RTP streaming. Patch by Ross Finlayson <finlayson@live.com>
bertrand
parents: 9221
diff changeset
38 #endif
ea1c0a4520bf Repairing breakage to RTP streaming. Patch by Ross Finlayson <finlayson@live.com>
bertrand
parents: 9221
diff changeset
39
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
40 static mp_mpeg_header_t picture;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
41
8967
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
42 static int telecine=0;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
43 static float telecine_cnt=-2.5;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
44
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
45 int video_read_properties(sh_video_t *sh_video){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
46 demux_stream_t *d_video=sh_video->ds;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
47
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
48 enum {
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
49 VIDEO_MPEG12,
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
50 VIDEO_MPEG4,
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
51 VIDEO_H264,
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
52 VIDEO_OTHER
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
53 } video_codec;
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
54
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
55 if((d_video->demuxer->file_format == DEMUXER_TYPE_PVA) ||
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
56 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES) ||
16310
fb95057e370e support MPEG in GXF container with extension-based detection.
reimar
parents: 16184
diff changeset
57 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_GXF) ||
16314
6720cdd99559 Fix mpeg-pes playback
rtognimp
parents: 16310
diff changeset
58 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PES) ||
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
59 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS && ((! sh_video->format) || (sh_video->format==0x10000001) || (sh_video->format==0x10000002))) ||
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
60 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TY) ||
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
61 (d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS && ((sh_video->format==0x10000001) || (sh_video->format==0x10000002)))
18219
2ea5d88eacd4 Rename some forgotten #ifdef STREAMING_LIVE_DOT_COM to STREAMING_LIVE555.
diego
parents: 17960
diff changeset
62 #ifdef STREAMING_LIVE555
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
63 || ((d_video->demuxer->file_format == DEMUXER_TYPE_RTP) && demux_is_mpeg_rtp_stream(d_video->demuxer))
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
64 #endif
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
65 )
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
66 video_codec = VIDEO_MPEG12;
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
67 else if((d_video->demuxer->file_format == DEMUXER_TYPE_MPEG4_ES) ||
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
68 ((d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS) && (sh_video->format==0x10000004)) ||
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
69 ((d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS) && (sh_video->format==0x10000004))
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
70 )
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
71 video_codec = VIDEO_MPEG4;
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
72 else if((d_video->demuxer->file_format == DEMUXER_TYPE_H264_ES) ||
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
73 ((d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS) && (sh_video->format==0x10000005)) ||
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
74 ((d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS) && (sh_video->format==0x10000005))
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
75 )
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
76 video_codec = VIDEO_H264;
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
77 else
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
78 video_codec = VIDEO_OTHER;
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
79
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
80 // Determine image properties:
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
81 switch(video_codec){
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
82 case VIDEO_OTHER: {
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
83 if((d_video->demuxer->file_format == DEMUXER_TYPE_ASF) || (d_video->demuxer->file_format == DEMUXER_TYPE_AVI)) {
4774
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
84 // display info:
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
85
5898
31202ff6fb3d ugly workaround disabled
arpi
parents: 5573
diff changeset
86 #if 0
4774
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
87 if(sh_video->bih->biCompression == BI_RGB &&
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
88 (sh_video->video.fccHandler == mmioFOURCC('D', 'I', 'B', ' ') ||
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
89 sh_video->video.fccHandler == mmioFOURCC('R', 'G', 'B', ' ') ||
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
90 sh_video->video.fccHandler == mmioFOURCC('R', 'A', 'W', ' ') ||
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
91 sh_video->video.fccHandler == 0)) {
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
92 sh_video->format = mmioFOURCC(0, 'R', 'G', 'B') | sh_video->bih->biBitCount;
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
93 }
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
94 else
5898
31202ff6fb3d ugly workaround disabled
arpi
parents: 5573
diff changeset
95 #endif
4774
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
96 sh_video->format=sh_video->bih->biCompression;
fc2f76964606 Patch: Improved raw encoding support in mencoder by Fredrik Kuivinen
atmos4
parents: 4705
diff changeset
97
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
98 sh_video->disp_w=sh_video->bih->biWidth;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
99 sh_video->disp_h=abs(sh_video->bih->biHeight);
3980
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
100
17339
ba7af0bb3e96 disabled hack to read the properties of mpeg1/2 video in avi and asf: it's totally useless and leads mplayer to crash
nicodvb
parents: 17277
diff changeset
101 #if 0
3980
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
102 /* hack to support decoding of mpeg1 chunks in AVI's with libmpeg2 -- 2002 alex */
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
103 if ((sh_video->format == 0x10000001) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
104 (sh_video->format == 0x10000002) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
105 (sh_video->format == mmioFOURCC('m','p','g','1')) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
106 (sh_video->format == mmioFOURCC('M','P','G','1')) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
107 (sh_video->format == mmioFOURCC('m','p','g','2')) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
108 (sh_video->format == mmioFOURCC('M','P','G','2')) ||
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
109 (sh_video->format == mmioFOURCC('m','p','e','g')) ||
7302
7d32189dbae4 typo (checking for mpeg twice, instead of mpeg & MPEG)
michael
parents: 7208
diff changeset
110 (sh_video->format == mmioFOURCC('M','P','E','G')))
3980
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
111 {
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
112 int saved_pos, saved_type;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
113
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
114 /* demuxer pos saving is required for libavcodec mpeg decoder as it's
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
115 reading the mpeg header self! */
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
116
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
117 saved_pos = d_video->buffer_pos;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
118 saved_type = d_video->demuxer->file_format;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
119
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
120 d_video->demuxer->file_format = DEMUXER_TYPE_MPEG_ES;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
121 video_read_properties(sh_video);
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
122 d_video->demuxer->file_format = saved_type;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
123 d_video->buffer_pos = saved_pos;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
124 // goto mpeg_header_parser;
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
125 }
cdd55ab40363 libmpeg2 is now able to decode framecopied (with mencoder) mpeg files
alex
parents: 3726
diff changeset
126 #endif
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
127 }
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
128 break;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
129 }
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
130 case VIDEO_MPEG4: {
14477
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
131 int pos = 0, vop_cnt=0, units[3];
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
132 videobuf_len=0; videobuf_code_len=0;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
133 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for Video Object Start code... ");fflush(stdout);
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
134 while(1){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
135 int i=sync_video_packet(d_video);
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
136 if(i<=0x11F) break; // found it!
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
137 if(!i || !skip_video_packet(d_video)){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
138 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
139 return 0;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
140 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
141 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
142 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n");
17226
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
143 if(!videobuffer) {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
144 videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
145 if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
146 else {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
147 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
148 return 0;
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
149 }
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
150 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
151 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for Video Object Layer Start code... ");fflush(stdout);
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
152 while(1){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
153 int i=sync_video_packet(d_video);
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
154 mp_msg(MSGT_DECVIDEO,MSGL_V,"M4V: 0x%X\n",i);
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
155 if(i>=0x120 && i<=0x12F) break; // found it!
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
156 if(!i || !read_video_packet(d_video)){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
157 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
158 return 0;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
159 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
160 }
14477
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
161 pos = videobuf_len+4;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
162 if(!read_video_packet(d_video)){
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
163 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Can't read Video Object Layer Header\n");
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
164 return 0;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
165 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
166 mp4_header_process_vol(&picture, &(videobuffer[pos]));
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
167 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK! FPS SEEMS TO BE %.3f\nSearching for Video Object Plane Start code... ", sh_video->fps);fflush(stdout);
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
168 mp4_init:
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
169 while(1){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
170 int i=sync_video_packet(d_video);
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
171 if(i==0x1B6) break; // found it!
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
172 if(!i || !read_video_packet(d_video)){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
173 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
174 return 0;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
175 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
176 }
14477
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
177 pos = videobuf_len+4;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
178 if(!read_video_packet(d_video)){
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
179 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Can't read Video Object Plane Header\n");
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
180 return 0;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
181 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
182 mp4_header_process_vop(&picture, &(videobuffer[pos]));
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
183 units[vop_cnt] = picture.timeinc_unit;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
184 vop_cnt++;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
185 //mp_msg(MSGT_DECVIDEO,MSGL_V, "TYPE: %d, unit: %d\n", picture.picture_type, picture.timeinc_unit);
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
186 if(!picture.fps) {
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
187 int i, mn, md, mx, diff;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
188 if(vop_cnt < 3)
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
189 goto mp4_init;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
190
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
191 i=0;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
192 mn = mx = units[0];
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
193 for(i=0; i<3; i++) {
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
194 if(units[i] < mn)
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
195 mn = units[i];
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
196 if(units[i] > mx)
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
197 mx = units[i];
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
198 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
199 md = mn;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
200 for(i=0; i<3; i++) {
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
201 if((units[i] > mn) && (units[i] < mx))
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
202 md = units[i];
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
203 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
204 mp_msg(MSGT_DECVIDEO,MSGL_V, "MIN: %d, mid: %d, max: %d\n", mn, md, mx);
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
205 if(mx - md > md - mn)
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
206 diff = md - mn;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
207 else
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
208 diff = mx - md;
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
209 if(diff > 0){
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
210 picture.fps = ((float)picture.timeinc_resolution) / diff;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
211 mp_msg(MSGT_DECVIDEO,MSGL_V, "FPS seems to be: %f, resolution: %d, delta_units: %d\n", picture.fps, picture.timeinc_resolution, diff);
14477
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
212 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
213 }
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
214 if(picture.fps) {
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
215 sh_video->fps=picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
216 sh_video->frametime=1.0/picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
217 mp_msg(MSGT_DECVIDEO,MSGL_INFO, "FPS seems to be: %f\n", picture.fps);
14477
92553e3c8f01 automatic fps calculation for mpeg4 in raw stream/mpeg-ts
nicodvb
parents: 14034
diff changeset
218 }
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
219 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n");
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
220 sh_video->format=0x10000004;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
221 break;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
222 }
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
223 case VIDEO_H264: {
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
224 int pos = 0;
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
225 videobuf_len=0; videobuf_code_len=0;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
226 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for sequence parameter set... ");fflush(stdout);
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
227 while(1){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
228 int i=sync_video_packet(d_video);
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
229 if((i&~0x60) == 0x107 && i != 0x107) break; // found it!
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
230 if(!i || !skip_video_packet(d_video)){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
231 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
232 return 0;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
233 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
234 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
235 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n");
17226
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
236 if(!videobuffer) {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
237 videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
238 if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
239 else {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
240 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
241 return 0;
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
242 }
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
243 }
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
244 pos = videobuf_len+4;
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
245 if(!read_video_packet(d_video)){
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
246 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Can't read sequence parameter set\n");
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
247 return 0;
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
248 }
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
249 h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos);
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
250 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for picture parameter set... ");fflush(stdout);
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
251 while(1){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
252 int i=sync_video_packet(d_video);
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
253 mp_msg(MSGT_DECVIDEO,MSGL_V,"H264: 0x%X\n",i);
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
254 if((i&~0x60) == 0x108 && i != 0x108) break; // found it!
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
255 if(!i || !read_video_packet(d_video)){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
256 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
257 return 0;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
258 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
259 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
260 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\nSearching for Slice... ");fflush(stdout);
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
261 while(1){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
262 int i=sync_video_packet(d_video);
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
263 if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; // found it!
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
264 if(!i || !read_video_packet(d_video)){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
265 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
266 return 0;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
267 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
268 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
269 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n");
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
270 sh_video->format=0x10000005;
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
271 if(picture.fps) {
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
272 sh_video->fps=picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
273 sh_video->frametime=1.0/picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
274 mp_msg(MSGT_DECVIDEO,MSGL_INFO, "FPS seems to be: %f\n", picture.fps);
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
275 }
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
276 break;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
277 }
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
278 case VIDEO_MPEG12: {
17277
c568f01ef9f9 search next sequence_header untile a valid one is found
nicodvb
parents: 17226
diff changeset
279 mpeg_header_parser:
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
280 // Find sequence_header first:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
281 videobuf_len=0; videobuf_code_len=0;
8967
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
282 telecine=0; telecine_cnt=-2.5;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
283 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for sequence header... ");fflush(stdout);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
284 while(1){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
285 int i=sync_video_packet(d_video);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
286 if(i==0x1B3) break; // found it!
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
287 if(!i || !skip_video_packet(d_video)){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17343
diff changeset
288 if( mp_msg_test(MSGT_DECVIDEO,MSGL_V) ) mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n");
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
289 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_MpegNoSequHdr);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
290 return 0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
291 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
292 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
293 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n");
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
294 // sh_video=d_video->sh;sh_video->ds=d_video;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
295 // mpeg2_init();
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
296 // ========= Read & process sequence header & extension ============
17226
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
297 if(!videobuffer) {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
298 videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
299 if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
300 else {
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
301 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail);
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
302 return 0;
255b14c0bc36 malloc padding to avoid access beyond allocated memory
henry
parents: 17012
diff changeset
303 }
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
304 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
305
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
306 if(!read_video_packet(d_video)){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
307 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_CannotReadMpegSequHdr);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
308 return 0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
309 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
310 if(mp_header_process_sequence_header (&picture, &videobuffer[4])) {
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
311 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_BadMpegSequHdr);
17277
c568f01ef9f9 search next sequence_header untile a valid one is found
nicodvb
parents: 17226
diff changeset
312 goto mpeg_header_parser;
c568f01ef9f9 search next sequence_header untile a valid one is found
nicodvb
parents: 17226
diff changeset
313 //return 0;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
314 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
315 if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext.
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
316 // videobuf_len=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
317 int pos=videobuf_len;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
318 if(!read_video_packet(d_video)){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
319 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_CannotReadMpegSequHdrEx);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
320 return 0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
321 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
322 if(mp_header_process_extension (&picture, &videobuffer[pos+4])) {
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
323 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_BadMpegSequHdrEx);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
324 return 0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
325 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
326 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
327
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
328 // printf("picture.fps=%d\n",picture.fps);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
329 // display info:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
330 sh_video->format=picture.mpeg1?0x10000001:0x10000002; // mpeg video
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
331 sh_video->fps=picture.fps;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
332 if(!sh_video->fps){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
333 // if(!force_fps){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
334 // fprintf(stderr,"FPS not specified (or invalid) in the header! Use the -fps option!\n");
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
335 // return 0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
336 // }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
337 sh_video->frametime=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
338 } else {
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
339 sh_video->frametime=1.0/picture.fps;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
340 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
341 sh_video->disp_w=picture.display_picture_width;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
342 sh_video->disp_h=picture.display_picture_height;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
343 // bitrate:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
344 if(picture.bitrate!=0x3FFFF) // unspecified/VBR ?
9606
0197c1e933fe This patch corrects the calculation of the MPEG bitrate from the
arpi
parents: 9457
diff changeset
345 sh_video->i_bps=picture.bitrate * 400 / 8;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
346 // info:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
347 mp_dbg(MSGT_DECVIDEO,MSGL_DBG2,"mpeg bitrate: %d (%X)\n",picture.bitrate,picture.bitrate);
10709
9ab19ded1b39 printing fps with 3 dec digit instead of 2
arpi
parents: 10687
diff changeset
348 mp_msg(MSGT_DECVIDEO,MSGL_INFO,"VIDEO: %s %dx%d (aspect %d) %5.3f fps %5.1f kbps (%4.1f kbyte/s)\n",
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
349 picture.mpeg1?"MPEG1":"MPEG2",
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
350 sh_video->disp_w,sh_video->disp_h,
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
351 picture.aspect_ratio_information,
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
352 sh_video->fps,
9606
0197c1e933fe This patch corrects the calculation of the MPEG bitrate from the
arpi
parents: 9457
diff changeset
353 sh_video->i_bps * 8 / 1000.0,
0197c1e933fe This patch corrects the calculation of the MPEG bitrate from the
arpi
parents: 9457
diff changeset
354 sh_video->i_bps / 1000.0 );
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
355 break;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
356 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
357 } // switch(file_format)
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
358
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
359 return 1;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
360 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
361
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
362 void ty_processuserdata( unsigned char* buf, int len );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
363
4074
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
364 static void process_userdata(unsigned char* buf,int len){
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
365 int i;
6791
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
366 /* if the user data starts with "CC", assume it is a CC info packet */
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
367 if(len>2 && buf[0]=='C' && buf[1]=='C'){
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
368 // mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"video.c: process_userdata() detected Closed Captions!\n");
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents: 6571
diff changeset
369 if(subcc_enabled) subcc_process_data(buf+2,len-2);
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents: 6571
diff changeset
370 }
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
371 if( len > 2 && buf[ 0 ] == 'T' && buf[ 1 ] == 'Y' )
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
372 {
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
373 ty_processuserdata( buf + 2, len - 2 );
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
374 return;
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
375 }
7208
79fb883d9769 user-data moved one -v up
arpi
parents: 6910
diff changeset
376 if(verbose<2) return;
4074
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
377 printf( "user_data: len=%3d %02X %02X %02X %02X '",
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
378 len, buf[0], buf[1], buf[2], buf[3]);
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
379 for(i=0;i<len;i++)
6791
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
380 // if(buf[i]>=32 && buf[i]<127) putchar(buf[i]);
a3b2f80f3a26 codmetics :)
arpi
parents: 6784
diff changeset
381 if(buf[i]&0x60) putchar(buf[i]&0x7F);
4074
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
382 printf("'\n");
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
383 }
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
384
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
385 int video_read_frame(sh_video_t* sh_video,float* frame_time_ptr,unsigned char** start,int force_fps){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
386 demux_stream_t *d_video=sh_video->ds;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
387 demuxer_t *demuxer=d_video->demuxer;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
388 float frame_time=1;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
389 float pts1=d_video->pts;
8965
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
390 float pts=0;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
391 int picture_coding_type=0;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
392 // unsigned char* start=NULL;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
393 int in_size=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
394
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
395 *start=NULL;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
396
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
397 if(demuxer->file_format==DEMUXER_TYPE_MPEG_ES ||
16310
fb95057e370e support MPEG in GXF container with extension-based detection.
reimar
parents: 16184
diff changeset
398 demuxer->file_format==DEMUXER_TYPE_MPEG_GXF ||
16314
6720cdd99559 Fix mpeg-pes playback
rtognimp
parents: 16310
diff changeset
399 demuxer->file_format==DEMUXER_TYPE_MPEG_PES ||
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
400 (demuxer->file_format==DEMUXER_TYPE_MPEG_PS && ((! sh_video->format) || (sh_video->format==0x10000001) || (sh_video->format==0x10000002)))
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
401 || demuxer->file_format==DEMUXER_TYPE_PVA ||
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
402 ((demuxer->file_format==DEMUXER_TYPE_MPEG_TS) && ((sh_video->format==0x10000001) || (sh_video->format==0x10000002)))
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
403 || demuxer->file_format==DEMUXER_TYPE_MPEG_TY
18219
2ea5d88eacd4 Rename some forgotten #ifdef STREAMING_LIVE_DOT_COM to STREAMING_LIVE555.
diego
parents: 17960
diff changeset
404 #ifdef STREAMING_LIVE555
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6791
diff changeset
405 || (demuxer->file_format==DEMUXER_TYPE_RTP && demux_is_mpeg_rtp_stream(demuxer))
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6791
diff changeset
406 #endif
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6791
diff changeset
407 ){
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
408 int in_frame=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
409 //float newfps;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
410 //videobuf_len=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
411 while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
412 int i=sync_video_packet(d_video);
4074
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
413 //void* buffer=&videobuffer[videobuf_len+4];
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
414 int start=videobuf_len+4;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
415 if(in_frame){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
416 if(i<0x101 || i>=0x1B0){ // not slice code -> end of frame
7465
c541bb409a27 we don't need the 0x1ff hack any more!
arpi
parents: 7364
diff changeset
417 #if 0
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
418 // send END OF FRAME code:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
419 videobuffer[videobuf_len+0]=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
420 videobuffer[videobuf_len+1]=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
421 videobuffer[videobuf_len+2]=1;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
422 videobuffer[videobuf_len+3]=0xFF;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
423 videobuf_len+=4;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
424 #endif
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
425 if(!i) return -1; // EOF
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
426 break;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
427 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
428 } else {
8965
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
429 if(i==0x100){
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
430 pts=d_video->pts;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
431 d_video->pts=0;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
432 }
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
433 //if(i==0x100) in_frame=1; // picture startcode
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
434 if(i>=0x101 && i<0x1B0) in_frame=1; // picture startcode
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
435 else if(!i) return -1; // EOF
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
436 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
437 //if(grab_frames==2 && (i==0x1B3 || i==0x1B8)) grab_frames=1;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
438 if(!read_video_packet(d_video)) return -1; // EOF
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
439 //printf("read packet 0x%X, len=%d\n",i,videobuf_len);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
440 // process headers:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
441 switch(i){
4074
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
442 case 0x1B3: mp_header_process_sequence_header (&picture, &videobuffer[start]);break;
aca490499e1f added mpeg userdata dump
arpi
parents: 3980
diff changeset
443 case 0x1B5: mp_header_process_extension (&picture, &videobuffer[start]);break;
6784
b38e38b6f88f DVD Closed Captioning support, patch by Matteo Giani <matgiani@ctonet.it>, small changes by me.
atmos4
parents: 6571
diff changeset
444 case 0x1B2: process_userdata (&videobuffer[start], videobuf_len-start);break;
8965
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
445 case 0x100: picture_coding_type=(videobuffer[start+1] >> 3) & 7;break;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
446 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
447 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
448
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
449 // if(videobuf_len>max_framesize) max_framesize=videobuf_len; // debug
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
450 //printf("--- SEND %d bytes\n",videobuf_len);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
451 // if(grab_frames==1){
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
452 // FILE *f=fopen("grab.mpg","ab");
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
453 // fwrite(videobuffer,videobuf_len-4,1,f);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
454 // fclose(f);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
455 // }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
456
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
457 *start=videobuffer; in_size=videobuf_len;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
458 //blit_frame=decode_video(video_out,sh_video,videobuffer,videobuf_len,drop_frame);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
459
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
460 #if 1
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
461 // get mpeg fps:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
462 //newfps=frameratecode2framerate[picture->frame_rate_code]*0.0001f;
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
463 if(sh_video->fps!=picture.fps) if(!force_fps && !telecine){
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
464 mp_msg(MSGT_CPLAYER,MSGL_WARN,"Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,picture.fps,sh_video->fps-picture.fps,picture.frame_rate_code);
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
465 sh_video->fps=picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
466 sh_video->frametime=1.0/picture.fps;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
467 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
468 #endif
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
469
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
470 // fix mpeg2 frametime:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
471 frame_time=(picture.display_time)*0.01f;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
472 picture.display_time=100;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
473 videobuf_len=0;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
474
8967
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
475 telecine_cnt*=0.9; // drift out error
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
476 telecine_cnt+=frame_time-5.0/4.0;
9221
arpi
parents: 9129
diff changeset
477 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"\r telecine = %3.1f %5.3f \n",frame_time,telecine_cnt);
8967
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
478
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
479 if(telecine){
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
480 frame_time=1;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
481 if(telecine_cnt<-1.5 || telecine_cnt>1.5){
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
482 mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_LeaveTelecineMode);
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
483 telecine=0;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
484 }
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
485 } else
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
486 if(telecine_cnt>-0.5 && telecine_cnt<0.5 && !force_fps){
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
487 sh_video->fps=sh_video->fps*4/5;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
488 sh_video->frametime=sh_video->frametime*5/4;
11385
cd0088334aea The message parameter was removed.
diego
parents: 10709
diff changeset
489 mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_EnterTelecineMode);
8967
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
490 telecine=1;
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
491 }
95f0a0d006c5 telecine detection
arpi
parents: 8965
diff changeset
492
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
493 } else if((demuxer->file_format==DEMUXER_TYPE_MPEG4_ES) || ((demuxer->file_format==DEMUXER_TYPE_MPEG_TS) && (sh_video->format==0x10000004)) ||
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
494 ((demuxer->file_format==DEMUXER_TYPE_MPEG_PS) && (sh_video->format==0x10000004))
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
495 ){
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
496 //
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
497 while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
498 int i=sync_video_packet(d_video);
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
499 if(!i) return -1;
9069
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
500 if(!read_video_packet(d_video)) return -1; // EOF
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
501 if(i==0x1B6) break;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
502 }
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
503 *start=videobuffer; in_size=videobuf_len;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
504 videobuf_len=0;
0d2b25a821c9 raw mpeg4-es support (you need to set -fps manually!)
arpi
parents: 8967
diff changeset
505
14923
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
506 } else if(demuxer->file_format==DEMUXER_TYPE_H264_ES || ((demuxer->file_format==DEMUXER_TYPE_MPEG_TS) && (sh_video->format==0x10000005)) ||
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
507 ((demuxer->file_format==DEMUXER_TYPE_MPEG_PS) && (sh_video->format==0x10000005))
658fc109eefc added support for other codecs (mpeg4/h264/aac) in mpeg-ps parsing the PSM
nicodvb
parents: 14798
diff changeset
508 ){
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
509 //
16505
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
510 int in_picture = 0;
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
511 while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
512 int i=sync_video_packet(d_video);
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
513 int pos = videobuf_len+4;
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
514 if(!i) return -1;
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
515 if(!read_video_packet(d_video)) return -1; // EOF
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
516 if((i&~0x60) == 0x107 && i != 0x107) {
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
517 h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos);
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
518 if(picture.fps > 0) {
16184
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
519 sh_video->fps=picture.fps;
04dd5945fab8 100l to whoever wrote this crap using 1/10000 units. it caused framerates to get trashed from 30000/1001 to 2997/100, etc.!
rfelker
parents: 14923
diff changeset
520 sh_video->frametime=1.0/picture.fps;
14798
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
521 }
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
522 i=sync_video_packet(d_video);
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
523 if(!i) return -1;
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
524 if(!read_video_packet(d_video)) return -1; // EOF
0bd50330e688 framerate autodetection for H264 in raw/ts streams
nicodvb
parents: 14477
diff changeset
525 }
16505
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
526
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
527 // here starts the access unit end detection code
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
528 // see the mail on MPlayer-dev-eng for details:
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
529 // Date: Sat, 17 Sep 2005 11:24:06 +0200
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
530 // Subject: Re: [MPlayer-dev-eng] [RFC] h264 ES parser problems
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
531 // Message-ID: <20050917092406.GA7699@rz.uni-karlsruhe.de>
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
532 if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105)
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
533 // found VCL NAL with slice header i.e. start of current primary coded
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
534 // picture, so start scanning for the end now
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
535 in_picture = 1;
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
536 if (in_picture) {
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
537 i = sync_video_packet(d_video) & ~0x60; // code of next packet
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
538 if(i == 0x106 || i == 0x109) break; // SEI or access unit delim.
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
539 if(i == 0x101 || i == 0x102 || i == 0x105) {
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
540 // assuming arbitrary slice ordering is not allowed, the
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
541 // first_mb_in_slice (golomb encoded) value should be 0 then
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
542 // for the first VCL NAL in a picture
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
543 if (demux_peekc(d_video) & 0x80)
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
544 break;
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
545 }
cb6599e433d7 Fix H264 packetizer. Might not work with arbitrary slice order.
reimar
parents: 16314
diff changeset
546 }
9824
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
547 }
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
548 *start=videobuffer; in_size=videobuf_len;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
549 videobuf_len=0;
39b68c2664ec H264-ES demuxer
michael
parents: 9693
diff changeset
550
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
551 } else {
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
552 // frame-based file formats: (AVI,ASF,MOV)
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
553 in_size=ds_get_packet(d_video,start);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
554 if(in_size<0) return -1; // EOF
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
555 // if(in_size>max_framesize) max_framesize=in_size;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
556 // blit_frame=decode_video(video_out,sh_video,start,in_size,drop_frame);
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
557 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
558
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
559 // vdecode_time=video_time_usage-vdecode_time;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
560
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
561 //------------------------ frame decoded. --------------------
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
562
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
563 // Increase video timers:
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
564 sh_video->num_frames+=frame_time;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
565 ++sh_video->num_frames_decoded;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
566
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
567 frame_time*=sh_video->frametime;
5573
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
568
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
569 // override frame_time for variable/unknown FPS formats:
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
570 if(!force_fps) switch(demuxer->file_format){
9693
1d598bf65571 10l, found by Jan Kritzner <kritzner@informatik.rwth-aachen.de>
alex
parents: 9610
diff changeset
571 case DEMUXER_TYPE_GIF:
10434
dd64e1fe919d Better support for RealVideo/RealAudio in Matroska. Includes the timestamp fixes from demux_real.c. Seeking is working. Added Matroska to the formats with variable FPS in video.c.
mosu
parents: 10263
diff changeset
572 case DEMUXER_TYPE_MATROSKA:
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
573 if(d_video->pts>0 && pts1>0 && d_video->pts>pts1)
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
574 frame_time=d_video->pts-pts1;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
575 break;
6571
fdf45e8420d0 Paul Ortyl's patch
alex
parents: 6423
diff changeset
576 #ifdef USE_TV
5573
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
577 case DEMUXER_TYPE_TV:
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
578 #endif
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
579 case DEMUXER_TYPE_MOV:
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
580 case DEMUXER_TYPE_FILM:
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
581 case DEMUXER_TYPE_VIVO:
19802
f1655de446c4 Support for variable fps OGM files, blessed by Moritz.
diego
parents: 19695
diff changeset
582 case DEMUXER_TYPE_OGG:
5573
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
583 case DEMUXER_TYPE_ASF: {
5930
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5898
diff changeset
584 float next_pts = ds_get_next_pts(d_video);
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5898
diff changeset
585 float d= next_pts > 0 ? next_pts - d_video->pts : d_video->pts-pts1;
6371
622d57683187 Fix asf stream wich were giving invalid frame times because the frame time
albeu
parents: 5930
diff changeset
586 if(d>=0){
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
587 if(d>0){
19082
a2f20562aac3 Remove support for obsolete and non-free divx4/odivx libraries.
diego
parents: 18942
diff changeset
588 if((int)sh_video->fps==1000)
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
589 mp_msg(MSGT_CPLAYER,MSGL_V,"\navg. framerate: %d fps \n",(int)(1.0f/d));
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
590 sh_video->frametime=d; // 1ms
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
591 sh_video->fps=1.0f/d;
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
592 }
5930
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5898
diff changeset
593 frame_time = d;
68cac7ecaf05 Fix frame_time for variable fps movies as it was the last frame duration.
albeu
parents: 5898
diff changeset
594 } else {
6423
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
595 mp_msg(MSGT_CPLAYER,MSGL_WARN,"\nInvalid frame duration value (%5.3f/%5.3f => %5.3f). Defaulting to %5.3f sec.\n",d_video->pts,next_pts,d,frame_time);
13cf65db9ebc fixed playback speed and a-v sync issues
arpi
parents: 6371
diff changeset
596 // frame_time = 1/25.0;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
597 }
5573
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
598 }
9693
1d598bf65571 10l, found by Jan Kritzner <kritzner@informatik.rwth-aachen.de>
alex
parents: 9610
diff changeset
599 break;
12170
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
600 case DEMUXER_TYPE_LAVF:
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
601 if((int)sh_video->fps==1000 || (int)sh_video->fps<=1){
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
602 float next_pts = ds_get_next_pts(d_video);
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
603 float d= next_pts > 0 ? next_pts - d_video->pts : d_video->pts-pts1;
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
604 if(d>=0){
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
605 frame_time = d;
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
606 }
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
607 }
8db1b587d16a lavf ASF support
michael
parents: 11833
diff changeset
608 break;
18942
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
609 case DEMUXER_TYPE_REAL:
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
610 {
19695
782364fc00c4 Use better resolution for pts computation.
rtogni
parents: 19655
diff changeset
611 double next_pts = ds_get_next_pts(d_video);
18942
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
612 float d = next_pts > 0 ? next_pts - d_video->pts : d_video->pts - pts1;
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
613
19655
bddd0b58efb6 Workaround for live Real streams starting with nonzero pts
rtogni
parents: 19082
diff changeset
614 frame_time = (d >= 0 && pts1 > 0) ? d : 0.001;
18942
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
615 }
cf05a9897d1b Revert r18878, always sync rm files using only pts (ignore framerate)
rtogni
parents: 18873
diff changeset
616 break;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
617 }
5573
b8a8ab95c73d generalized the cut'n'pasted variable fps code, #ifdef-ed TV until v4l is updated
arpi
parents: 5572
diff changeset
618
4705
f6d45a3f005c mpeg-es osd fix - patch by ??? (lost mail:((()
arpi
parents: 4336
diff changeset
619 if(demuxer->file_format==DEMUXER_TYPE_MPEG_PS ||
16314
6720cdd99559 Fix mpeg-pes playback
rtognimp
parents: 16310
diff changeset
620 demuxer->file_format==DEMUXER_TYPE_MPEG_PES ||
14034
7ac60a1c576e merged DEMUXER_TYPE_MPEG4_ES in the ordinary TS; added support for H264 in TS
nicodvb
parents: 12170
diff changeset
621 ((demuxer->file_format==DEMUXER_TYPE_MPEG_TS) && ((sh_video->format==0x10000001) || (sh_video->format==0x10000002))) ||
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
622 demuxer->file_format==DEMUXER_TYPE_MPEG_ES ||
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9824
diff changeset
623 demuxer->file_format==DEMUXER_TYPE_MPEG_TY){
8965
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
624
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
625 // if(pts>0.0001) printf("\r!!! pts: %5.3f [%d] (%5.3f) \n",pts,picture_coding_type,i_pts);
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
626
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
627 sh_video->pts+=frame_time;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
628 if(picture_coding_type<=2 && sh_video->i_pts){
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
629 // printf("XXX predict: %5.3f pts: %5.3f error=%5.5f \n",i_pts,d_video->pts2,i_pts-d_video->pts2);
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
630 sh_video->pts=sh_video->i_pts;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
631 sh_video->i_pts=pts;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
632 } else {
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
633 if(pts){
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
634 if(picture_coding_type<=2) sh_video->i_pts=pts;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
635 else {
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
636 // printf("BBB predict: %5.3f pts: %5.3f error=%5.5f \n",pts,d_video->pts2,pts-d_video->pts2);
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
637 sh_video->pts=pts;
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
638 }
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
639 }
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
640 }
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
641 // printf("\rIII pts: %5.3f [%d] (%5.3f) \n",d_video->pts2,picture_coding_type,i_pts);
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
642 } else
14fa6a121a47 fixed the well-known DVD/DVB audio delay bug :)
arpi
parents: 8027
diff changeset
643 sh_video->pts=d_video->pts;
2567
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
644
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
645 if(frame_time_ptr) *frame_time_ptr=frame_time;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
646 return in_size;
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
647
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
648 }
ea6158be8103 video frame reading cleanup
arpi
parents:
diff changeset
649