Mercurial > libavcodec.hg
comparison utils.c @ 10550:eb415f52f9f9 libavcodec
Factorize av_get_bit_rate (for future use outside of libavcodec).
Patch by Robert Kr¸«äger, krueger signal7 de
author | cehoyos |
---|---|
date | Sat, 21 Nov 2009 09:58:15 +0000 |
parents | 981e7720fc03 |
children | 7e316791ac7b |
comparison
equal
deleted
inserted
replaced
10549:981e7720fc03 | 10550:eb415f52f9f9 |
---|---|
741 p = p->next; | 741 p = p->next; |
742 } | 742 } |
743 return NULL; | 743 return NULL; |
744 } | 744 } |
745 | 745 |
746 int av_get_bit_rate(AVCodecContext *ctx) | |
747 { | |
748 int bit_rate; | |
749 int bits_per_sample; | |
750 | |
751 switch(ctx->codec_type) { | |
752 case CODEC_TYPE_VIDEO: | |
753 bit_rate = ctx->bit_rate; | |
754 break; | |
755 case CODEC_TYPE_AUDIO: | |
756 bits_per_sample = av_get_bits_per_sample(ctx->codec_id); | |
757 bit_rate = bits_per_sample ? ctx->sample_rate * ctx->channels * bits_per_sample : ctx->bit_rate; | |
758 break; | |
759 case CODEC_TYPE_DATA: | |
760 bit_rate = ctx->bit_rate; | |
761 break; | |
762 case CODEC_TYPE_SUBTITLE: | |
763 bit_rate = ctx->bit_rate; | |
764 break; | |
765 case CODEC_TYPE_ATTACHMENT: | |
766 bit_rate = ctx->bit_rate; | |
767 break; | |
768 default: | |
769 bit_rate = 0; | |
770 break; | |
771 } | |
772 return bit_rate; | |
773 } | |
774 | |
746 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | 775 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) |
747 { | 776 { |
748 const char *codec_name; | 777 const char *codec_name; |
749 AVCodec *p; | 778 AVCodec *p; |
750 char buf1[32]; | 779 char buf1[32]; |
813 } | 842 } |
814 if (encode) { | 843 if (encode) { |
815 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 844 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
816 ", q=%d-%d", enc->qmin, enc->qmax); | 845 ", q=%d-%d", enc->qmin, enc->qmax); |
817 } | 846 } |
818 bitrate = enc->bit_rate; | |
819 break; | 847 break; |
820 case CODEC_TYPE_AUDIO: | 848 case CODEC_TYPE_AUDIO: |
821 snprintf(buf, buf_size, | 849 snprintf(buf, buf_size, |
822 "Audio: %s", | 850 "Audio: %s", |
823 codec_name); | 851 codec_name); |
829 avcodec_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout); | 857 avcodec_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout); |
830 if (enc->sample_fmt != SAMPLE_FMT_NONE) { | 858 if (enc->sample_fmt != SAMPLE_FMT_NONE) { |
831 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 859 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
832 ", %s", avcodec_get_sample_fmt_name(enc->sample_fmt)); | 860 ", %s", avcodec_get_sample_fmt_name(enc->sample_fmt)); |
833 } | 861 } |
834 | |
835 /* for PCM codecs, compute bitrate directly */ | |
836 switch(enc->codec_id) { | |
837 case CODEC_ID_PCM_F64BE: | |
838 case CODEC_ID_PCM_F64LE: | |
839 bitrate = enc->sample_rate * enc->channels * 64; | |
840 break; | |
841 case CODEC_ID_PCM_S32LE: | |
842 case CODEC_ID_PCM_S32BE: | |
843 case CODEC_ID_PCM_U32LE: | |
844 case CODEC_ID_PCM_U32BE: | |
845 case CODEC_ID_PCM_F32BE: | |
846 case CODEC_ID_PCM_F32LE: | |
847 bitrate = enc->sample_rate * enc->channels * 32; | |
848 break; | |
849 case CODEC_ID_PCM_S24LE: | |
850 case CODEC_ID_PCM_S24BE: | |
851 case CODEC_ID_PCM_U24LE: | |
852 case CODEC_ID_PCM_U24BE: | |
853 case CODEC_ID_PCM_S24DAUD: | |
854 bitrate = enc->sample_rate * enc->channels * 24; | |
855 break; | |
856 case CODEC_ID_PCM_S16LE: | |
857 case CODEC_ID_PCM_S16BE: | |
858 case CODEC_ID_PCM_S16LE_PLANAR: | |
859 case CODEC_ID_PCM_U16LE: | |
860 case CODEC_ID_PCM_U16BE: | |
861 bitrate = enc->sample_rate * enc->channels * 16; | |
862 break; | |
863 case CODEC_ID_PCM_S8: | |
864 case CODEC_ID_PCM_U8: | |
865 case CODEC_ID_PCM_ALAW: | |
866 case CODEC_ID_PCM_MULAW: | |
867 case CODEC_ID_PCM_ZORK: | |
868 bitrate = enc->sample_rate * enc->channels * 8; | |
869 break; | |
870 default: | |
871 bitrate = enc->bit_rate; | |
872 break; | |
873 } | |
874 break; | 862 break; |
875 case CODEC_TYPE_DATA: | 863 case CODEC_TYPE_DATA: |
876 snprintf(buf, buf_size, "Data: %s", codec_name); | 864 snprintf(buf, buf_size, "Data: %s", codec_name); |
877 bitrate = enc->bit_rate; | |
878 break; | 865 break; |
879 case CODEC_TYPE_SUBTITLE: | 866 case CODEC_TYPE_SUBTITLE: |
880 snprintf(buf, buf_size, "Subtitle: %s", codec_name); | 867 snprintf(buf, buf_size, "Subtitle: %s", codec_name); |
881 bitrate = enc->bit_rate; | |
882 break; | 868 break; |
883 case CODEC_TYPE_ATTACHMENT: | 869 case CODEC_TYPE_ATTACHMENT: |
884 snprintf(buf, buf_size, "Attachment: %s", codec_name); | 870 snprintf(buf, buf_size, "Attachment: %s", codec_name); |
885 bitrate = enc->bit_rate; | |
886 break; | 871 break; |
887 default: | 872 default: |
888 snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); | 873 snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); |
889 return; | 874 return; |
890 } | 875 } |
894 ", pass 1"); | 879 ", pass 1"); |
895 if (enc->flags & CODEC_FLAG_PASS2) | 880 if (enc->flags & CODEC_FLAG_PASS2) |
896 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 881 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
897 ", pass 2"); | 882 ", pass 2"); |
898 } | 883 } |
884 bitrate = av_get_bit_rate(enc); | |
899 if (bitrate != 0) { | 885 if (bitrate != 0) { |
900 snprintf(buf + strlen(buf), buf_size - strlen(buf), | 886 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
901 ", %d kb/s", bitrate / 1000); | 887 ", %d kb/s", bitrate / 1000); |
902 } | 888 } |
903 } | 889 } |