Mercurial > libavcodec.hg
comparison parser.c @ 4846:841ecebff8c8 libavcodec
timestamps generation improvement when parsing avi
patch by Joakim \ elupus chez ecce dot se /
original thread:
date: 03/19/2007 01:47 AM
subject: [Ffmpeg-devel] [RFC] Improvement for the odd timestamp generation when parser is in use.
| author | benoit |
|---|---|
| date | Fri, 13 Apr 2007 07:50:04 +0000 |
| parents | 522e52c630bd |
| children | 40f3a7f2b1fd |
comparison
equal
deleted
inserted
replaced
| 4845:78bb9129231b | 4846:841ecebff8c8 |
|---|---|
| 122 /* fill first PTS/DTS */ | 122 /* fill first PTS/DTS */ |
| 123 if (s->fetch_timestamp){ | 123 if (s->fetch_timestamp){ |
| 124 s->fetch_timestamp=0; | 124 s->fetch_timestamp=0; |
| 125 s->last_pts = pts; | 125 s->last_pts = pts; |
| 126 s->last_dts = dts; | 126 s->last_dts = dts; |
| 127 s->last_offset = 0; | |
| 127 s->cur_frame_pts[k] = | 128 s->cur_frame_pts[k] = |
| 128 s->cur_frame_dts[k] = AV_NOPTS_VALUE; | 129 s->cur_frame_dts[k] = AV_NOPTS_VALUE; |
| 129 } | 130 } |
| 130 } | 131 } |
| 131 | 132 |
| 136 if (*poutbuf_size) { | 137 if (*poutbuf_size) { |
| 137 /* fill the data for the current frame */ | 138 /* fill the data for the current frame */ |
| 138 s->frame_offset = s->last_frame_offset; | 139 s->frame_offset = s->last_frame_offset; |
| 139 s->pts = s->last_pts; | 140 s->pts = s->last_pts; |
| 140 s->dts = s->last_dts; | 141 s->dts = s->last_dts; |
| 142 s->offset = s->last_offset; | |
| 141 | 143 |
| 142 /* offset of the next frame */ | 144 /* offset of the next frame */ |
| 143 s->last_frame_offset = s->cur_offset + index; | 145 s->last_frame_offset = s->cur_offset + index; |
| 144 /* find the packet in which the new frame starts. It | 146 /* find the packet in which the new frame starts. It |
| 145 is tricky because of MPEG video start codes | 147 is tricky because of MPEG video start codes |
| 154 k = (k - 1) & (AV_PARSER_PTS_NB - 1); | 156 k = (k - 1) & (AV_PARSER_PTS_NB - 1); |
| 155 } | 157 } |
| 156 | 158 |
| 157 s->last_pts = s->cur_frame_pts[k]; | 159 s->last_pts = s->cur_frame_pts[k]; |
| 158 s->last_dts = s->cur_frame_dts[k]; | 160 s->last_dts = s->cur_frame_dts[k]; |
| 161 s->last_offset = s->last_frame_offset - s->cur_frame_offset[k]; | |
| 159 | 162 |
| 160 /* some parsers tell us the packet size even before seeing the first byte of the next packet, | 163 /* some parsers tell us the packet size even before seeing the first byte of the next packet, |
| 161 so the next pts/dts is in the next chunk */ | 164 so the next pts/dts is in the next chunk */ |
| 162 if(index == buf_size){ | 165 if(index == buf_size){ |
| 163 s->fetch_timestamp=1; | 166 s->fetch_timestamp=1; |
