On Sun, 23 Jul 2017, Nicolas George wrote:
[..]
+ int abort_request;
+ pthread_mutex_t mutex;
+ pthread_cond_t cond;
+ AVFormatContext *avctx;
+} AVPacketQueue;
This whole API looks duplicated in the encoder. Not acceptable. You need
to move it into a pair of .c/.h files, with the "ff_" prefix for the
function names (the structure name can stay AV, since it is not
exported).
But I think it would be better if you tried to use AVThreadMessageQueue
instead. You can extend it if necessary.
That is copied from decklink_dec as far as I see. Maybe better to
factorize first, and move it to AVThreadMessageQueue as a second step?
+ pkt1 = (AVPacketList *)av_malloc(sizeof(AVPacketList));
Drop the cast, it is useless in C (this is not c++) and harmful (it can
hide warnings).
I guess some of the casts are there because decklink_dec was c++ code...
+ /* Probe input */
+ for (ret = 0, i = 0; i < ctx->max_frames_probe; i++)
This is already implemented, in a more generic and uniform way, in
libavformat. Drop the loop and move the format-probing code into
ndi_read_packet().
Maybe it's just me, but I am not sure what kind of probing are you
referring to. Could you explain in a bit more detail how the changed code
should work?
+ AVFrame *frame = ctx->video_st ? ctx->video_st->codec->coded_frame : NULL;
This line produces a warning, does it not? Anyway, you are not supposed
to use st->codec any longer.
I guess that is copied from decklink as well. As far as I see, the correct
replacement is to set codecpar->field_order in read_header, and that is
it, right?
+ { "wait_sources", "Time to wait until the number of online sources have changed
(ms)" , OFFSET(wait_sources), AV_OPT_TYPE_INT, { .i64 = 500 }, 100, 10000, DEC },
AV_OPT_TYPE_DURATION
Note: duration is microsec, not milisec, so code/docs needs updating as
well.
+ }
+ if (c->channels != 2 && c->channels != 4 && c->channels != 8) {
+ av_log(avctx, AV_LOG_ERROR, "Unsupported number of channels!"
+ " Only stereo and 7.1 are supported.\n");
Check channel layout too.
I think it is better if it works with unkown channel layouts as well, as
long as the number of channels are supported.
+ if (ctx->video) {
+ av_log(avctx, AV_LOG_ERROR, "Only one video stream is supported!\n");
+ return AVERROR(ENOTSUP);
I suspect this library exists also for Windows and Macos, so you cannot
use ENOTSUP. EINVAL.
Or maybe ENOSYS?
Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel