Mercurial > libavformat.hg
comparison utils.c @ 5404:0b4951f549d4 libavformat
use AVFormatContext in av_log, better than AVCodecContext when multiple streams are present
author | bcoudurier |
---|---|
date | Tue, 01 Dec 2009 20:15:05 +0000 |
parents | aec4d71f32e4 |
children | e1a281c9d852 |
comparison
equal
deleted
inserted
replaced
5403:6f2d4070ab5b | 5404:0b4951f549d4 |
---|---|
2594 } | 2594 } |
2595 return 0; | 2595 return 0; |
2596 } | 2596 } |
2597 | 2597 |
2598 //FIXME merge with compute_pkt_fields | 2598 //FIXME merge with compute_pkt_fields |
2599 static int compute_pkt_fields2(AVStream *st, AVPacket *pkt){ | 2599 static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt){ |
2600 int delay = FFMAX(st->codec->has_b_frames, !!st->codec->max_b_frames); | 2600 int delay = FFMAX(st->codec->has_b_frames, !!st->codec->max_b_frames); |
2601 int num, den, frame_size, i; | 2601 int num, den, frame_size, i; |
2602 | 2602 |
2603 // av_log(st->codec, AV_LOG_DEBUG, "av_write_frame: pts:%"PRId64" dts:%"PRId64" cur_dts:%"PRId64" b:%d size:%d st:%d\n", pkt->pts, pkt->dts, st->cur_dts, delay, pkt->size, pkt->stream_index); | 2603 // av_log(s, AV_LOG_DEBUG, "av_write_frame: pts:%"PRId64" dts:%"PRId64" cur_dts:%"PRId64" b:%d size:%d st:%d\n", pkt->pts, pkt->dts, st->cur_dts, delay, pkt->size, pkt->stream_index); |
2604 | 2604 |
2605 /* if(pkt->pts == AV_NOPTS_VALUE && pkt->dts == AV_NOPTS_VALUE) | 2605 /* if(pkt->pts == AV_NOPTS_VALUE && pkt->dts == AV_NOPTS_VALUE) |
2606 return -1;*/ | 2606 return -1;*/ |
2607 | 2607 |
2608 /* duration field */ | 2608 /* duration field */ |
2633 | 2633 |
2634 pkt->dts= st->pts_buffer[0]; | 2634 pkt->dts= st->pts_buffer[0]; |
2635 } | 2635 } |
2636 | 2636 |
2637 if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ | 2637 if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ |
2638 av_log(st->codec, AV_LOG_ERROR, "error, non monotone timestamps %"PRId64" >= %"PRId64"\n", st->cur_dts, pkt->dts); | 2638 av_log(s, AV_LOG_ERROR, |
2639 "st:%d error, non monotone timestamps %"PRId64" >= %"PRId64"\n", | |
2640 st->index, st->cur_dts, pkt->dts); | |
2639 return -1; | 2641 return -1; |
2640 } | 2642 } |
2641 if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts < pkt->dts){ | 2643 if(pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE && pkt->pts < pkt->dts){ |
2642 av_log(st->codec, AV_LOG_ERROR, "error, pts < dts\n"); | 2644 av_log(s, AV_LOG_ERROR, "st:%d error, pts < dts\n", st->index); |
2643 return -1; | 2645 return -1; |
2644 } | 2646 } |
2645 | 2647 |
2646 // av_log(NULL, AV_LOG_DEBUG, "av_write_frame: pts2:%"PRId64" dts2:%"PRId64"\n", pkt->pts, pkt->dts); | 2648 // av_log(s, AV_LOG_DEBUG, "av_write_frame: pts2:%"PRId64" dts2:%"PRId64"\n", pkt->pts, pkt->dts); |
2647 st->cur_dts= pkt->dts; | 2649 st->cur_dts= pkt->dts; |
2648 st->pts.val= pkt->dts; | 2650 st->pts.val= pkt->dts; |
2649 | 2651 |
2650 /* update pts */ | 2652 /* update pts */ |
2651 switch (st->codec->codec_type) { | 2653 switch (st->codec->codec_type) { |
2668 return 0; | 2670 return 0; |
2669 } | 2671 } |
2670 | 2672 |
2671 int av_write_frame(AVFormatContext *s, AVPacket *pkt) | 2673 int av_write_frame(AVFormatContext *s, AVPacket *pkt) |
2672 { | 2674 { |
2673 int ret = compute_pkt_fields2(s->streams[pkt->stream_index], pkt); | 2675 int ret = compute_pkt_fields2(s, s->streams[pkt->stream_index], pkt); |
2674 | 2676 |
2675 if(ret<0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) | 2677 if(ret<0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) |
2676 return ret; | 2678 return ret; |
2677 | 2679 |
2678 ret= s->oformat->write_packet(s, pkt); | 2680 ret= s->oformat->write_packet(s, pkt); |
2782 //FIXME/XXX/HACK drop zero sized packets | 2784 //FIXME/XXX/HACK drop zero sized packets |
2783 if(st->codec->codec_type == CODEC_TYPE_AUDIO && pkt->size==0) | 2785 if(st->codec->codec_type == CODEC_TYPE_AUDIO && pkt->size==0) |
2784 return 0; | 2786 return 0; |
2785 | 2787 |
2786 //av_log(NULL, AV_LOG_DEBUG, "av_interleaved_write_frame %d %"PRId64" %"PRId64"\n", pkt->size, pkt->dts, pkt->pts); | 2788 //av_log(NULL, AV_LOG_DEBUG, "av_interleaved_write_frame %d %"PRId64" %"PRId64"\n", pkt->size, pkt->dts, pkt->pts); |
2787 if(compute_pkt_fields2(st, pkt) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) | 2789 if(compute_pkt_fields2(s, st, pkt) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) |
2788 return -1; | 2790 return -1; |
2789 | 2791 |
2790 if(pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) | 2792 if(pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) |
2791 return -1; | 2793 return -1; |
2792 | 2794 |