Re: [FFmpeg-devel] [PATCH 2/2] avformat/avienc: reformat raw rgb to comply to specs

2016-02-16 Thread Mats Peterson

On 02/17/2016 04:56 AM, Mats Peterson wrote:

On 02/17/2016 04:48 AM, Mats Peterson wrote:


AVI has support for palette switching by using the 'xxpc' chunk in the
video data for the record, but it hasn't been implemented yet. I suppose
it's enough to just add an "initial" palette to the BITMAPINFOHEADER in
the meantime.

Mats




And that should be done for 1 bpp AVI as well (using 2 palette entries).



It should be done for any bit depth <= 8 bpp, at that, using 2^bitdepth 
palette entries.


Mats

--
Mats Peterson
http://matsp888.no-ip.org/~mats/
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 2/2] avformat/avienc: reformat raw rgb to comply to specs

2016-02-16 Thread Mats Peterson

On 02/17/2016 04:48 AM, Mats Peterson wrote:


AVI has support for palette switching by using the 'xxpc' chunk in the
video data for the record, but it hasn't been implemented yet. I suppose
it's enough to just add an "initial" palette to the BITMAPINFOHEADER in
the meantime.

Mats




And that should be done for 1 bpp AVI as well (using 2 palette entries).

--
Mats Peterson
http://matsp888.no-ip.org/~mats/
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 2/2] avformat/avienc: reformat raw rgb to comply to specs

2016-02-16 Thread Mats Peterson

On 02/17/2016 04:38 AM, Mats Peterson wrote:

Michael Niedermayer  skrev: (17 februari 2016 03:50:58 
CET)

@todo move to seperate file and reuse in movenc

Signed-off-by: Michael Niedermayer 
---
libavformat/avienc.c  |   40

tests/ref/vsynth/vsynth3-bpp1 |4 ++--
tests/ref/vsynth/vsynth3-rgb  |4 ++--
3 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 649961d..b9aee37 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -644,6 +644,38 @@ static int write_skip_frames(AVFormatContext *s,
int stream_index, int64_t dts)
 return 0;
}

+static int write_reshuffled_raw_rgb(AVFormatContext *s, AVPacket *pkt,
AVCodecContext *enc, int expected_stride)
+{
+int ret;
+AVPacket *new_pkt = av_packet_alloc();
+int stride = pkt->size / enc->height;
+int padding = expected_stride - FFMIN(expected_stride, stride);
+int y;
+
+if (!new_pkt)
+return AVERROR(ENOMEM);
+
+ret = av_new_packet(new_pkt, expected_stride * enc->height);
+if (ret < 0)
+goto end;
+
+ret = av_packet_copy_props(new_pkt, pkt);
+if (ret < 0)
+goto end;
+
+for (y = 0; yheight; y++) {
+memcpy(new_pkt->data + y*expected_stride, pkt->data +
y*stride, FFMIN(expected_stride, stride));
+memset(new_pkt->data + y*expected_stride + expected_stride -
padding, 0, padding);
+}
+
+ret = avi_write_packet(s, new_pkt);
+
+end:
+av_packet_free(&new_pkt);
+
+return ret;
+}
+
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
{
 unsigned char tag[5];
@@ -661,6 +693,14 @@ static int avi_write_packet(AVFormatContext *s,
AVPacket *pkt)
 if (ret < 0)
 return ret;
 }
+if (enc->codec_id == AV_CODEC_ID_RAWVIDEO && enc->codec_tag == 0)
{
+int64_t bpc = enc->bits_per_coded_sample != 15 ?
enc->bits_per_coded_sample : 16;
+int expected_stride = ((enc->width * bpc + 31) >> 5)*4;
+int stride = (enc->width * bpc + 7) >> 3;
+if (expected_stride * enc->height != pkt->size &&
+stride * enc->height == pkt->size)
+return write_reshuffled_raw_rgb(s, pkt, enc,
expected_stride);
+}

 if ((ret = write_skip_frames(s, stream_index, pkt->dts)) < 0)
 return ret;
