comparison ffmenc.c @ 3442:a6f4d53b738d libavformat

pass dts and pts through ffm, should fix streaming b frames
author bcoudurier
date Mon, 09 Jun 2008 07:43:14 +0000
parents 2d52ccde8f86
children 90782b5e5ece
comparison
equal deleted inserted replaced
3441:2d52ccde8f86 3442:a6f4d53b738d
195 { 195 {
196 FFMContext *ffm = s->priv_data; 196 FFMContext *ffm = s->priv_data;
197 AVStream *st = s->streams[pkt->stream_index]; 197 AVStream *st = s->streams[pkt->stream_index];
198 int64_t pts; 198 int64_t pts;
199 uint8_t header[FRAME_HEADER_SIZE]; 199 uint8_t header[FRAME_HEADER_SIZE];
200 int header_size = FRAME_HEADER_SIZE;
200 201
201 pts = s->timestamp + pkt->pts; 202 pts = s->timestamp + pkt->pts;
202 /* packet size & key_frame */ 203 /* packet size & key_frame */
203 header[0] = pkt->stream_index; 204 header[0] = pkt->stream_index;
204 header[1] = 0; 205 header[1] = 0;
205 if (pkt->flags & PKT_FLAG_KEY) 206 if (pkt->flags & PKT_FLAG_KEY)
206 header[1] |= FLAG_KEY_FRAME; 207 header[1] |= FLAG_KEY_FRAME;
207 AV_WB24(header+2, pkt->size); 208 AV_WB24(header+2, pkt->size);
208 AV_WB24(header+5, pkt->duration); 209 AV_WB24(header+5, pkt->duration);
209 ffm_write_data(s, header, FRAME_HEADER_SIZE, pts, 1); 210 AV_WB64(header+8, pts);
211 if (pkt->pts != pkt->dts) {
212 header[1] |= FLAG_DTS;
213 AV_WB32(header+16, pkt->pts - pkt->dts);
214 header_size += 4;
215 }
216 ffm_write_data(s, header, header_size, pts, 1);
210 ffm_write_data(s, pkt->data, pkt->size, pts, 0); 217 ffm_write_data(s, pkt->data, pkt->size, pts, 0);
211 218
212 return 0; 219 return 0;
213 } 220 }
214 221