avconv: fix segfault at EOF with delayed pictures
[libav.git] / libavutil / samplefmt.c
CommitLineData
d63e456a 1/*
2912e87a 2 * This file is part of Libav.
d63e456a 3 *
2912e87a 4 * Libav is free software; you can redistribute it and/or
d63e456a
SS
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
2912e87a 9 * Libav is distributed in the hope that it will be useful,
d63e456a
SS
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
2912e87a 15 * License along with Libav; if not, write to the Free Software
d63e456a
SS
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
d63e456a
SS
19#include "samplefmt.h"
20
737eb597
RT
21#include <stdio.h>
22#include <stdlib.h>
23#include <string.h>
24
d63e456a
SS
25typedef struct SampleFmtInfo {
26 const char *name;
27 int bits;
28} SampleFmtInfo;
29
30/** this table gives more information about formats */
31static const SampleFmtInfo sample_fmt_info[AV_SAMPLE_FMT_NB] = {
32 [AV_SAMPLE_FMT_U8] = { .name = "u8", .bits = 8 },
33 [AV_SAMPLE_FMT_S16] = { .name = "s16", .bits = 16 },
34 [AV_SAMPLE_FMT_S32] = { .name = "s32", .bits = 32 },
35 [AV_SAMPLE_FMT_FLT] = { .name = "flt", .bits = 32 },
36 [AV_SAMPLE_FMT_DBL] = { .name = "dbl", .bits = 64 },
37};
38
39const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
40{
41 if (sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB)
42 return NULL;
43 return sample_fmt_info[sample_fmt].name;
44}
45
46enum AVSampleFormat av_get_sample_fmt(const char *name)
47{
48 int i;
49
50 for (i = 0; i < AV_SAMPLE_FMT_NB; i++)
51 if (!strcmp(sample_fmt_info[i].name, name))
52 return i;
53 return AV_SAMPLE_FMT_NONE;
54}
55
56char *av_get_sample_fmt_string (char *buf, int buf_size, enum AVSampleFormat sample_fmt)
57{
58 /* print header */
59 if (sample_fmt < 0)
60 snprintf(buf, buf_size, "name " " depth");
61 else if (sample_fmt < AV_SAMPLE_FMT_NB) {
62 SampleFmtInfo info = sample_fmt_info[sample_fmt];
63 snprintf (buf, buf_size, "%-6s" " %2d ", info.name, info.bits);
64 }
65
66 return buf;
67}
6f84cd12 68
a6703faa
SS
69int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
70{
71 return sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB ?
72 0 : sample_fmt_info[sample_fmt].bits >> 3;
73}
74
75#if FF_API_GET_BITS_PER_SAMPLE_FMT
6f84cd12
SS
76int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt)
77{
78 return sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB ?
79 0 : sample_fmt_info[sample_fmt].bits;
80}
a6703faa 81#endif