diff --git a/tests/ref/vsynth/vsynth3-bpp1
b/tests/ref/vsynth/vsynth3-bpp1
index 5a65728..39f27f3 100644
--- a/tests/ref/vsynth/vsynth3-bpp1
+++ b/tests/ref/vsynth/vsynth3-bpp1
@@ -1,4 +1,4 @@
-98852649c5201df7d85d0e9b5a5b9f15 *tests/data/fate/vsynth3-bpp1.avi
-15352 tests/data/fate/vsynth3-bpp1.avi
+d5689d1f5c2d4c28a345d5964a6161a8 *tests/data/fate/vsynth3-bpp1.avi
+20452 tests/data/fate/vsynth3-bpp1.avi
0b1ea21b69d384564dd3a978065443b2
*tests/data/fate/vsynth3-bpp1.out.rawvideo
stddev:   97.64 PSNR:  8.34 MAXDIFF:  248 bytes:86700/86700
diff --git a/tests/ref/vsynth/vsynth3-rgb
b/tests/ref/vsynth/vsynth3-rgb
index c0a8563..f67d285 100644
--- a/tests/ref/vsynth/vsynth3-rgb
+++ b/tests/ref/vsynth/vsynth3-rgb
@@ -1,4 +1,4 @@
-a2cb86007b8945e2d1399b56585b983a *tests/data/fate/vsynth3-rgb.avi
-180252 tests/data/fate/vsynth3-rgb.avi
+000bd5f3251bfd6a2a2b590b2d16fe0b *tests/data/fate/vsynth3-rgb.avi
+183652 tests/data/fate/vsynth3-rgb.avi
693aff10c094f8bd31693f74cf79d2b2
*tests/data/fate/vsynth3-rgb.out.rawvideo
stddev:3.67 PSNR: 36.82 MAXDIFF:   43 bytes:86700/86700
--
1.7.9.5

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Splendid job, Michael. Now only to properly attach the palette to the 
BITMAPINFOHEADER in the strf chunk for AVI. And include it in the video sample 
description for QuickTime.

Mats



AVI has support for palette switching by using the 'xxpc' chunk in the 
video data for the record, but it hasn't been implemented yet. I suppose 
it's enough to just add an "initial" palette to the BITMAPINFOHEADER in 
the meantime.


Mats

--
Mats Peterson
http://matsp888.no-ip.org/~mats/
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 2/2] avformat/avienc: reformat raw rgb to comply to specs

