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