Mercurial > libavformat.hg
changeset 543:acf8a88674ff libavformat
cleanup
author | michael |
---|---|
date | Sun, 03 Oct 2004 02:57:42 +0000 |
parents | be81a0f1974d |
children | 1244786bfb26 |
files | mpeg.c |
diffstat | 1 files changed, 4 insertions(+), 111 deletions(-) [+] |
line wrap: on
line diff
--- a/mpeg.c Sun Oct 03 02:42:01 2004 +0000 +++ b/mpeg.c Sun Oct 03 02:57:42 2004 +0000 @@ -43,8 +43,6 @@ PacketDesc *premux_packet; PacketDesc **next_packet; int packet_number; - int64_t start_pts; - int64_t start_dts; uint8_t lpcm_header[3]; int lpcm_align; } StreamInfo; @@ -408,8 +406,6 @@ for(i=0;i<ctx->nb_streams;i++) { stream = ctx->streams[i]->priv_data; stream->packet_number = 0; - stream->start_pts = AV_NOPTS_VALUE; - stream->start_dts = AV_NOPTS_VALUE; } s->system_header_size = get_system_header_size(ctx); s->last_scr = 0; @@ -840,14 +836,11 @@ s->packet_number++; } -static int64_t update_scr(AVFormatContext *ctx,int stream_index,int64_t pts) +static int64_t get_vcd_scr(AVFormatContext *ctx,int stream_index,int64_t pts) { MpegMuxContext *s = ctx->priv_data; int64_t scr; - StreamInfo *stream; - int i; - if (s->is_vcd) { /* Since the data delivery rate is constant, SCR is computed using the formula C + i * 1200 where C is the start constant and i is the pack index. @@ -860,35 +853,6 @@ the "recommended" value).*/ scr = 36000 + s->packet_number * 1200; - -#if 0 - for(i=0;i<ctx->nb_streams;i++) { - stream = ctx->streams[i]->priv_data; - - if(scr > stream->start_pts && stream->start_pts!=AV_NOPTS_VALUE) { - av_log(ctx, AV_LOG_DEBUG, "mpeg vcd: SCR above PTS (scr=%0.3f, stream index=%d, stream_pts=%0.3f).\n", scr/90000.0, i, stream->start_pts / 90000.0); - } - } -#endif - } - else { - - - /* XXX I believe this calculation of SCR is wrong. SCR - specifies at which time the data should enter the decoder. - Two packs cannot enter the decoder at the same time. */ - - /* XXX: system clock should be computed precisely, especially for - CBR case. The current mode gives at least something coherent */ - if (stream_index == 0 - && pts != AV_NOPTS_VALUE) - scr = pts; - else - scr = s->last_scr; - } - - s->last_scr=scr; - return scr; } @@ -1000,7 +964,7 @@ the constant overall bitrate.*/ int vcd_pad_bytes; - while((vcd_pad_bytes = get_vcd_padding_size(ctx,stream->start_pts) ) >= s->packet_size){ //FIXME pts cannot be correct here + while((vcd_pad_bytes = get_vcd_padding_size(ctx,stream->premux_packet->pts) ) >= s->packet_size){ //FIXME pts cannot be correct here put_vcd_padding_sector(ctx); s->last_scr += s->packet_size*90000LL / (s->mux_rate*50LL); //FIXME rounding and first few bytes of each packet } @@ -1030,8 +994,7 @@ uint8_t *buf= pkt->data; AVStream *st = ctx->streams[stream_index]; StreamInfo *stream = st->priv_data; - int64_t pts, dts, new_start_pts, new_start_dts; - int len, avail_size; + int64_t pts, dts; PacketDesc *pkt_desc; pts= pkt->pts; @@ -1081,79 +1044,9 @@ for(;;){ int ret= output_packet(ctx, 0); - if(ret<0) + if(ret<=0) return ret; - else if(ret==0) - break; - } - -#if 0 - - /* we assume here that pts != AV_NOPTS_VALUE */ - new_start_pts = stream->start_pts; - new_start_dts = stream->start_dts; - - if (stream->start_pts == AV_NOPTS_VALUE) { - new_start_pts = pts; - new_start_dts = dts; - } - avail_size = get_packet_payload_size(ctx, stream_index, - new_start_pts, - new_start_dts); - if (stream->buffer_ptr >= avail_size) { - - update_scr(ctx,stream_index,stream->start_pts); - - /* unlikely case: outputing the pts or dts increase the packet - size so that we cannot write the start of the next - packet. In this case, we must flush the current packet with - padding. - Note: this always happens for the first audio and video packet - in a VCD file, since they do not carry any data.*/ - flush_packet(ctx, stream_index, - stream->start_pts, stream->start_dts, s->last_scr); - stream->buffer_ptr = 0; } - stream->start_pts = new_start_pts; - stream->start_dts = new_start_dts; - stream->nb_frames++; - while (size > 0) { - avail_size = get_packet_payload_size(ctx, stream_index, - stream->start_pts, - stream->start_dts); - len = avail_size - stream->buffer_ptr; - if (len > size) - len = size; - memcpy(stream->buffer + stream->buffer_ptr, buf, len); - stream->buffer_ptr += len; - buf += len; - size -= len; - if (stream->buffer_ptr >= avail_size) { - - update_scr(ctx,stream_index,stream->start_pts); - - /* if packet full, we send it now */ - flush_packet(ctx, stream_index, - stream->start_pts, stream->start_dts, s->last_scr); - stream->buffer_ptr = 0; - - if (s->is_vcd) { - /* Write one or more padding sectors, if necessary, to reach - the constant overall bitrate.*/ - int vcd_pad_bytes; - - while((vcd_pad_bytes = get_vcd_padding_size(ctx,stream->start_pts) ) >= s->packet_size) - put_vcd_padding_sector(ctx); - } - - /* Make sure only the FIRST pes packet for this frame has - a timestamp */ - stream->start_pts = AV_NOPTS_VALUE; - stream->start_dts = AV_NOPTS_VALUE; - } - } -#endif - return 0; } static int mpeg_mux_end(AVFormatContext *ctx)