| @@ -103,7 +103,11 @@ static const struct { · 102 unmodified lines |
| 103 | { "downmix", 2, AV_CH_LAYOUT_STEREO_DOWNMIX, }, | 103 | { "downmix", 2, AV_CH_LAYOUT_STEREO_DOWNMIX, }, |
| 104 | }; | 104 | }; |
| 105 | | 105 | |
| | 106 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 107 | static uint64_t get_channel_layout_single(const char *name, int name_len, int compat) |
| | 108 | #else |
| 106 | static uint64_t get_channel_layout_single(const char *name, int name_len) | 109 | static uint64_t get_channel_layout_single(const char *name, int name_len) |
| | 110 | #endif |
| 107 | { | 111 | { |
| 108 | int i; | 112 | int i; |
| 109 | char *end; | 113 | char *end; |
| @@ -120,16 +124,40 @@ static uint64_t get_channel_layout_single(const char *name, int name_len) · 10 unmodified lines |
| 120 | !memcmp(channel_names[i].name, name, name_len)) | 124 | !memcmp(channel_names[i].name, name, name_len)) |
| 121 | return (int64_t)1 << i; | 125 | return (int64_t)1 << i; |
| 122 | i = strtol(name, &end, 10); | 126 | i = strtol(name, &end, 10); |
| 123 | if (end - name == name_len || | 127 | |
| 124 | (end + 1 - name == name_len && *end == 'c')) | 128 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 129 | if (compat) { |
| | 130 | if (end - name == name_len || |
| | 131 | (end + 1 - name == name_len && *end == 'c')) { |
| | 132 | layout = av_get_default_channel_layout(i); |
| | 133 | if (end - name == name_len) { |
| | 134 | av_log(NULL, AV_LOG_WARNING, |
| | 135 | "Single channel layout '%.*s' is interpreted as a number of channels, " |
| | 136 | "switch to the syntax '%.*sc' otherwise it will be interpreted as a " |
| | 137 | "channel layout number in a later version\n", |
| | 138 | name_len, name, name_len, name); |
| | 139 | return layout; |
| | 140 | } |
| | 141 | } |
| | 142 | } else { |
| | 143 | #endif |
| | 144 | if ((end + 1 - name == name_len && *end == 'c')) |
| 125 | return av_get_default_channel_layout(i); | 145 | return av_get_default_channel_layout(i); |
| | 146 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 147 | } |
| | 148 | #endif |
| | 149 | |
| 126 | layout = strtoll(name, &end, 0); | 150 | layout = strtoll(name, &end, 0); |
| 127 | if (end - name == name_len) | 151 | if (end - name == name_len) |
| 128 | return FFMAX(layout, 0); | 152 | return FFMAX(layout, 0); |
| 129 | return 0; | 153 | return 0; |
| 130 | } | 154 | } |
| 131 | | 155 | |
| | 156 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 157 | uint64_t ff_get_channel_layout(const char *name, int compat) |
| | 158 | #else |
| 132 | uint64_t av_get_channel_layout(const char *name) | 159 | uint64_t av_get_channel_layout(const char *name) |
| | 160 | #endif |
| 133 | { | 161 | { |
| 134 | const char *n, *e; | 162 | const char *n, *e; |
| 135 | const char *name_end = name + strlen(name); | 163 | const char *name_end = name + strlen(name); |
| @@ -137,7 +165,11 @@ uint64_t av_get_channel_layout(const char *name) · 1 unmodified line |
| 137 | | 165 | |
| 138 | for (n = name; n < name_end; n = e + 1) { | 166 | for (n = name; n < name_end; n = e + 1) { |
| 139 | for (e = n; e < name_end && *e != '+' && *e != '|'; e++); | 167 | for (e = n; e < name_end && *e != '+' && *e != '|'; e++); |
| | 168 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 169 | layout_single = get_channel_layout_single(n, e - n, compat); |
| | 170 | #else |
| 140 | layout_single = get_channel_layout_single(n, e - n); | 171 | layout_single = get_channel_layout_single(n, e - n); |
| | 172 | #endif |
| 141 | if (!layout_single) | 173 | if (!layout_single) |
| 142 | return 0; | 174 | return 0; |
| 143 | layout |= layout_single; | 175 | layout |= layout_single; |
| @@ -145,6 +177,13 @@ uint64_t av_get_channel_layout(const char *name) · 1 unmodified line |
| 145 | return layout; | 177 | return layout; |
| 146 | } | 178 | } |
| 147 | | 179 | |
| | 180 | #if FF_API_GET_CHANNEL_LAYOUT_COMPAT |
| | 181 | uint64_t av_get_channel_layout(const char *name) |
| | 182 | { |
| | 183 | return ff_get_channel_layout(name, 1); |
| | 184 | } |
| | 185 | #endif |
| | 186 | |
| 148 | void av_bprint_channel_layout(struct AVBPrint *bp, | 187 | void av_bprint_channel_layout(struct AVBPrint *bp, |
| 149 | int nb_channels, uint64_t channel_layout) | 188 | int nb_channels, uint64_t channel_layout) |
| 150 | { | 189 | { |