avdevice/xv: add support of wrapped avframe codec

Also change the default to that.

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint 2020-04-06 00:01:27 +02:00
parent fccd6c2be0
commit e4ce40d25b
1 changed files with 14 additions and 8 deletions

View File

@ -113,8 +113,8 @@ static int xv_write_header(AVFormatContext *s)
if ( s->nb_streams > 1 if ( s->nb_streams > 1
|| par->codec_type != AVMEDIA_TYPE_VIDEO || par->codec_type != AVMEDIA_TYPE_VIDEO
|| par->codec_id != AV_CODEC_ID_RAWVIDEO) { || (par->codec_id != AV_CODEC_ID_WRAPPED_AVFRAME && par->codec_id != AV_CODEC_ID_RAWVIDEO)) {
av_log(s, AV_LOG_ERROR, "Only supports one rawvideo stream\n"); av_log(s, AV_LOG_ERROR, "Only a single raw or wrapped avframe video stream is supported.\n");
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
@ -322,12 +322,18 @@ static int write_picture(AVFormatContext *s, uint8_t *input_data[4],
static int xv_write_packet(AVFormatContext *s, AVPacket *pkt) static int xv_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
AVCodecParameters *par = s->streams[0]->codecpar; AVCodecParameters *par = s->streams[0]->codecpar;
uint8_t *data[4];
int linesize[4];
av_image_fill_arrays(data, linesize, pkt->data, par->format, if (par->codec_id == AV_CODEC_ID_WRAPPED_AVFRAME) {
par->width, par->height, 1); AVFrame *frame = (AVFrame *)pkt->data;
return write_picture(s, data, linesize); return write_picture(s, frame->data, frame->linesize);
} else {
uint8_t *data[4];
int linesize[4];
av_image_fill_arrays(data, linesize, pkt->data, par->format,
par->width, par->height, 1);
return write_picture(s, data, linesize);
}
} }
static int xv_write_frame(AVFormatContext *s, int stream_index, AVFrame **frame, static int xv_write_frame(AVFormatContext *s, int stream_index, AVFrame **frame,
@ -375,7 +381,7 @@ AVOutputFormat ff_xv_muxer = {
.long_name = NULL_IF_CONFIG_SMALL("XV (XVideo) output device"), .long_name = NULL_IF_CONFIG_SMALL("XV (XVideo) output device"),
.priv_data_size = sizeof(XVContext), .priv_data_size = sizeof(XVContext),
.audio_codec = AV_CODEC_ID_NONE, .audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.write_header = xv_write_header, .write_header = xv_write_header,
.write_packet = xv_write_packet, .write_packet = xv_write_packet,
.write_uncoded_frame = xv_write_frame, .write_uncoded_frame = xv_write_frame,