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 }