2016-02-16 Thread Mats Peterson
Michael Niedermayer  skrev: (17 februari 2016 03:50:58 
CET)
>@todo move to seperate file and reuse in movenc
>
>Signed-off-by: Michael Niedermayer 
>---
>libavformat/avienc.c  |   40
>
> tests/ref/vsynth/vsynth3-bpp1 |4 ++--
> tests/ref/vsynth/vsynth3-rgb  |4 ++--
> 3 files changed, 44 insertions(+), 4 deletions(-)
>
>diff --git a/libavformat/avienc.c b/libavformat/avienc.c
>index 649961d..b9aee37 100644
>--- a/libavformat/avienc.c
>+++ b/libavformat/avienc.c
>@@ -644,6 +644,38 @@ static int write_skip_frames(AVFormatContext *s,
>int stream_index, int64_t dts)
> return 0;
> }
> 
>+static int write_reshuffled_raw_rgb(AVFormatContext *s, AVPacket *pkt,
>AVCodecContext *enc, int expected_stride)
>+{
>+int ret;
>+AVPacket *new_pkt = av_packet_alloc();
>+int stride = pkt->size / enc->height;
>+int padding = expected_stride - FFMIN(expected_stride, stride);
>+int y;
>+
>+if (!new_pkt)
>+return AVERROR(ENOMEM);
>+
>+ret = av_new_packet(new_pkt, expected_stride * enc->height);
>+if (ret < 0)
>+goto end;
>+
>+ret = av_packet_copy_props(new_pkt, pkt);
>+if (ret < 0)
>+goto end;
>+
>+for (y = 0; yheight; y++) {
>+memcpy(new_pkt->data + y*expected_stride, pkt->data +
>y*stride, FFMIN(expected_stride, stride));
>+memset(new_pkt->data + y*expected_stride + expected_stride -
>padding, 0, padding);
>+}
>+
>+ret = avi_write_packet(s, new_pkt);
>+
>+end:
>+av_packet_free(&new_pkt);
>+
>+return ret;
>+}
>+
> static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
> {
> unsigned char tag[5];
>@@ -661,6 +693,14 @@ static int avi_write_packet(AVFormatContext *s,
>AVPacket *pkt)
> if (ret < 0)
> return ret;
> }
>+if (enc->codec_id == AV_CODEC_ID_RAWVIDEO && enc->codec_tag == 0)
>{
>+int64_t bpc = enc->bits_per_coded_sample != 15 ?
>enc->bits_per_coded_sample : 16;
>+int expected_stride = ((enc->width * bpc + 31) >> 5)*4;
>+int stride = (enc->width * bpc + 7) >> 3;
>+if (expected_stride * enc->height != pkt->size &&
>+stride * enc->height == pkt->size)
>+return write_reshuffled_raw_rgb(s, pkt, enc,
>expected_stride);
>+}
> 
> if ((ret = write_skip_frames(s, stream_index, pkt->dts)) < 0)
> return ret;
>diff --git a/tests/ref/vsynth/vsynth3-bpp1
>b/tests/ref/vsynth/vsynth3-bpp1
>index 5a65728..39f27f3 100644
>--- a/tests/ref/vsynth/vsynth3-bpp1
>+++ b/tests/ref/vsynth/vsynth3-bpp1
>@@ -1,4 +1,4 @@
>-98852649c5201df7d85d0e9b5a5b9f15 *tests/data/fate/vsynth3-bpp1.avi
>-15352 tests/data/fate/vsynth3-bpp1.avi
>+d5689d1f5c2d4c28a345d5964a6161a8 *tests/data/fate/vsynth3-bpp1.avi
>+20452 tests/data/fate/vsynth3-bpp1.avi
>0b1ea21b69d384564dd3a978065443b2
>*tests/data/fate/vsynth3-bpp1.out.rawvideo
> stddev:   97.64 PSNR:  8.34 MAXDIFF:  248 bytes:86700/86700
>diff --git a/tests/ref/vsynth/vsynth3-rgb
>b/tests/ref/vsynth/vsynth3-rgb
>index c0a8563..f67d285 100644
>--- a/tests/ref/vsynth/vsynth3-rgb
>+++ b/tests/ref/vsynth/vsynth3-rgb
>@@ -1,4 +1,4 @@
>-a2cb86007b8945e2d1399b56585b983a *tests/data/fate/vsynth3-rgb.avi
>-180252 tests/data/fate/vsynth3-rgb.avi
>+000bd5f3251bfd6a2a2b590b2d16fe0b *tests/data/fate/vsynth3-rgb.avi
>+183652 tests/data/fate/vsynth3-rgb.avi
>693aff10c094f8bd31693f74cf79d2b2
>*tests/data/fate/vsynth3-rgb.out.rawvideo
> stddev:3.67 PSNR: 36.82 MAXDIFF:   43 bytes:86700/86700
>-- 
>1.7.9.5
>
>___
>ffmpeg-devel mailing list
>ffmpeg-devel@ffmpeg.org
>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Splendid job, Michael. Now only to properly attach the palette to the 
BITMAPINFOHEADER in the strf chunk for AVI. And include it in the video sample 
description for QuickTime.

Mats
-- 
Mats Peterson
http://matsp888.no-ip.org/~mats/
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 2/2] avformat/avienc: reformat raw rgb to comply to specs

2016-02-16 Thread Michael Niedermayer
@todo move to seperate file and reuse in movenc

Signed-off-by: Michael Niedermayer 
---
 libavformat/avienc.c  |   40 
 tests/ref/vsynth/vsynth3-bpp1 |4 ++--
 tests/ref/vsynth/vsynth3-rgb  |4 ++--
 3 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 649961d..b9aee37 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -644,6 +644,38 @@ static int write_skip_frames(AVFormatContext *s, int 
stream_index, int64_t dts)
 return 0;
 }
 
