mirror of https://git.ffmpeg.org/ffmpeg.git
libavcodec: Move apply_param_change up above avcodec_decode_video2
This is in preparation to calling it from avcodec_decode_video2. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
be540e0cb3
commit
867f923df4
|
@ -842,6 +842,47 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
|
||||||
|
{
|
||||||
|
int size = 0;
|
||||||
|
const uint8_t *data;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
if (!(avctx->codec->capabilities & CODEC_CAP_PARAM_CHANGE))
|
||||||
|
return;
|
||||||
|
|
||||||
|
data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
|
||||||
|
if (!data || size < 4)
|
||||||
|
return;
|
||||||
|
flags = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
if (size < 4) /* Required for any of the changes */
|
||||||
|
return;
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
|
||||||
|
avctx->channels = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
}
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
|
||||||
|
if (size < 8)
|
||||||
|
return;
|
||||||
|
avctx->channel_layout = bytestream_get_le64(&data);
|
||||||
|
size -= 8;
|
||||||
|
}
|
||||||
|
if (size < 4)
|
||||||
|
return;
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
|
||||||
|
avctx->sample_rate = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
}
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
|
||||||
|
if (size < 8)
|
||||||
|
return;
|
||||||
|
avctx->width = bytestream_get_le32(&data);
|
||||||
|
avctx->height = bytestream_get_le32(&data);
|
||||||
|
size -= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
||||||
int *got_picture_ptr,
|
int *got_picture_ptr,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
|
@ -923,47 +964,6 @@ int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx, int16_t *sa
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
|
|
||||||
{
|
|
||||||
int size = 0;
|
|
||||||
const uint8_t *data;
|
|
||||||
uint32_t flags;
|
|
||||||
|
|
||||||
if (!(avctx->codec->capabilities & CODEC_CAP_PARAM_CHANGE))
|
|
||||||
return;
|
|
||||||
|
|
||||||
data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
|
|
||||||
if (!data || size < 4)
|
|
||||||
return;
|
|
||||||
flags = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
if (size < 4) /* Required for any of the changes */
|
|
||||||
return;
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
|
|
||||||
avctx->channels = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
}
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
|
|
||||||
if (size < 8)
|
|
||||||
return;
|
|
||||||
avctx->channel_layout = bytestream_get_le64(&data);
|
|
||||||
size -= 8;
|
|
||||||
}
|
|
||||||
if (size < 4)
|
|
||||||
return;
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
|
|
||||||
avctx->sample_rate = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
}
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
|
|
||||||
if (size < 8)
|
|
||||||
return;
|
|
||||||
avctx->width = bytestream_get_le32(&data);
|
|
||||||
avctx->height = bytestream_get_le32(&data);
|
|
||||||
size -= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
|
int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
|
||||||
AVFrame *frame,
|
AVFrame *frame,
|
||||||
int *got_frame_ptr,
|
int *got_frame_ptr,
|
||||||
|
|
Loading…
Reference in New Issue