fftools/ffmpeg: move hwaccel_retrieve_data() from ffmpeg_hw to ffmpeg_dec
This function is decoding-only and has no interaction with the rest of ffmpeg_hw. It thus belongs more properly in ffmpeg_dec.
This commit is contained in:
parent
ebb8a58c8f
commit
a3a9c4ae66
@ -731,8 +731,6 @@ void hw_device_free_all(void);
|
|||||||
*/
|
*/
|
||||||
AVBufferRef *hw_device_for_filter(void);
|
AVBufferRef *hw_device_for_filter(void);
|
||||||
|
|
||||||
int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param dec_opts Dictionary filled with decoder options. Its ownership
|
* @param dec_opts Dictionary filled with decoder options. Its ownership
|
||||||
* is transferred to the decoder.
|
* is transferred to the decoder.
|
||||||
|
@ -265,6 +265,48 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr
|
|||||||
return FFMAX(dp->last_frame_duration_est, 1);
|
return FFMAX(dp->last_frame_duration_est, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input)
|
||||||
|
{
|
||||||
|
InputStream *ist = avctx->opaque;
|
||||||
|
AVFrame *output = NULL;
|
||||||
|
enum AVPixelFormat output_format = ist->hwaccel_output_format;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (input->format == output_format) {
|
||||||
|
// Nothing to do.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
output = av_frame_alloc();
|
||||||
|
if (!output)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
|
output->format = output_format;
|
||||||
|
|
||||||
|
err = av_hwframe_transfer_data(output, input, 0);
|
||||||
|
if (err < 0) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "Failed to transfer data to "
|
||||||
|
"output frame: %d.\n", err);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = av_frame_copy_props(output, input);
|
||||||
|
if (err < 0) {
|
||||||
|
av_frame_unref(output);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
av_frame_unref(input);
|
||||||
|
av_frame_move_ref(input, output);
|
||||||
|
av_frame_free(&output);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
av_frame_free(&output);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int video_frame_process(InputStream *ist, AVFrame *frame)
|
static int video_frame_process(InputStream *ist, AVFrame *frame)
|
||||||
{
|
{
|
||||||
DecoderPriv *dp = dp_from_dec(ist->decoder);
|
DecoderPriv *dp = dp_from_dec(ist->decoder);
|
||||||
|
@ -297,48 +297,6 @@ void hw_device_free_all(void)
|
|||||||
nb_hw_devices = 0;
|
nb_hw_devices = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input)
|
|
||||||
{
|
|
||||||
InputStream *ist = avctx->opaque;
|
|
||||||
AVFrame *output = NULL;
|
|
||||||
enum AVPixelFormat output_format = ist->hwaccel_output_format;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (input->format == output_format) {
|
|
||||||
// Nothing to do.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
output = av_frame_alloc();
|
|
||||||
if (!output)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
output->format = output_format;
|
|
||||||
|
|
||||||
err = av_hwframe_transfer_data(output, input, 0);
|
|
||||||
if (err < 0) {
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "Failed to transfer data to "
|
|
||||||
"output frame: %d.\n", err);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = av_frame_copy_props(output, input);
|
|
||||||
if (err < 0) {
|
|
||||||
av_frame_unref(output);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
av_frame_unref(input);
|
|
||||||
av_frame_move_ref(input, output);
|
|
||||||
av_frame_free(&output);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
av_frame_free(&output);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVBufferRef *hw_device_for_filter(void)
|
AVBufferRef *hw_device_for_filter(void)
|
||||||
{
|
{
|
||||||
// Pick the last hardware device if the user doesn't pick the device for
|
// Pick the last hardware device if the user doesn't pick the device for
|
||||||
|
Loading…
x
Reference in New Issue
Block a user