+static int write_reshuffled_raw_rgb(AVFormatContext *s, AVPacket *pkt, 
AVCodecContext *enc, int expected_stride)
+{
+int ret;
+AVPacket *new_pkt = av_packet_alloc();
+int stride = pkt->size / enc->height;
+int padding = expected_stride - FFMIN(expected_stride, stride);
+int y;
+
+if (!new_pkt)
+return AVERROR(ENOMEM);
+
+ret = av_new_packet(new_pkt, expected_stride * enc->height);
+if (ret < 0)
+goto end;
+
+ret = av_packet_copy_props(new_pkt, pkt);
+if (ret < 0)
+goto end;
+
+for (y = 0; yheight; y++) {
+memcpy(new_pkt->data + y*expected_stride, pkt->data + y*stride, 
FFMIN(expected_stride, stride));
+memset(new_pkt->data + y*expected_stride + expected_stride - padding, 
0, padding);
+}
+
+ret = avi_write_packet(s, new_pkt);
+
+end:
+av_packet_free(&new_pkt);
+
+return ret;
+}
+
 static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
 {
 unsigned char tag[5];
@@ -661,6 +693,14 @@ static int avi_write_packet(AVFormatContext *s, AVPacket 
*pkt)
 if (ret < 0)
 return ret;
 }
+if (enc->codec_id == AV_CODEC_ID_RAWVIDEO && enc->codec_tag == 0) {
+int64_t bpc = enc->bits_per_coded_sample != 15 ? 
enc->bits_per_coded_sample : 16;
+int expected_stride = ((enc->width * bpc + 31) >> 5)*4;
+int stride = (enc->width * bpc + 7) >> 3;
+if (expected_stride * enc->height != pkt->size &&
+stride * enc->height == pkt->size)
+return write_reshuffled_raw_rgb(s, pkt, enc, expected_stride);
+}
 
 if ((ret = write_skip_frames(s, stream_index, pkt->dts)) < 0)
 return ret;
diff --git a/tests/ref/vsynth/vsynth3-bpp1 b/tests/ref/vsynth/vsynth3-bpp1
index 5a65728..39f27f3 100644
--- a/tests/ref/vsynth/vsynth3-bpp1
+++ b/tests/ref/vsynth/vsynth3-bpp1
@@ -1,4 +1,4 @@
-98852649c5201df7d85d0e9b5a5b9f15 *tests/data/fate/vsynth3-bpp1.avi
-15352 tests/data/fate/vsynth3-bpp1.avi
+d5689d1f5c2d4c28a345d5964a6161a8 *tests/data/fate/vsynth3-bpp1.avi
+20452 tests/data/fate/vsynth3-bpp1.avi
 0b1ea21b69d384564dd3a978065443b2 *tests/data/fate/vsynth3-bpp1.out.rawvideo
 stddev:   97.64 PSNR:  8.34 MAXDIFF:  248 bytes:86700/86700
diff --git a/tests/ref/vsynth/vsynth3-rgb b/tests/ref/vsynth/vsynth3-rgb
index c0a8563..f67d285 100644
--- a/tests/ref/vsynth/vsynth3-rgb
+++ b/tests/ref/vsynth/vsynth3-rgb
@@ -1,4 +1,4 @@
-a2cb86007b8945e2d1399b56585b983a *tests/data/fate/vsynth3-rgb.avi
-180252 tests/data/fate/vsynth3-rgb.avi
+000bd5f3251bfd6a2a2b590b2d16fe0b *tests/data/fate/vsynth3-rgb.avi
+183652 tests/data/fate/vsynth3-rgb.avi
 693aff10c094f8bd31693f74cf79d2b2 *tests/data/fate/vsynth3-rgb.out.rawvideo
 stddev:3.67 PSNR: 36.82 MAXDIFF:   43 bytes:86700/86700
-- 
1.7.9.5

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel