[FFmpeg-devel] [PATCH 2/3 v2] decklink: new option 'format_code' to set video format by fourCC
Matthias Hunstock
atze at fem.tu-ilmenau.de
Mon Mar 20 00:38:06 EET 2017
Am 18.03.2017 um 02:14 schrieb Marton Balint:
>
> On Fri, 17 Mar 2017, Matthias Hunstock wrote:
>
>> Signed-off-by: Matthias Hunstock <atze at fem.tu-ilmenau.de>
>> ---
>> libavdevice/decklink_common.cpp | 17 +++++++++++++----
>> libavdevice/decklink_common_c.h | 1 +
>> libavdevice/decklink_dec.cpp | 5 +++--
>> libavdevice/decklink_dec_c.c | 1 +
>> libavdevice/decklink_enc_c.c | 1 +
>> 5 files changed, 19 insertions(+), 6 deletions(-)
>>
>> diff --git a/libavdevice/decklink_common.cpp
>> b/libavdevice/decklink_common.cpp
>> index 82b3a0c..a75ccc1 100644
>> --- a/libavdevice/decklink_common.cpp
>> +++ b/libavdevice/decklink_common.cpp
>> @@ -33,6 +33,7 @@ extern "C" {
>> #include "libavformat/avformat.h"
>> #include "libavformat/internal.h"
>> #include "libavutil/imgutils.h"
>> +#include "libavutil/intreadwrite.h"
>> #include "libavutil/bswap.h"
>> }
>>
>> @@ -158,8 +159,8 @@ int ff_decklink_set_format(AVFormatContext *avctx,
>> int i = 1;
>> HRESULT res;
>>
>> - av_log(avctx, AV_LOG_DEBUG, "Trying to find mode for frame size
>> %dx%d, frame timing %d/%d, field order %d, direction %d, mode number
>> %d\n",
>> - width, height, tb_num, tb_den, field_order, direction, num);
>> + av_log(avctx, AV_LOG_DEBUG, "Trying to find mode for frame size
>> %dx%d, frame timing %d/%d, field order %d, direction %d, mode number
>> %d, format code %s\n",
>> + width, height, tb_num, tb_den, field_order, direction, num,
>> (cctx->format_code) ? cctx->format_code : "(unset)");
>>
>> if (ctx->duplex_mode) {
>> DECKLINK_BOOL duplex_supported = false;
>> @@ -196,12 +197,18 @@ int ff_decklink_set_format(AVFormatContext *avctx,
>> return AVERROR(EIO);
>> }
>>
>> + BMDDisplayMode target_mode = 0;
>> + char format_buf[] = " ";
>> + if (cctx->format_code)
>> + av_strlcpy(format_buf, cctx->format_code, sizeof(format_buf));
>
> Are you sure this does what you want it to do? The null terminator
> should noy be copied to format_buf.
Oh, you are right, it doesn't work for 'pal'. I was eager to use some
av* function. Will use memcpy.
>> + target_mode = av_bswap32(AV_RL32(format_buf));
>
> I think you can do this in one step with AV_RB32 (the big endian pair of
> AV_RL32)
Thanks for the hint. I tried to look up AV_RL32 but got lost in a loop
of #define s.
>> diff --git a/libavdevice/decklink_enc_c.c b/libavdevice/decklink_enc_c.c
>> index 03734f8..76a040c 100644
>> --- a/libavdevice/decklink_enc_c.c
>> +++ b/libavdevice/decklink_enc_c.c
>> @@ -30,6 +30,7 @@
>> static const AVOption options[] = {
>> { "list_devices", "list available devices" ,
>> OFFSET(list_devices), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, ENC },
>> { "list_formats", "list supported formats" ,
>> OFFSET(list_formats), AV_OPT_TYPE_INT , { .i64 = 0 }, 0, 1, ENC },
>> + { "format_code", "force format by fourcc" ,
>> OFFSET(format_code), AV_OPT_TYPE_STRING, { .str = NULL}, 3, 4, ENC },
>> { "preroll" , "video preroll in seconds", OFFSET(preroll
>> ), AV_OPT_TYPE_DOUBLE, { .dbl = 0.5 }, 0, 5, ENC },
>> { NULL },
>
> Please make outdev support a separate patch if you insist on it, I am
> still not convinced that it is a good idea to support this for outdev
> and allowing mismatching width/height/framerate at the same time.
Ok, I'll just drop it.
> On the other hand, you can merge the documentation into this patch.
Ok
Matthias
More information about the ffmpeg-devel
mailing list