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 } |
