| 203 | } |
| 204 | |
| 205 | int avcodec_parameters_to_context(AVCodecContext *codec, |
| 206 | const AVCodecParameters *par) |
| 207 | { |
| 208 | int ret; |
| 209 | |
| 210 | codec->codec_type = par->codec_type; |
| 211 | codec->codec_id = par->codec_id; |
| 212 | codec->codec_tag = par->codec_tag; |
| 213 | |
| 214 | codec->bit_rate = par->bit_rate; |
| 215 | codec->bits_per_coded_sample = par->bits_per_coded_sample; |
| 216 | codec->bits_per_raw_sample = par->bits_per_raw_sample; |
| 217 | codec->profile = par->profile; |
| 218 | codec->level = par->level; |
| 219 | |
| 220 | switch (par->codec_type) { |
| 221 | case AVMEDIA_TYPE_VIDEO: |
| 222 | codec->pix_fmt = par->format; |
| 223 | codec->width = par->width; |
| 224 | codec->height = par->height; |
| 225 | codec->field_order = par->field_order; |
| 226 | codec->color_range = par->color_range; |
| 227 | codec->color_primaries = par->color_primaries; |
| 228 | codec->color_trc = par->color_trc; |
| 229 | codec->colorspace = par->color_space; |
| 230 | codec->chroma_sample_location = par->chroma_location; |
| 231 | codec->sample_aspect_ratio = par->sample_aspect_ratio; |
| 232 | codec->has_b_frames = par->video_delay; |
| 233 | codec->framerate = par->framerate; |
| 234 | codec->alpha_mode = par->alpha_mode; |
| 235 | break; |
| 236 | case AVMEDIA_TYPE_AUDIO: |
| 237 | codec->sample_fmt = par->format; |
| 238 | ret = av_channel_layout_copy(&codec->ch_layout, &par->ch_layout); |
| 239 | if (ret < 0) |
| 240 | return ret; |
| 241 | codec->sample_rate = par->sample_rate; |
| 242 | codec->block_align = par->block_align; |
| 243 | codec->frame_size = par->frame_size; |
| 244 | codec->delay = |
| 245 | codec->initial_padding = par->initial_padding; |
| 246 | codec->trailing_padding = par->trailing_padding; |
| 247 | codec->seek_preroll = par->seek_preroll; |
| 248 | break; |
| 249 | case AVMEDIA_TYPE_SUBTITLE: |
| 250 | codec->width = par->width; |
| 251 | codec->height = par->height; |
| 252 | break; |
| 253 | } |
| 254 | |
| 255 | av_freep(&codec->extradata); |
| 256 | codec->extradata_size = 0; |
| 257 | if (par->extradata) { |
| 258 | codec->extradata = av_mallocz(par->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); |
| 259 | if (!codec->extradata) |
| 260 | return AVERROR(ENOMEM); |
| 261 | memcpy(codec->extradata, par->extradata, par->extradata_size); |
| 262 | codec->extradata_size = par->extradata_size; |